|
|
| version 1.13, 2024/09/30 19:03:53 | version 1.17, 2024/10/04 05:12:05 |
|---|---|
| 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 485 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); |
| ArrayValue& array=self.array(); | |
| self.array().clear(); self.invalidate(); // just in case if called as method | array.clear(); self.invalidate(); // just in case if called as method |
| if(sparse){ | if(sparse){ |
| SparseArray_sql_event_handlers handlers(distinct, self.array(), value_type); | SparseArray_sql_event_handlers handlers(distinct, array, value_type); |
| r.connection()->query(statement_cstr, placeholders_count, placeholders, offset, limit, handlers, statement_string); | r.connection()->query(statement_cstr, placeholders_count, placeholders, offset, limit, handlers, statement_string); |
| } else { | } else { |
| Array_sql_event_handlers handlers(self.array(), value_type); | Array_sql_event_handlers handlers(array, value_type); |
| r.connection()->query(statement_cstr, placeholders_count, placeholders, offset, limit, handlers, statement_string); | r.connection()->query(statement_cstr, placeholders_count, placeholders, offset, limit, handlers, statement_string); |
| } | } |
| array.confirm_all_used(); | |
| if(bind) | if(bind) |
| unmarshal_bind_updates(*bind, placeholders_count, placeholders); | unmarshal_bind_updates(*bind, placeholders_count, placeholders); |
| } | } |
| static void mid(Request& r, size_t offset=0, size_t limit=ARRAY_OPTION_LIMIT_ALL) { | static void mid(Request& r, size_t offset=0, size_t limit=ARRAY_OPTION_LIMIT_ALL) { |
| ArrayValue& array=GET_SELF(r, VArray).array(); | ArrayValue& array=GET_SELF(r, VArray).array(); |
| if(limit>0){ | if(limit>0){ |
| Line 518 static void mid(Request& r, size_t offse | Line 527 static void mid(Request& r, size_t offse |
| result_array+=i.value(); | result_array+=i.value(); |
| } | } |
| } | } |
| result_array.confirm_all_used(); | |
| r.write(*result); | r.write(*result); |
| } else { | } else { |
| r.write(*new VArray); | r.write(*new VArray); |
| Line 850 static void _sort(Request& r, MethodPara | Line 860 static void _sort(Request& r, MethodPara |
| for(pos=0; pos<count; pos++) | for(pos=0; pos<count; pos++) |
| array+=seq[pos].array_data; | array+=seq[pos].array_data; |
| self.invalidate(); | |
| delete[] seq; | delete[] seq; |
| } | } |
| Line 859 enum AtResultType { | Line 870 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 1010 static void _select(Request& r, MethodPa | Line 1021 static void _select(Request& r, MethodPa |
| } | } |
| } | } |
| result_array.confirm_all_used(); | |
| r.write(*result); | r.write(*result); |
| } | } |
| Line 1092 MArray::MArray(): Methoded(VARRAY_TYPE) | Line 1104 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 |