--- parser3/src/classes/table.C 2001/05/08 09:16:10 1.76 +++ parser3/src/classes/table.C 2001/06/29 08:35:26 1.87 @@ -4,9 +4,8 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - - $Id: table.C,v 1.76 2001/05/08 09:16:10 paf Exp $ */ +static const char *RCSId="$Id: table.C,v 1.87 2001/06/29 08:35:26 parser Exp $"; #include "pa_config_includes.h" @@ -195,7 +194,7 @@ static void _offset(Request& r, const St Table& table=static_cast(r.self)->table(); if(params->size()) { Value& offset_expr=params->get_junction(0, "offset must be expression"); - table.shift((int)r.process(offset_expr).as_double()); + table.shift(r.process(offset_expr).as_int()); } else { Value& value=*new(pool) VInt(pool, table.current()); r.write_no_lang(value); @@ -246,7 +245,7 @@ static void store_column_item_to_hash(Ar if(const String *column_item=ri.table->item(column_name)) value=new(*ri.pool) VString(*column_item); else - value=new(*ri.pool) VUnknown(*ri.pool); + value=new(*ri.pool) VVoid(*ri.pool); ri.hash->put(column_name, value); } static void _record(Request& r, const String& method_name, MethodParams *) { @@ -284,7 +283,7 @@ static void table_row_to_hash(Array::Ite new(pool) VString(*row.get_string(value_field))); } - ri.hash->put(*row.get_string(ri.key_field), result); + ri.hash->put(*row.get_string(ri.key_field), &result); } } static void _hash(Request& r, const String& method_name, MethodParams *params) { @@ -323,7 +322,7 @@ static void _hash(Request& r, const Stri } /// used by table: _sort / sort_cmp_string|sort_cmp_double -struct Seq_item { +struct Table_seq_item { Array *row; union { char *c_str; @@ -332,13 +331,13 @@ struct Seq_item { }; static int sort_cmp_string(const void *a, const void *b) { return strcmp( - static_cast(a)->value.c_str, - static_cast(b)->value.c_str + static_cast(a)->value.c_str, + static_cast(b)->value.c_str ); } static int sort_cmp_double(const void *a, const void *b) { - double va=static_cast(a)->value.d; - double vb=static_cast(b)->value.d; + double va=static_cast(a)->value.d; + double vb=static_cast(b)->value.d; if(vavb) @@ -359,7 +358,7 @@ static void _sort(Request& r, const Stri if(!table.size()) return; - Seq_item *seq=(Seq_item *)malloc(sizeof(Seq_item)*table.size()); + Table_seq_item *seq=(Table_seq_item *)malloc(sizeof(Table_seq_item)*table.size()); int i; // calculate key values @@ -378,7 +377,7 @@ static void _sort(Request& r, const Stri seq[i].value.d=value.as_double(); } // sort keys - _qsort(seq, table.size(), sizeof(Seq_item), + _qsort(seq, table.size(), sizeof(Table_seq_item), key_values_are_strings?sort_cmp_string:sort_cmp_double); // reorder table as they require in 'seq' @@ -505,7 +504,7 @@ static void _sql(Request& r, const Strin &sql_column_count, &sql_columns, &sql_row_count, &sql_rows); } - PCATCH(e) { // connect/process problem + PCATCH(e) { // query problem rethrow_me=e; need_rethrow=true; } PEND_CATCH @@ -525,20 +524,19 @@ static void _sql(Request& r, const Strin Table& table=*new(pool) Table(pool, &method_name, &table_columns); - { - for(unsigned long r=0; r