--- parser3/src/classes/table.C 2024/09/11 21:07:36 1.363 +++ parser3/src/classes/table.C 2024/10/02 22:54:03 1.366 @@ -25,7 +25,7 @@ #include "pa_vbool.h" #include "pa_array.h" -volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.363 2024/09/11 21:07:36 moko Exp $"; +volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.366 2024/10/02 22:54:03 moko Exp $"; // class @@ -69,19 +69,22 @@ static Table::Action_options get_action_ result.offset=source.current(); else throw Exception(PARSER_RUNTIME, &soffset, "must be 'cur' string or expression"); - } else - result.offset=r.process(*voffset).as_int(); + } else { + int offset=r.process(*voffset).as_int(); + result.offset=offset < 0 ? 0 : offset; + } } if(Value* vlimit=options->get(sql_limit_name)) { valid_options++; - result.limit=r.process(*vlimit).as_int(); + int limit=r.process(*vlimit).as_int(); + result.limit=limit < 0 ? 0: limit; } - if(Value *vreverse=(Value *)options->get(table_reverse_name)) { + if(Value *vreverse=(Value *)options->get(table_reverse_name)) { valid_options++; result.reverse=r.process(*vreverse).as_bool(); if(result.reverse && !defined_offset) result.offset=source.count()-1; - } + } if(valid_options!=options->count()) throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); @@ -256,9 +259,9 @@ static void _create(Request& r, MethodPa if(params.count()>1) { if(params[0].is_string()){ // can be nameless only - const String& snameless=params.as_string(0, "called with more then 1 param, first param may be only string 'nameless' or junction"); + const String& snameless=params.as_string(0, "called with more than 1 param, first param may be only string 'nameless' or junction"); if(snameless!="nameless") - throw Exception(PARSER_RUNTIME, &snameless, "table::create called with more then 1 param, first param may be only 'nameless'"); + throw Exception(PARSER_RUNTIME, &snameless, "table::create called with more than 1 param, first param may be only 'nameless'"); nameless=true; data_param_index++; } @@ -846,11 +849,11 @@ static void table_row_to_hash(Table::ele for(Array_iterator i(*info->value_fields); i; ) { size_t value_field=i.next(); if(value_fieldcount()) - hash.put(columns ? *columns->get(value_field) : String(format(value_field, 0)), new VString(*row->get(value_field))); + hash.put(columns ? *columns->get(value_field) : String(pa_uitoa(value_field)), new VString(*row->get(value_field))); } } else { // all fields for(size_t index=0; indexcount(); index++) { - hash.put(columns && index < columns->count() ? *columns->get(index) : String(format(index, 0)), new VString(*row->get(index))); + hash.put(columns && index < columns->count() ? *columns->get(index) : String(pa_uitoa(index)), new VString(*row->get(index))); } } exist=info->hash->put_dont_replace(*key, vhash); @@ -980,7 +983,7 @@ static void _hash(Request& r, MethodPara throw Exception(PARSER_RUNTIME, 0, "value field(s) must be string or table or code"); if(value_type==C_STRING && value_fields.count()>1) - throw Exception(PARSER_RUNTIME, 0, "you can't specify more then one value field with option $.type[string]"); + throw Exception(PARSER_RUNTIME, 0, "you can't specify more than one value field with option $.type[string]"); } Value* key_param=¶ms[0];