--- parser3/src/classes/table.C 2016/09/21 15:14:39 1.331
+++ parser3/src/classes/table.C 2016/10/26 15:44:49 1.337
@@ -22,7 +22,7 @@
#define USE_STRINGSTREAM
#endif
-volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.331 2016/09/21 15:14:39 moko Exp $";
+volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.337 2016/10/26 15:44:49 moko Exp $";
// class
@@ -74,15 +74,15 @@ static Table::Action_options get_action_
else
throw Exception(PARSER_RUNTIME, &soffset, "must be 'cur' string or expression");
} else
- result.offset=r.process_to_value(*voffset).as_int();
+ result.offset=r.process(*voffset).as_int();
}
if(Value* vlimit=options->get(sql_limit_name)) {
valid_options++;
- result.limit=r.process_to_value(*vlimit).as_int();
+ result.limit=r.process(*vlimit).as_int();
}
if(Value *vreverse=(Value *)options->get(table_reverse_name)) {
valid_options++;
- result.reverse=r.process_to_value(*vreverse).as_bool();
+ result.reverse=r.process(*vreverse).as_bool();
if(result.reverse && !defined_offset)
result.offset=source.count()-1;
}
@@ -203,12 +203,13 @@ static lsplit_sresult lsplit(char** stri
*(pos++)=0;
result.append(helper.extract(*string_ref));
if(*pos==encloser && helper.check_lang(pos)){ // double-encloser stands for encloser
- *string_ref=pos++;
+ *string_ref=pos;
} else {
*string_ref=pos;
break;
}
}
+ pos++;
} else {
result.append(helper.extract(*string_ref));
*string_ref=0;
@@ -277,7 +278,6 @@ static void _create(Request& r, MethodPa
}
// data
- Temp_lang temp_lang(r, String::L_PASS_APPENDED);
StringSplitHelper sdata(r.process_to_string(params.as_junction(data_param_index, "body must be table or code")));
char *data=sdata.base;
@@ -780,7 +780,7 @@ static void _menu(Request& r, MethodPara
for(size_t row=0; row
key_code) {
info->table->set_current(info->row++); // change context row
- StringOrValue sv_processed=info->r->process(*info->key_code);
+ Value& sv_processed=info->r->process(*info->key_code);
key=&sv_processed.as_string();
} else {
key=info->key_fieldcount()?row->get(info->key_field):0;
@@ -883,7 +883,7 @@ static void table_row_to_hash(Table::ele
case C_CODE: {
if(!info->key_code)
info->table->set_current(info->row++); // change context row
- exist=info->hash->put_dont_replace(*key, &info->r->process(*info->value_code).as_value());
+ exist=info->hash->put_dont_replace(*key, &info->r->process(*info->value_code));
break;
}
}
@@ -937,7 +937,7 @@ static void _hash(Request& r, MethodPara
int valid_options=0;
if(Value* vdistinct_code=options->get(sql_distinct_name)) { // $.distinct ?
valid_options++;
- distinct=get_distinct(r.process_to_value(*vdistinct_code), value_type);
+ distinct=get_distinct(r.process(*vdistinct_code), value_type);
}
if(Value* vvalue_type_code=options->get(sql_value_type_name)) { // $.type ?
if(value_type==C_TABLE) // $.distinct[tables] already was specified
@@ -945,7 +945,7 @@ static void _hash(Request& r, MethodPara
if(value_type==C_CODE)
throw Exception(PARSER_RUNTIME, 0, "you can't specify $.type[] if value is code");
valid_options++;
- value_type=get_value_type(r.process_to_value(*vvalue_type_code));
+ value_type=get_value_type(r.process(*vvalue_type_code));
}
if(valid_options!=options->count())
@@ -1061,7 +1061,7 @@ static void _sort(Request& r, MethodPara
old_table.set_current(i);
// calculate key value
seq[i].row=old_table[i];
- Value& value=r.process_to_value(key_maker);
+ Value& value=r.process(key_maker);
if(i==0) // determining key values type by first one
key_values_are_strings=value.is_string();
@@ -1075,7 +1075,7 @@ static void _sort(Request& r, MethodPara
if(r.charsets.source().NAME()=="KOI8-R" && key_values_are_strings) {
for(i=0; ir->process_to_value(*info->expression_code).as_bool();
+ return info->r->process(*info->expression_code).as_bool();
}
static bool _locate_expression(Table& table, Request& r, MethodParams& params) {
@@ -1173,7 +1173,7 @@ static void _foreach(Request& r, MethodP
if(value_var_name)
r.put_element(*var_context, *value_var_name, new VTable(&table));
- StringOrValue sv_processed=r.process(body_code);
+ Value& sv_processed=r.process(body_code);
Request::Skip lskip=r.get_skip(); r.set_skip(Request::SKIP_NOTHING);
const String* s_processed=sv_processed.get_string();
@@ -1216,7 +1216,6 @@ inline Table::element_type row_from_stri
if(!param.is_string() && !param.get_junction())
throw Exception(PARSER_RUNTIME, 0, "row must be string, code or hash");
- Temp_lang temp_lang(r, String::L_PASS_APPENDED);
const String& string=r.process_to_string(param);
// parse cells
@@ -1391,11 +1390,11 @@ static void _sql(Request& r, MethodParam
}
if(Value* vlimit=options->get(sql_limit_name)) {
valid_options++;
- limit=(ulong)r.process_to_value(*vlimit).as_double();
+ limit=(ulong)r.process(*vlimit).as_double();
}
if(Value* voffset=options->get(sql_offset_name)) {
valid_options++;
- offset=(ulong)r.process_to_value(*voffset).as_double();
+ offset=(ulong)r.process(*voffset).as_double();
}
if(valid_options!=options->count())
throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION);
@@ -1406,9 +1405,8 @@ static void _sql(Request& r, MethodParam
if(bind)
placeholders_count=marshal_binds(*bind, placeholders);
- Temp_lang temp_lang(r, String::L_SQL);
const String& statement_string=r.process_to_string(statement);
- const char* statement_cstr=statement_string.untaint_cstr(r.flang, r.connection());
+ const char* statement_cstr=statement_string.untaint_cstr(String::L_SQL, r.connection());
Table_sql_event_handlers handlers;
@@ -1467,15 +1465,15 @@ static void _select(Request& r, MethodPa
int valid_options=0;
if(Value* vlimit=options->get(sql_limit_name)) {
valid_options++;
- limit=r.process_to_value(*vlimit).as_int();
+ limit=r.process(*vlimit).as_int();
}
if(Value* voffset=options->get(sql_offset_name)) {
valid_options++;
- offset=r.process_to_value(*voffset).as_int();
+ offset=r.process(*voffset).as_int();
}
if(Value* vreverse=options->get(table_reverse_name)) {
valid_options++;
- reverse=r.process_to_value(*vreverse).as_bool();
+ reverse=r.process(*vreverse).as_bool();
}
if(valid_options!=options->count())
throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION);
@@ -1494,7 +1492,7 @@ static void _select(Request& r, MethodPa
for(size_t row=size-1; result_table.count() < (size_t)limit; row--) {
source_table.set_current(row);
- bool condition=r.process_to_value(vcondition, false/*don't intercept string*/).as_bool();
+ bool condition=r.process(vcondition).as_bool();
if(condition && ++appended > (size_t)offset) // ...condition is true, adding to the result
result_table+=source_table[row];
@@ -1504,7 +1502,7 @@ static void _select(Request& r, MethodPa
for(size_t row=0; row < size && result_table.count() < (size_t)limit; row++) {
source_table.set_current(row);
- bool condition=r.process_to_value(vcondition, false/*don't intercept string*/).as_bool();
+ bool condition=r.process(vcondition).as_bool();
if(condition && ++appended > (size_t)offset) // ...condition is true, adding to the result
result_table+=source_table[row];