Diff for /parser3/src/classes/string.C between versions 1.65 and 1.70

version 1.65, 2001/07/23 11:19:25 version 1.70, 2001/08/07 13:54:13
Line 124  static void _lsplit(Request& r, const St Line 124  static void _lsplit(Request& r, const St
   
         Table& table=*new(pool) Table(pool, &string,           Table& table=*new(pool) Table(pool, &string, 
                 &columns, pieces.size());                  &columns, pieces.size());
         int size=pieces.quick_size();          Array_iter i(pieces);
         for(int i=0; i<size; i++) {          while(i.has_next()) {
                 Array& row=*new(pool) Array(pool);                  Array& row=*new(pool) Array(pool);
                 row+=pieces.quick_get(i);                  row+=i.next();
                 table+=&row;                  table+=&row;
         }          }
         r.write_no_lang(*new(pool) VTable(pool, &table));          r.write_no_lang(*new(pool) VTable(pool, &table));
Line 183  static void replace_action(Table& table, Line 183  static void replace_action(Table& table,
                         vtable.set_name(*ai.origin);                          vtable.set_name(*ai.origin);
   
                         Junction *junction=ai.replacement_code->get_junction();                          Junction *junction=ai.replacement_code->get_junction();
                         junction->rcontext=/*must be some way to get to                           Value *saved_match_var_value=junction->root->get_element(*match_var_name);
                                                            outside world junction->root=*/&vtable;                          junction->root->put_element(*match_var_name, &vtable);
                         Value& replaced=ai.request->process(*ai.replacement_code, ai.origin, false);                          Value& replaced=ai.request->process(*ai.replacement_code, ai.origin, false);
                           junction->root->put_element(*match_var_name, saved_match_var_value);
   
                         /*                          /*
                         ai.dest->APPEND_CONST("(");                          ai.dest->APPEND_CONST("(");
Line 303  public: Line 304  public:
         String *result;          String *result;
 };  };
 #endif  #endif
 const String* sql_result_string(Request& r, const String& method_name, MethodParams *params) {  const String* sql_result_string(Request& r, const String& method_name, MethodParams *params,
                                                                   Hash *&options) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
   
         if(!r.connection)          if(!r.connection)
Line 313  const String* sql_result_string(Request& Line 315  const String* sql_result_string(Request&
   
         Value& statement=params->as_junction(0, "statement must be code");          Value& statement=params->as_junction(0, "statement must be code");
   
         ulong offset=(ulong)(params->size()>2?params->as_int(2, r):0);          ulong limit=0;
           ulong offset=0;
           if(params->size()>1) {
                   Value& options_param=params->as_no_junction(1, "options must be hash, not code");
                   if(options=options_param.get_hash()) {
                           if(Value *vlimit=(Value *)options->get(*sql_limit_name))
                                   limit=(ulong)r.process(*vlimit).as_double();
                           if(Value *voffset=(Value *)options->get(*sql_offset_name))
                                   offset=(ulong)r.process(*voffset).as_double();
                   } else
                           PTHROW(0, 0,
                                   &method_name,
                                   "options must be hash");
           } else
                   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(statement).as_string();
Line 323  const String* sql_result_string(Request& Line 339  const String* sql_result_string(Request&
         bool need_rethrow=false; Exception rethrow_me;          bool need_rethrow=false; Exception rethrow_me;
         PTRY {          PTRY {
                 r.connection->query(                  r.connection->query(
                         statement_cstr, offset, 0,                          statement_cstr, offset, limit, 
                         handlers);                          handlers);
         }          }
         PCATCH(e) { // query problem          PCATCH(e) { // query problem
Line 344  const String* sql_result_string(Request& Line 360  const String* sql_result_string(Request&
 static void _sql(Request& r, const String& method_name, MethodParams *params) {  static void _sql(Request& r, const String& method_name, MethodParams *params) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
   
         const String *string=sql_result_string(r, method_name, params);          Hash *options;
           const String *string=sql_result_string(r, method_name, params, options);
         if(!string) {          if(!string) {
                 Value& default_code=params->as_junction(1, "default result must code");                  if(options) {
                 Value& processed_code=r.process(default_code);                          if(Value *vdefault=(Value *)options->get(*sql_default_name)) {
                 string=processed_code.get_string();                                  if(!vdefault->get_junction())
                 if(!string)                                          PTHROW(0, 0,
                         string=empty_string;                                                  &method_name,
                                                   "default option must be code");
                                   string=r.process(*vdefault).get_string();
                                   if(!string)
                                           string=empty_string;
                           } else
                                   PTHROW(0, 0,
                                           &method_name,
                                           "produced no result, but no default option specified");
                   } else
                           PTHROW(0, 0,
                                   &method_name,
                                   "produced no result, but no options (no default) specified");
         }          }
         VString& result=*new(pool) VString(*string);          VString& result=*new(pool) VString(*string);
         result.set_name(method_name);          result.set_name(method_name);
Line 399  MString::MString(Pool& apool) : Methoded Line 428  MString::MString(Pool& apool) : Methoded
         // ^string.tolower[]          // ^string.tolower[]
         add_native_method("lower", Method::CT_DYNAMIC, _lower, 0, 0);          add_native_method("lower", Method::CT_DYNAMIC, _lower, 0, 0);
   
         // ^string:sql[query]{default}          // ^sql[query]
         // ^string:sql[query]{default}(offset)          // ^sql[query][$.limit(1) $.offset(2) $.default[n/a]]
         add_native_method("sql", Method::CT_STATIC, _sql, 2, 3);          add_native_method("sql", Method::CT_STATIC, _sql, 1, 2);
 }         }       
   
 // global variable  // global variable

Removed from v.1.65  
changed lines
  Added in v.1.70


E-mail: