- AddonProps props(m_pDS2->fv("addonID" ).get_asString(),
- TranslateType(m_pDS2->fv("type").get_asString()),
- m_pDS2->fv("version").get_asString(),
- m_pDS2->fv("minversion").get_asString());
- props.name = m_pDS2->fv("name").get_asString();
- props.summary = m_pDS2->fv("summary").get_asString();
- props.description = m_pDS2->fv("description").get_asString();
- props.changelog = m_pDS2->fv("changelog").get_asString();
- props.path = m_pDS2->fv("path").get_asString();
- props.icon = m_pDS2->fv("icon").get_asString();
- props.fanart = m_pDS2->fv("fanart").get_asString();
- props.author = m_pDS2->fv("author").get_asString();
- props.disclaimer = m_pDS2->fv("disclaimer").get_asString();
- sql = PrepareSQL("select reason from broken where addonID='%s'",props.id.c_str());
- m_pDS2->query(sql.c_str());
- if (!m_pDS2->eof())
- props.broken = m_pDS2->fv(0).get_asString();
-
- sql = PrepareSQL("select key,value from addonextra where id=%i", id);
- m_pDS2->query(sql.c_str());
- while (!m_pDS2->eof())
- {
- props.extrainfo.insert(make_pair(m_pDS2->fv(0).get_asString(), m_pDS2->fv(1).get_asString()));
- m_pDS2->next();
- }
-
- sql = PrepareSQL("select addon,version,optional from dependencies where id=%i", id);
- m_pDS2->query(sql.c_str());
- while (!m_pDS2->eof())
+ const dbiplus::query_data &data = m_pDS2->get_result_set().records;
+ const dbiplus::sql_record* const record = data[0];
+ AddonProps props(record->at(addon_addonID).get_asString(),
+ TranslateType(record->at(addon_type).get_asString()),
+ record->at(addon_version).get_asString(),
+ record->at(addon_minversion).get_asString());
+ props.name = record->at(addon_name).get_asString();
+ props.summary = record->at(addon_summary).get_asString();
+ props.description = record->at(addon_description).get_asString();
+ props.changelog = record->at(addon_changelog).get_asString();
+ props.path = record->at(addon_path).get_asString();
+ props.icon = record->at(addon_icon).get_asString();
+ props.fanart = record->at(addon_fanart).get_asString();
+ props.author = record->at(addon_author).get_asString();
+ props.disclaimer = record->at(addon_disclaimer).get_asString();
+ props.broken = record->at(broken_reason).get_asString();
+
+ /* while this is a cartesion join and we'll typically get multiple rows, we rely on the fact that
+ extrainfo and dependencies are maps, so insert() will insert the first instance only */
+ for (dbiplus::query_data::const_iterator i = data.begin(); i != data.end(); ++i)