|
|
| version 1.15, 2024/10/02 02:40:26 | version 1.19, 2024/10/20 13:20:57 |
|---|---|
| Line 492 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 525 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 552 static void _right(Request& r, MethodPar | Line 555 static void _right(Request& r, MethodPar |
| } | } |
| static void _mid(Request& r, MethodParams& params) { | static void _mid(Request& r, MethodParams& params) { |
| const String& string=GET_SELF(r, VString).string(); | |
| int begin=params.as_int(0, "p must be int", r); | int begin=params.as_int(0, "p must be int", r); |
| if(begin<0) | if(begin<0) |
| throw Exception(PARSER_RUNTIME, 0, "p(%d) must be >=0", begin); | throw Exception(PARSER_RUNTIME, 0, "p(%d) must be >=0", begin); |
| size_t end; | |
| size_t length=0; | |
| if(params.count()>1) { | if(params.count()>1) { |
| int n=params.as_int(1, "n must be int", r); | int n=params.as_int(1, "n must be int", r); |
| if(n<0) | if(n<0) |
| Line 857 static void _sort(Request& r, MethodPara | Line 856 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 866 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 1017 static void _select(Request& r, MethodPa | Line 1017 static void _select(Request& r, MethodPa |
| } | } |
| } | } |
| result_array.confirm_all_used(); | |
| r.write(*result); | r.write(*result); |
| } | } |
| static void _reverse(Request& r, MethodParams& params) { | static void _reverse(Request& r, MethodParams&) { |
| ArrayValue& source_array=GET_SELF(r, VArray).array(); | ArrayValue& source_array=GET_SELF(r, VArray).array(); |
| VArray& result=*new VArray(source_array.count()); | VArray& result=*new VArray(source_array.count()); |
| Line 1038 static void _reverse(Request& r, MethodP | Line 1039 static void _reverse(Request& r, MethodP |
| MArray::MArray(): Methoded(VARRAY_TYPE) { | MArray::MArray(): Methoded(VARRAY_TYPE) { |
| // ^array::create[[copy_from]] | // ^array::copy[[copy_from]] |
| add_native_method("create", Method::CT_DYNAMIC, _create_or_add, 0, 1); | add_native_method("copy", Method::CT_DYNAMIC, _create_or_add, 0, 1); |
| // ^array.add[add_from] | // ^array.add[add_from] |
| add_native_method("add", Method::CT_DYNAMIC, _create_or_add, 1, 1); | add_native_method("add", Method::CT_DYNAMIC, _create_or_add, 1, 1); |
| // ^array.join[join_from[;options]] | // ^array.join[join_from[;options]] |
| add_native_method("join", Method::CT_DYNAMIC, _join, 1, 2); | add_native_method("join", Method::CT_DYNAMIC, _join, 1, 2); |
| // ^array::create[value;value] | |
| add_native_method("create", Method::CT_DYNAMIC, _append, 0, 10000); | |
| // ^array.append[value;value] | |
| add_native_method("append", Method::CT_DYNAMIC, _append, 1, 10000); | |
| // ^array.insert[index;value...] | |
| add_native_method("insert", Method::CT_DYNAMIC, _insert, 2, 10000); | |
| // ^array.left(n) | // ^array.left(n) |
| add_native_method("left", Method::CT_DYNAMIC, _left, 1, 1); | add_native_method("left", Method::CT_DYNAMIC, _left, 1, 1); |
| // ^array.right(n) | // ^array.right(n) |
| Line 1053 MArray::MArray(): Methoded(VARRAY_TYPE) | Line 1061 MArray::MArray(): Methoded(VARRAY_TYPE) |
| // ^array.mid(p;n) | // ^array.mid(p;n) |
| add_native_method("mid", Method::CT_DYNAMIC, _mid, 1, 2); | add_native_method("mid", Method::CT_DYNAMIC, _mid, 1, 2); |
| // ^array::new[value;value] | |
| add_native_method("new", Method::CT_DYNAMIC, _append, 0, 10000); | |
| // ^array.append[value;value] | |
| add_native_method("append", Method::CT_DYNAMIC, _append, 1, 10000); | |
| // ^array.insert[index;value...] | |
| add_native_method("insert", Method::CT_DYNAMIC, _insert, 2, 10000); | |
| // ^array.delete[index] | // ^array.delete[index] |
| add_native_method("delete", Method::CT_DYNAMIC, _delete, 0, 1); | add_native_method("delete", Method::CT_DYNAMIC, _delete, 0, 1); |
| // ^array.remove[index] | // ^array.remove[index] |