Exemple #1
0
void PopulateTableFromQuery(lua_State* state, Query* query)
{
	Results results = query->GetResults();

	int resultid = 1;

	for (Results::iterator it = results.begin(); it != results.end(); ++it) {
		Result* result = *it;

		LUA->PushNumber(resultid++);

		LUA->CreateTable();
		{
			bool status = result->GetErrorID() == 0;
			LUA->PushBool(status);
			LUA->SetField(-2, "status");
			if (!status) {
				LUA->PushString(result->GetError().c_str());
				LUA->SetField(-2, "error");
				LUA->PushNumber(result->GetErrorID());
				LUA->SetField(-2, "errorid");
			}
			else {
				LUA->PushNumber(result->GetAffected());
				LUA->SetField(-2, "affected");
				LUA->PushNumber(result->GetLastID());
				LUA->SetField(-2, "lastid");
				LUA->CreateTable();
				PopulateTableFromResult(state, result->GetResult(), query->GetUseNumbers());
				LUA->SetField(-2, "data");
			}
#ifdef ENABLE_QUERY_TIMERS
			LUA->PushNumber(query->GetQueryTime());
			LUA->SetField(-2, "time");
#endif
		}

		LUA->SetTable(-3);
	}
}