QList<QVariantList> TcDataAccess::fetchAllList(const QString &sql, const QVariantList &bind /* = QVariantList() */) { _prepareExec(sql, bind); QList<QVariantList> result; QVariantList row; QSqlRecord rec; while (_query->next()) { rec = _query->record(); if (result.isEmpty()) { for (int i = 0; i < rec.count(); i++) { row << _case(rec.fieldName(i)); } result << row; row.clear(); } for (int i = 0; i < rec.count(); i++) { row << _trim(rec.value(i)); } result << row; row.clear(); } return result; }
QVariantMap TcDataAccess::fetchRow(const QString &sql, const QVariantList &bind /* = QVariantList() */) { _prepareExec(sql, bind); QVariantMap row; if (_query->next()) { QSqlRecord rec = _query->record(); for (int i = rec.count() - 1; i > -1; i--) { row[_case(rec.fieldName(i))] = _trim(rec.value(i)); } } return row; }
QList<QVariantMap> TcDataAccess::fetchAll(const QString &sql, const QVariantList &bind /* = QVariantList() */) { _prepareExec(sql, bind); QList<QVariantMap> result; QVariantMap row; while (_query->next()) { QSqlRecord rec = _query->record(); for (int i = rec.count() - 1; i > -1; i--) { row[_case(rec.fieldName(i))] = _trim(rec.value(i)); } result << row; row.clear(); } return result; }
/* The routine parses input string. It is expected it is a unsigned integer with optional unit. Units are: "b" for bytes, "kb" or just "k" for kilobytes, "mb" or "m" for megabytes, ..., "yb" or "y" for yottabytes. :-) Unit name is case-insensitive. The routine returns 0 if everything is ok, or error code: -1 in case of overflow, -2 in case of unknown unit. *size is set to parsed value. In case of overflow *size is set to KMP_SIZE_T_MAX, in case of unknown unit *size is set to zero. */ void __kmp_str_to_size( // R: Error code. char const * str, // I: String of characters, unsigned number and unit ("b", "kb", etc). size_t * out, // O: Parsed number. size_t dfactor, // I: The factor if none of the letters specified. char const * * error // O: Null if everything is ok, error message otherwise. ) { size_t value = 0; size_t factor = 0; int overflow = 0; int bad_unit = 0; int i = 0; int digit; KMP_DEBUG_ASSERT( str != NULL ); // Skip spaces. while ( str[ i ] == ' ' || str[ i ] == '\t') { ++ i; }; // while // Parse number. if ( str[ i ] < '0' || str[ i ] > '9' ) { * error = KMP_I18N_STR( NotANumber ); return; }; // if do { digit = str[ i ] - '0'; overflow = overflow || ( value > ( KMP_SIZE_T_MAX - digit ) / 10 ); value = ( value * 10 ) + digit; ++ i; } while ( str[ i ] >= '0' && str[ i ] <= '9' ); // Skip spaces. while ( str[ i ] == ' ' || str[ i ] == '\t' ) { ++ i; }; // while // Parse unit. #define _case( ch, exp ) \ case ch : \ case ch - ( 'a' - 'A' ) : { \ size_t shift = (exp) * 10; \ ++ i; \ if ( shift < sizeof( size_t ) * 8 ) { \ factor = (size_t)( 1 ) << shift; \ } else { \ overflow = 1; \ }; \ } break; switch ( str[ i ] ) { _case( 'k', 1 ); // Kilo _case( 'm', 2 ); // Mega _case( 'g', 3 ); // Giga _case( 't', 4 ); // Tera _case( 'p', 5 ); // Peta _case( 'e', 6 ); // Exa _case( 'z', 7 ); // Zetta _case( 'y', 8 ); // Yotta // Oops. No more units... }; // switch #undef _case if ( str[ i ] == 'b' || str[ i ] == 'B' ) { // Skip optional "b". if ( factor == 0 ) { factor = 1; } ++ i; }; // if if ( ! ( str[ i ] == ' ' || str[ i ] == '\t' || str[ i ] == 0 ) ) { // Bad unit * error = KMP_I18N_STR( BadUnit ); return; }; // if if ( factor == 0 ) { factor = dfactor; } // Apply factor. overflow = overflow || ( value > ( KMP_SIZE_T_MAX / factor ) ); value *= factor; // Skip spaces. while ( str[ i ] == ' ' || str[ i ] == '\t' ) { ++ i; }; // while if ( str[ i ] != 0 ) { * error = KMP_I18N_STR( IllegalCharacters ); return; }; // if if ( overflow ) { * error = KMP_I18N_STR( ValueTooLarge ); * out = KMP_SIZE_T_MAX; return; }; // if * error = NULL; * out = value; } // __kmp_str_to_size