Diff for /parser3/src/classes/array.C between versions 1.12 and 1.16

version 1.12, 2024/09/28 21:28:57 version 1.16, 2024/10/02 17:58:15
Line 46  static void _create_or_add(Request& r, M Line 46  static void _create_or_add(Request& r, M
   
                 if(VArray* src=dynamic_cast<VArray*>(&vsrc)) {                  if(VArray* src=dynamic_cast<VArray*>(&vsrc)) {
                         if(src==&self)                          if(src==&self)
                                 throw Exception(PARSER_RUNTIME, 0, "source and destination are the same array");                                  return;
                         self_array.append(src->array());                          if(self_array.count()){
                                   for(ArrayValue::Iterator i(src->array()); i; i.next()){
                                           if(i.value())
                                                   self_array.put(i.index(), i.value());
                                   }
                           } else {
                                   self_array.append(src->array());
                           }
                 } else {                  } else {
                         HashStringValue* src_hash=vsrc.get_hash();                          HashStringValue* src_hash=vsrc.as_hash("param must be array or");
                         if(!src_hash)                          if(!src_hash)
                                 return;                                  return;
                         for(HashStringValue::Iterator i(*src_hash); i; i.next()){                          for(HashStringValue::Iterator i(*src_hash); i; i.next()){
Line 119  static void _join(Request& r, MethodPara Line 126  static void _join(Request& r, MethodPara
                         }                          }
                 }                  }
         } else {          } else {
                 HashStringValue* src_hash=vsrc.get_hash();                  HashStringValue* src_hash=vsrc.as_hash("param must be array or");
                 if(!src_hash)                  if(!src_hash)
                         return;                          return;
                 if(o.defined){                  if(o.defined){
Line 445  static void _sql(Request& r, MethodParam Line 452  static void _sql(Request& r, MethodParam
         if(params.count()>1)          if(params.count()>1)
                 if(HashStringValue* options=params.as_hash(1, "sql options")) {                  if(HashStringValue* options=params.as_hash(1, "sql options")) {
                         int valid_options=0;                          int valid_options=0;
                           bool distinct_specified=false;
                         for(HashStringValue::Iterator i(*options); i; i.next() ){                          for(HashStringValue::Iterator i(*options); i; i.next() ){
                                 String::Body key=i.key();                                  String::Body key=i.key();
                                 Value* value=i.value();                                  Value* value=i.value();
Line 459  static void _sql(Request& r, MethodParam Line 467  static void _sql(Request& r, MethodParam
                                         valid_options++;                                          valid_options++;
                                 } else if (key == sql_distinct_name) {                                  } else if (key == sql_distinct_name) {
                                         distinct=r.process(*value).as_bool();                                          distinct=r.process(*value).as_bool();
                                           distinct_specified=true;
                                         valid_options++;                                          valid_options++;
                                 } else if (key == sql_value_type_name) {                                  } else if (key == sql_value_type_name) {
                                         value_type=get_value_type(r.process(*value));                                          value_type=get_value_type(r.process(*value));
Line 470  static void _sql(Request& r, MethodParam Line 479  static void _sql(Request& r, MethodParam
                         }                          }
                         if(valid_options!=options->count())                          if(valid_options!=options->count())
                                 throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION);                                  throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION);
                           if(distinct_specified && !sparse)
                                   throw Exception(PARSER_RUNTIME, 0, "'distinct' option can only be used when $.sparse(true) is specified");
                 }                  }
   
         SQL_Driver::Placeholder* placeholders=0;          SQL_Driver::Placeholder* placeholders=0;
Line 481  static void _sql(Request& r, MethodParam Line 492  static void _sql(Request& r, MethodParam
         const char* statement_cstr=statement_string.untaint_cstr(String::L_SQL, r.connection());          const char* statement_cstr=statement_string.untaint_cstr(String::L_SQL, r.connection());
   
         VArray& self=GET_SELF(r, VArray);          VArray& self=GET_SELF(r, VArray);
           
         self.array().clear(); self.invalidate(); // just in case if called as method          self.array().clear(); self.invalidate(); // just in case if called as method
   
         if(sparse){          if(sparse){
Line 855  enum AtResultType { Line 866  enum AtResultType {
         AtResultTypeHash = 2          AtResultTypeHash = 2
 };  };
   
 inline Value& SingleElementHash(String::Body akey, Value* avalue) {  static Value& SingleElementHash(String::Body akey, Value* avalue) {
         Value& result=*new VHash;          Value& result=*new VHash;
         result.put_element(*new String(akey, String::L_TAINTED), avalue);          result.put_element(*new String(akey, String::L_TAINTED), avalue);
         return result;          return result;
Line 1088  MArray::MArray(): Methoded(VARRAY_TYPE) Line 1099  MArray::MArray(): Methoded(VARRAY_TYPE)
 #ifdef FEATURE_GET_ELEMENT4CALL  #ifdef FEATURE_GET_ELEMENT4CALL
         // aliases without "_"          // aliases without "_"
         add_native_method("keys", Method::CT_DYNAMIC, _keys, 0, 1);          add_native_method("keys", Method::CT_DYNAMIC, _keys, 0, 1);
         add_native_method("count", Method::CT_DYNAMIC, _count, 0, 0);          add_native_method("count", Method::CT_DYNAMIC, _count, 0, 1);
         add_native_method("at", Method::CT_DYNAMIC, _at, 1, 2);          add_native_method("at", Method::CT_DYNAMIC, _at, 1, 2);
 #endif  #endif
   

Removed from v.1.12  
changed lines
  Added in v.1.16


E-mail: