Diff for /parser3/src/classes/string.C between versions 1.97 and 1.99

version 1.97, 2002/02/08 08:30:10 version 1.99, 2002/04/10 09:53:14
Line 50  static void _int(Request& r, const Strin Line 50  static void _int(Request& r, const Strin
                 if(!default_code) // we have a problem when no default                  if(!default_code) // we have a problem when no default
                         /*re*/throw;                          /*re*/throw;
                 else                  else
                         converted=r.process(*default_code).as_int();                          converted=r.process_to_value(*default_code).as_int();
         }          }
   
         Value& result=*new(pool) VInt(pool, converted);          Value& result=*new(pool) VInt(pool, converted);
Line 69  static void _double(Request& r, const St Line 69  static void _double(Request& r, const St
                 if(!default_code) // we have a problem when no default                  if(!default_code) // we have a problem when no default
                         /*re*/throw;                            /*re*/throw;  
                 else                  else
                         converted=r.process(*default_code).as_double();                          converted=r.process_to_value(*default_code).as_double();
         }          }
   
         Value& result=*new(pool) VDouble(pool, converted);          Value& result=*new(pool) VDouble(pool, converted);
Line 82  static void _double(Request& r, const St Line 82  static void _double(Request& r, const St
   
         Value& fmt_maybe_code=params->get(0);          Value& fmt_maybe_code=params->get(0);
         // for some time due to stupid {} in original design          // for some time due to stupid {} in original design
         const String& fmt=          const String& fmt=r.process_to_string(fmt_maybe_code);
                 (fmt_maybe_code.get_junction()?r.process(fmt_maybe_code):fmt_maybe_code).as_string();  
   
         char *buf=format(pool, r.self->as_double(), fmt.cstr());          char *buf=format(pool, r.self->as_double(), fmt.cstr());
   
Line 215  static void replace_action(Table& table, Line 214  static void replace_action(Table& table,
                         Junction *junction=ai.replacement_code->get_junction();                          Junction *junction=ai.replacement_code->get_junction();
                         Value *saved_match_var_value=junction->root->get_element(*match_var_name);                          Value *saved_match_var_value=junction->root->get_element(*match_var_name);
                         junction->root->put_element(*match_var_name, &vtable);                          junction->root->put_element(*match_var_name, &vtable);
                         Value& replaced=ai.request->process(*ai.replacement_code, ai.origin, false);                          const String& replaced=ai.request->process_to_string(*ai.replacement_code, ai.origin);
                         junction->root->put_element(*match_var_name, saved_match_var_value);                          junction->root->put_element(*match_var_name, saved_match_var_value);
   
                         /*                          /*
Line 223  static void replace_action(Table& table, Line 222  static void replace_action(Table& table,
                                 *ai.dest << *(String *)row->get(1/*match* /);                                  *ai.dest << *(String *)row->get(1/*match* /);
                         ai.dest->APPEND_CONST(")");                          ai.dest->APPEND_CONST(")");
                         */                          */
                         *ai.dest << replaced.as_string();                          *ai.dest << replaced;
                 }                  }
                 ai.post_match=(String *)row->get(2/*post_match*/);                  ai.post_match=(String *)row->get(2/*post_match*/);
         } else // end          } else // end
Line 270  static void _match(Request& r, const Str Line 269  static void _match(Request& r, const Str
                 };                  };
                 src.match(                  src.match(
                         &method_name,                           &method_name, 
                         r.process(regexp).as_string(), options,                          r.process_to_string(regexp), options,
                         &table,                          &table,
                         replace_action, &replace_action_info);                          replace_action, &replace_action_info);
                 result=new(pool) VString(dest);                  result=new(pool) VString(dest);
Line 308  public: Line 307  public:
   
         void add_column(void *ptr, size_t size) {          void add_column(void *ptr, size_t size) {
                 if(got_column)                  if(got_column)
                         throw Exception(0, 0,                          throw Exception("parser.runtime",
                                 &statement_string,                                  &statement_string,
                                 "result must contain exactly one column");                                  "result must contain exactly one column");
                 got_column=true;                  got_column=true;
Line 317  public: Line 316  public:
         void add_row() { /* ignore */ }          void add_row() { /* ignore */ }
         void add_row_cell(void *ptr, size_t size) {          void add_row_cell(void *ptr, size_t size) {
                 if(got_cell)                  if(got_cell)
                         throw Exception(0, 0,                          throw Exception("parser.runtime",
                                 &statement_string,                                  &statement_string,
                                 "result must not contain more then one row");                                  "result must not contain more then one row");
                 got_cell=true;                  got_cell=true;
Line 348  const String* sql_result_string(Request& Line 347  const String* sql_result_string(Request&
                 if(voptions.is_defined())                  if(voptions.is_defined())
                         if(options=voptions.get_hash(&method_name)) {                          if(options=voptions.get_hash(&method_name)) {
                                 if(Value *vlimit=(Value *)options->get(*sql_limit_name))                                  if(Value *vlimit=(Value *)options->get(*sql_limit_name))
                                         limit=(ulong)r.process(*vlimit).as_double();                                          limit=(ulong)r.process_to_value(*vlimit).as_double();
                                 if(Value *voffset=(Value *)options->get(*sql_offset_name))                                  if(Value *voffset=(Value *)options->get(*sql_offset_name))
                                         offset=(ulong)r.process(*voffset).as_double();                                          offset=(ulong)r.process_to_value(*voffset).as_double();
                                 if(default_code=(Value *)options->get(*sql_default_name)) {                                  if(default_code=(Value *)options->get(*sql_default_name)) {
                                         if(!default_code->get_junction())                                          if(!default_code->get_junction())
                                                 throw Exception(0, 0,                                                  throw Exception("parser.runtime",
                                                         &method_name,                                                          &method_name,
                                                         "default option must be code");                                                          "default option must be code");
                                 }                                  }
                         } else                          } else
                                 throw Exception(0, 0,                                  throw Exception("parser.runtime",
                                         &method_name,                                          &method_name,
                                         "options must be hash");                                          "options must be hash");
         } else          } else
                 options=0;                  options=0;
   
         Temp_lang temp_lang(r, String::UL_SQL);          Temp_lang temp_lang(r, String::UL_SQL);
         const String& statement_string=r.process(statement).as_string();          const String& statement_string=r.process_to_string(statement);
         const char *statement_cstr=          const char *statement_cstr=
                 statement_string.cstr(String::UL_UNSPECIFIED, r.connection(&method_name));                  statement_string.cstr(String::UL_UNSPECIFIED, r.connection(&method_name));
         String_sql_event_handlers handlers(pool, statement_string, statement_cstr);          String_sql_event_handlers handlers(pool, statement_string, statement_cstr);
Line 375  const String* sql_result_string(Request& Line 374  const String* sql_result_string(Request&
                         handlers);                          handlers);
         } catch(const Exception& e) { // query problem          } catch(const Exception& e) { // query problem
                 // give more specific source [were url]                  // give more specific source [were url]
                 throw Exception(e.type(), e.code(),                  throw Exception("sql.execute",
                         &statement_string,                           &statement_string, 
                         "%s", e.comment());                          "%s", e.comment());
         }          }
Line 394  static void _sql(Request& r, const Strin Line 393  static void _sql(Request& r, const Strin
         const String *string=sql_result_string(r, method_name, params, options, default_code);          const String *string=sql_result_string(r, method_name, params, options, default_code);
         if(!string) {          if(!string) {
                 if(default_code) {                  if(default_code) {
                         string=r.process(*default_code).get_string();                          string=&r.process_to_string(*default_code);
                         if(!string)                          if(!string)
                                 string=new(pool) String(pool);                                  string=new(pool) String(pool);
                 } else                  } else
                         throw Exception(0, 0,                          throw Exception("parser.runtime",
                                 &method_name,                                  &method_name,
                                 "produced no result, but no default option specified");                                  "produced no result, but no default option specified");
         }          }
Line 413  static void _replace(Request& r, const S Line 412  static void _replace(Request& r, const S
   
         Table *table=params->as_no_junction(0, "parameter must not be code").get_table();          Table *table=params->as_no_junction(0, "parameter must not be code").get_table();
         if(!table)          if(!table)
                 throw Exception(0, 0,                  throw Exception("parser.runtime",
                         &method_name,                          &method_name,
                         "parameter must be table");                          "parameter must be table");
   
Line 433  static void _save(Request& r, const Stri Line 432  static void _save(Request& r, const Stri
                 if(mode=="append")                  if(mode=="append")
                         do_append=true;                          do_append=true;
                 else                  else
                         throw Exception(0, 0,                          throw Exception("parser.runtime",
                                 &mode,                                  &mode,
                                 "unknown mode, must be 'append'");                                  "unknown mode, must be 'append'");
         }                         }               

Removed from v.1.97  
changed lines
  Added in v.1.99


E-mail: