SelectQuery selectObjectQuery(const std::vector<FieldType>& fdatas, const Expr& e) { SelectQuery sel; Split tables; std::set<LITESQL_String> tableSet; for (size_t i = 0; i < fdatas.size(); i++) if (tableSet.find(fdatas[i].table()) == tableSet.end()) { tables.push_back(fdatas[i].table()); tableSet.insert(fdatas[i].table()); } Split tableFilters; tableFilters.resize(tables.size()-1); for (size_t i = 1; i < tables.size(); i++) tableFilters[i-1] = tables[i-1] + LITESQL_L(".id_ = ") + tables[i] + LITESQL_L(".id_"); tableSet.clear(); for (size_t i = 0; i < tables.size(); i++) { sel.source(tables[i]); tableSet.insert(tables[i]); } if (tables.size() > 1) sel.where((e && RawExpr(tableFilters.join(LITESQL_L(" AND ")))).asString()); else sel.where(e.asString()); for (size_t i = 0; i < fdatas.size(); i++) sel.result(fdatas[i].table() + LITESQL_L(".") + fdatas[i].name()); return sel; }
template <> litesql::DataSource<pomotuxdatabase::ActivityInventorySheet> ActivityInAIS::get(const litesql::Database& db, const litesql::Expr& expr, const litesql::Expr& srcExpr) { SelectQuery sel; sel.source(table__); sel.result(ActivityInventorySheet.fullName()); sel.where(srcExpr); return DataSource<pomotuxdatabase::ActivityInventorySheet>(db, pomotuxdatabase::ActivityInventorySheet::Id.in(sel) && expr); }
litesql::DataSource<ActivityInTTS::Row> ActivityInTTS::getRows(const litesql::Database& db, const litesql::Expr& expr) { SelectQuery sel; sel.result(Activity.fullName()); sel.result(TodoTodaySheet.fullName()); sel.source(table__); sel.where(expr); return DataSource<ActivityInTTS::Row>(db, sel); }
/** modifies SelectQuery to order result set by external table \param id foreign key field used to join table with query \param f field to order by \param asc ascending order \return *this, methods can be chained */ DataSource& orderByRelation(FieldType id, FieldType f, bool asc=true) { sel.source(id.table()); sel.where(id == T::Id); sel.orderBy(f.fullName(), asc); return *this; }