RowSet Connection::select_all( const string &query, const AttributeList ¶meters ) { sqlite3_stmt *ppStmt = prepare( query, parameters ); RowSet results; while( sqlite3_step( ppStmt ) == SQLITE_ROW ) { results.push_back( Row( ppStmt ) ); } sqlite3_finalize( ppStmt ); return results; }
int DBUtil::Query(RowSet& rset, const char* sql, ...) { SQL_INST* sqlinst = (SQL_INST*)dbHandle_; if(sqlinst == 0) { radlog(L_CONS|L_ERROR, "[DBUtil::Query] invalid instance"); return -1; } char sqlbuf[4096]; va_list args; va_start(args, sql); vsNprintf(sqlbuf, sizeof(sqlbuf), sql, args); va_end(args); SQLSOCK* sqlsock = sql_get_socket(sqlinst); if(sqlsock == NULL) { return -1; } if(rlm_sql_select_query(sqlsock, sqlinst, sqlbuf) != 0) { sql_release_socket(sqlinst, sqlsock); return -1; } int colcnt = rlm_sql_num_fields(sqlsock, sqlinst); int rownum = 0; rset.clear(); for(;;) { if(rlm_sql_fetch_row(sqlsock, sqlinst) != 0) { rownum = -1; break; } if(sqlsock->row == NULL) { break; } ++rownum; Row row; for(int i=0; i<colcnt; ++i) row.push_back(sqlsock->row[i]); rset.push_back(row); } rlm_sql_finish_select_query(sqlsock, sqlinst); sql_release_socket(sqlinst, sqlsock); return rownum; }