示例#1
0
	SQLEntry GetValue(int row, int column)
	{
		char* v = PQgetvalue(res, row, column);
		if (!v || PQgetisnull(res, row, column))
			return SQLEntry();

		return SQLEntry(std::string(v, PQgetlength(res, row, column)));
	}
示例#2
0
 void Query(SQLQuery* query, const std::string& q)
 {
     SQLite3Result res;
     sqlite3_stmt *stmt;
     int err = sqlite3_prepare_v2(conn, q.c_str(), q.length(), &stmt, NULL);
     if (err != SQLITE_OK)
     {
         SQLerror error(SQL_QSEND_FAIL, sqlite3_errmsg(conn));
         query->OnError(error);
         return;
     }
     int cols = sqlite3_column_count(stmt);
     res.columns.resize(cols);
     for(int i=0; i < cols; i++)
     {
         res.columns[i] = sqlite3_column_name(stmt, i);
     }
     while (1)
     {
         err = sqlite3_step(stmt);
         if (err == SQLITE_ROW)
         {
             // Add the row
             res.fieldlists.resize(res.rows + 1);
             res.fieldlists[res.rows].resize(cols);
             for(int i=0; i < cols; i++)
             {
                 const char* txt = (const char*)sqlite3_column_text(stmt, i);
                 if (txt)
                     res.fieldlists[res.rows][i] = SQLEntry(txt);
             }
             res.rows++;
         }
         else if (err == SQLITE_DONE)
         {
             query->OnResult(res);
             break;
         }
         else
         {
             SQLerror error(SQL_QREPLY_FAIL, sqlite3_errmsg(conn));
             query->OnError(error);
             break;
         }
     }
     sqlite3_finalize(stmt);
 }