ONPHP_METHOD(Form, getInnerErrors) { zval *result, *primitives = ONPHP_READ_PROPERTY(getThis(), "primitives"), **prm; ONPHP_CALL_METHOD_0(getThis(), "geterrors", &result); ONPHP_MAKE_ARRAY(result); ONPHP_FOREACH(primitives, prm) { zend_class_entry **pfl, **pf; zval *value; ONPHP_CALL_METHOD_0_NORET(*prm, "getvalue", &value); if (EG(exception)) { ZVAL_FREE(primitives); return; } ONPHP_FIND_FOREIGN_CLASS("PrimitiveFormsList", pfl); ONPHP_FIND_FOREIGN_CLASS("PrimitiveForm", pf); if (ONPHP_CHECK_EMPTY(value)) { if ( instanceof_function(Z_OBJCE_PP(prm), *pfl TSRMLS_CC) || instanceof_function(Z_OBJCE_PP(prm), *pf TSRMLS_CC) ) { zval *name, *errors; ONPHP_CALL_METHOD_0_NORET(*prm, "getinnererrors", &errors); if (EG(exception)) { ZVAL_FREE(primitives); return; } ONPHP_CALL_METHOD_0(*prm, "getname", &name); if (zend_hash_num_elements(Z_ARRVAL_P(errors)) > 0) { ONPHP_ASSOC_SET(result, Z_STRVAL_P(name), errors); } else { ONPHP_ASSOC_UNSET(result, Z_STRVAL_P(name)); } } } }
ONPHP_METHOD(PlainForm, clean) { zval **prm, *primitives = ONPHP_READ_PROPERTY(getThis(), "primitives"); ONPHP_FOREACH(primitives, prm) { ONPHP_CALL_METHOD_0(*prm, "clean", NULL); }
ONPHP_METHOD(ExtractPart, toDialectString) { zval *dialect, *what, *from, *whatString, *fromString; smart_str string = {0}; ONPHP_GET_ARGS("O", &dialect, onphp_ce_Dialect); what = ONPHP_READ_PROPERTY(getThis(), "what"); from = ONPHP_READ_PROPERTY(getThis(), "from"); ONPHP_CALL_METHOD_0(what, "tostring", &whatString); ONPHP_CALL_METHOD_1_NORET(from, "todialectstring", &fromString, dialect); if (EG(exception)) { ZVAL_FREE(whatString); return; } smart_str_appendl(&string, "EXTRACT(", 8); onphp_append_zval_to_smart_string(&string, whatString); smart_str_appendl(&string, " FROM ", 6); onphp_append_zval_to_smart_string(&string, fromString); smart_str_appendc(&string, ')'); smart_str_0(&string); zval_ptr_dtor(&whatString); zval_ptr_dtor(&fromString); RETURN_STRINGL(string.c, string.len, 0); }
ONPHP_METHOD(Joiner, toDialectString) { zval *dialect, *from = ONPHP_READ_PROPERTY(getThis(), "from"), *table; zend_class_entry **cep; smart_str string = {0}; unsigned int i = 0, count = zend_hash_num_elements(Z_ARRVAL_P(from)); if (!count) { RETURN_NULL(); } else { smart_str_appendl(&string, " FROM ", 6); } ONPHP_GET_ARGS("O", &dialect, onphp_ce_Dialect); ONPHP_FIND_FOREIGN_CLASS("SelectQuery", cep); for (i = 0; i < count; ++i) { zval *out; ONPHP_ARRAY_GET(from, i, table); if (i == 0) { /* nop */ } else { if (ONPHP_INSTANCEOF(from, FromTable)) { zval *name; ONPHP_CALL_METHOD_0(table, "gettable", &name); if (instanceof_function(Z_OBJCE_P(table), *cep TSRMLS_CC)) { smart_str_appendl(&string, ", ", 2); } else { smart_str_appendc(&string, ' '); } zval_ptr_dtor(&name); } else { smart_str_appendc(&string, ' '); } } ONPHP_CALL_METHOD_1(table, "todialectstring", &out, dialect); onphp_append_zval_to_smart_string(&string, out); zval_ptr_dtor(&out); } smart_str_0(&string); RETURN_STRINGL(string.c, string.len, 0); }
ONPHP_METHOD(DBBinary, toDialectString) { zval *dialect, *value, *quoted; smart_str string = {0}; ONPHP_GET_ARGS("O", &dialect, onphp_ce_Dialect); ONPHP_CALL_METHOD_0(getThis(), "getvalue", &value); ONPHP_CALL_METHOD_1(dialect, "quotebinary", "ed, value); zval_ptr_dtor(&value); smart_str_appendc(&string, '\''); onphp_append_zval_to_smart_string(&string, quoted); zval_ptr_dtor("ed); smart_str_appendc(&string, '\''); smart_str_0(&string); RETURN_STRINGL(string.c, string.len, 0); }
ONPHP_METHOD(QueryIdentification, getId) { zval *out, *hashed; ONPHP_CALL_METHOD_0(getThis(), "tostring", &out); zend_call_method_with_1_params( NULL, NULL, NULL, "sha1", &hashed, out ); ZVAL_FREE(out); if (EG(exception)) { return; } RETURN_ZVAL(hashed, 1, 1); }
ONPHP_METHOD(PrimitiveNumber, import) { zval *scope, *result, *name, *value, *min, *max, *out; ONPHP_GET_ARGS("a", &scope); zend_call_method_with_1_params( &getThis(), onphp_ce_BasePrimitive, NULL, "import", &result, scope ); if (EG(exception)) { zval_ptr_dtor(&result); return; } if (!ONPHP_CHECK_EMPTY(result)) { zval_ptr_dtor(&result); RETURN_NULL(); } zval_ptr_dtor(&result); name = ONPHP_READ_PROPERTY(getThis(), "name"); ONPHP_ASSOC_GET(scope, Z_STRVAL_P(name), value); ONPHP_CALL_METHOD_1_NORET(getThis(), "checknumber", NULL, value); if (EG(exception)) { zend_clear_exception(TSRMLS_C); RETURN_FALSE; } ONPHP_CALL_METHOD_1(getThis(), "castnumber", &out, value); ONPHP_CALL_METHOD_0(getThis(), "selffilter", NULL); if ( (Z_TYPE_P(out) == IS_LONG) && (min = ONPHP_READ_PROPERTY(getThis(), "min")) && (max = ONPHP_READ_PROPERTY(getThis(), "max")) && !( (IS_NULL != Z_TYPE_P(min)) && (Z_LVAL_P(out) < Z_LVAL_P(min)) ) && !( (IS_NULL != Z_TYPE_P(max)) && (Z_LVAL_P(out) > Z_LVAL_P(max)) ) ) { ONPHP_UPDATE_PROPERTY_LONG(getThis(), "value", Z_LVAL_P(out)); RETVAL_TRUE; } else { RETVAL_FALSE; } zval_ptr_dtor(&out); }