예제 #1
0
		PublicPlaceTableSync::SearchResult PublicPlaceTableSync::Search(
			Env& env,
			optional<RegistryKeyType> cityId,
			optional<string> name,
			int first /*= 0*/,
			optional<std::size_t> number  /*= 0*/,
			LinkLevel linkLevel
		){
			SelectQuery<PublicPlaceTableSync> query;
			if(cityId)
			{
				query.addWhereField(COL_CITYID, *cityId);
			}
			if(name)
			{
				query.addWhereField(COL_NAME, *name, ComposedExpression::OP_LIKE);
			}

			if (number)
				query.setNumber(*number + 1);
			if (first > 0)
				query.setFirst(first);

			return LoadFromQuery(query, env, linkLevel);
		}
		InterSYNTHESESlaveTableSync::SearchResult InterSYNTHESESlaveTableSync::Search(
			Env& env,
			std::string name
			, int first /*= 0*/,
			boost::optional<std::size_t> number
			, bool orderByName
			, bool raisingOrder,
			LinkLevel linkLevel
		){
			SelectQuery<InterSYNTHESESlaveTableSync> query;
			if (!name.empty())
			{
				query.addWhereField(SimpleObjectFieldDefinition<Name>::FIELD.name, name, ComposedExpression::OP_LIKE);
			}
			if (orderByName)
			{
				query.addOrderField(SimpleObjectFieldDefinition<Name>::FIELD.name, raisingOrder);
			}
			if (number)
			{
				query.setNumber(*number + 1);
			}
			if (first > 0)
			{
				query.setFirst(first);
			}

			return LoadFromQuery(query, env, linkLevel);
		}
예제 #3
0
		MapSourceTableSync::SearchResult MapSourceTableSync::Search(
			util::Env& env,
			optional<string> name,
			size_t first /*= 0*/,
			optional<size_t> number /*= boost::optional<std::size_t>()*/,
			bool orderByName,
			bool raisingOrder,
			util::LinkLevel linkLevel
		){
			SelectQuery<MapSourceTableSync> query;
			if(name)
			{
				query.addWhereField(COL_NAME, *name, ComposedExpression::OP_LIKE);
			}
			if(orderByName)
			{
			 	query.addOrderField(COL_NAME, raisingOrder);
			}
			if (number)
			{
				query.setNumber(*number + 1);
			}
			if (first > 0)
			{
				query.setFirst(first);
			}

			return LoadFromQuery(query, env, linkLevel);
		}
예제 #4
0
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;
}
DriverAllocationTemplateTableSync::SearchResult DriverAllocationTemplateTableSync::Search(
    util::Env& env,
    boost::gregorian::date date /*= boost::gregorian::date(not_a_date_time)*/,
    size_t first /*= 0*/,
    boost::optional<std::size_t> number /*= boost::optional<std::size_t>()*/,
    bool orderByDate /*= true*/,
    bool raisingOrder /*= true*/,
    util::LinkLevel linkLevel /*= util::UP_LINKS_LOAD_LEVEL */
) {
    SelectQuery<DriverAllocationTemplateTableSync> query;
    if (!date.is_not_a_date())
    {
        query.addWhereField(SimpleObjectFieldDefinition<Date>::FIELD.name, to_iso_extended_string(date));
    }
    if (orderByDate)
    {
        query.addOrderField(SimpleObjectFieldDefinition<Date>::FIELD.name, raisingOrder);
    }
    if (number)
    {
        query.setNumber(*number + 1);
    }
    if (first > 0)
    {
        query.setFirst(first);
    }

    return LoadFromQuery(query, env, linkLevel);
}
예제 #6
0
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);
}
예제 #7
0
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);
}
예제 #8
0
void Statistics::loadTypes() {
    using namespace Database;

    SelectQuery query;
    query.addColumn("statistics_types", "stat_type_id");
    query.addColumn("statistics_types", "stat_type_name");
    query.addServerTable("statistics_types");

    auto result = query.execute();

    for (const auto &row : result) {
        types.emplace(row["stat_type_name"].as<std::string>(), row["stat_type_id"].as<int>());
    }
}
예제 #9
0
void Statistics::load() {
    using namespace Database;

    SelectQuery query;
    query.addColumn("statistics", "stat_type");
    query.addColumn("statistics", "stat_players");
    query.addColumn("statistics", "stat_bin");
    query.addColumn("statistics", "stat_count");
    query.addEqualCondition<int>("statistics", "stat_version", versionId);
    query.addServerTable("statistics");

    auto result = query.execute();

    for (const auto &row : result) {
        int type = row["stat_type"].as<int>();
        int players_online = row["stat_players"].as<int>();
        int bin = row["stat_bin"].as<int>();
        int count = row["stat_count"].as<int>();

        while (statisticsDB[type].size() <= static_cast<size_t>(players_online)) {
            statisticsDB[type].emplace_back();
        }

        statisticsDB[type][players_online][bin] = count;
    }
}
MailingListSubscriptionTableSync::SearchResult MailingListSubscriptionTableSync::Search(
    Env& env,
    int first /*= 0*/,
    optional<size_t> number,
    bool raisingOrder,
    LinkLevel linkLevel
) {
    SelectQuery<MailingListSubscriptionTableSync> query;
    if (number)
    {
        query.setNumber(*number + 1);
    }
    if (first > 0)
    {
        query.setFirst(first);
    }

    return LoadFromQuery(query, env, linkLevel);
}
예제 #11
0
	    RoadChunkTableSync::SearchResult RoadChunkTableSync::Search(
			Env& env,
			optional<RegistryKeyType> roadId,
			int first /*= 0*/,
			boost::optional<std::size_t> number  /*= 0*/,
			LinkLevel linkLevel
		){
			SelectQuery<RoadChunkTableSync> query;
			if(roadId)
			{
				query.addWhereField(COL_ROADID, *roadId);
			}
			if (number)
				query.setNumber(*number + 1);
			if (first > 0)
				query.setFirst(first);

			return LoadFromQuery(query, env, linkLevel);
	    }
예제 #12
0
		TimetableRowTableSync::SearchResult TimetableRowTableSync::Search(
			Env& env,
			optional<RegistryKeyType> timetableId
			, bool orderByTimetable
			, bool raisingOrder
			, int first
			, boost::optional<std::size_t> number,
			LinkLevel linkLevel
		){
			SelectQuery<TimetableRowTableSync> query;

			// Selection
			if (timetableId)
			{
				query.addWhereField(COL_TIMETABLE_ID, *timetableId);
			}

			// Ordering
			if (orderByTimetable)
			{
				query.addOrderField(COL_TIMETABLE_ID, raisingOrder);
				query.addOrderField(COL_RANK, raisingOrder);
			}

			// Size
			if (number)
				query.setNumber(*number + 1);
			if (first > 0)
				query.setFirst(first);

			return LoadFromQuery(query, env, linkLevel);
		}
		TimetableRowGroupItemTableSync::SearchResult TimetableRowGroupItemTableSync::Search(
			util::Env& env,
			boost::optional<util::RegistryKeyType> timetableRowGroupId,
			boost::optional<size_t> rank,
			int first,
			boost::optional<std::size_t> number,
			bool orderByRank,
			bool raisingOrder,
			util::LinkLevel linkLevel
		){
			SelectQuery<TimetableRowGroupItemTableSync> query;
			if (timetableRowGroupId)
			{
				query.addWhereField(SimpleObjectFieldDefinition<TimetableRowGroup>::FIELD.name, *timetableRowGroupId);
			}
			if(rank)
			{
				query.addWhereField(SimpleObjectFieldDefinition<Rank>::FIELD.name, *rank);
			}
			if(orderByRank)
			{
				query.addOrderField(SimpleObjectFieldDefinition<Rank>::FIELD.name, raisingOrder);
			}
			if (number)
			{
				query.setNumber(*number + 1);
				if (first > 0)
					query.setFirst(first);
			}

			return LoadFromQuery(query, env, linkLevel);
		}
예제 #14
0
		PermanentThreadTableSync::SearchResult PermanentThreadTableSync::Search(
			Env& env,
			int first /*= 0*/
			, optional<size_t> number /*= 0*/
			, bool orderByName
			, bool raisingOrder,
			LinkLevel linkLevel
		){
			SelectQuery<PermanentThreadTableSync> query;
			if (orderByName)
			{
				query.addOrderField(Name::FIELD.name, raisingOrder);
			}
			if (number)
			{
				query.setNumber(*number + 1);
			}
			if (first > 0)
			{
				query.setFirst(first);
			}

			return LoadFromQuery(query, env, linkLevel);
		}
예제 #15
0
 std::string MySQLValueRenderer::render(const SelectQuery& x) {
   // TODO: Actually, the semantics here may have to be slightly different, because
   // a sub-SELECT is allowed to do different things from a toplevel select.
   MySQLQueryRenderer renderer{conn, symbolic_relation_resolver};
   return wayward::format("({0})", x.to_sql(renderer));
 }
예제 #16
0
 /** modifies SelectQuery to order result set 
     \param f field to order by
     \param asc ascending order 
     \return *this, methods can be chained */
 DataSource& orderBy(FieldType f, bool asc=true) {
     sel.orderBy(f.fullName(), asc);
     return *this;
 }
예제 #17
0
 /** 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;
 }
예제 #18
0
파일: expr.cpp 프로젝트: aclysma/Helium
In::In(const FieldType & fld, const SelectQuery& s)
    : Oper(fld, LITESQL_L("in"), LITESQL_L("(") + s.asString() + LITESQL_L(")")) {}