示例#1
0
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);
}
示例#2
0
ONPHP_METHOD(DBField, setTable)
{
	zval *table;
	
	if (Z_TYPE_P(ONPHP_READ_PROPERTY(getThis(), "table")) != IS_NULL) {
		ONPHP_THROW(
			WrongStateException,
			"you should not override setted table"
		);
	}
	
	ONPHP_GET_ARGS("z", &table);
	
	if (!ONPHP_INSTANCEOF(table, DialectString)) {
		zval *from_table;
		
		ONPHP_MAKE_FOREIGN_OBJECT("FromTable", from_table);
		
		ONPHP_CALL_METHOD_1_NORET(from_table, "__construct", NULL, table);
		
		if (EG(exception)) {
			ZVAL_FREE(from_table);
			return;
		}
		
		ONPHP_UPDATE_PROPERTY(getThis(), "table", from_table);
		
		zval_ptr_dtor(&from_table);
	} else {
		ONPHP_UPDATE_PROPERTY(getThis(), "table", table);
	}
	
	RETURN_THIS;
}
ONPHP_METHOD(QueryIdentification, toString)
{
	zval *out, *imdi;
	
	ONPHP_CALL_STATIC_0(ImaginaryDialect, "me", &imdi);
	
	ONPHP_CALL_METHOD_1_NORET(getThis(), "todialectstring", &out, imdi);
	
	zval_ptr_dtor(&imdi);
	
	if (EG(exception)) {
		return;
	}
	
	RETURN_ZVAL(out, 1, 1);
}
示例#4
0
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);
}
示例#5
0
ONPHP_METHOD(ExtractPart, __construct)
{
	zval *what, *from, *fromField;
	zend_class_entry **cep;
	
	ONPHP_GET_ARGS("zz", &what, &from);
	
	if (ONPHP_INSTANCEOF(from, DialectString)) {
		if (
			!(
				ONPHP_INSTANCEOF(from, DBValue)
				|| ONPHP_INSTANCEOF(from, DBField)
			)
		) {
			ONPHP_THROW(WrongArgumentException, NULL);
		}
	}
	
	ONPHP_MAKE_OBJECT(DBField, fromField);
	
	ONPHP_CALL_METHOD_1_NORET(fromField, "__construct", NULL, from);
	
	if (EG(exception)) {
		ZVAL_FREE(fromField);
		return;
	}
	
	ONPHP_UPDATE_PROPERTY(getThis(), "from", fromField);
	
	zval_ptr_dtor(&fromField);
	
	ONPHP_FIND_FOREIGN_CLASS("DatePart", cep);
	
	if (
		!(
			(Z_TYPE_P(what) == IS_OBJECT)
			&& instanceof_function(Z_OBJCE_P(what), *cep TSRMLS_CC)
		)
	) {
		zval *whatPart;
		
		ALLOC_INIT_ZVAL(whatPart);
		object_init_ex(whatPart, *cep);
		Z_TYPE_P(whatPart) = IS_OBJECT;
		
		ONPHP_CALL_METHOD_1_NORET(whatPart, "__construct", NULL, what);
		
		if (EG(exception)) {
			ZVAL_FREE(whatPart);
			return;
		}
		
		ONPHP_UPDATE_PROPERTY(getThis(), "what", whatPart);
		
		zval_ptr_dtor(&whatPart);
	} else {
		ONPHP_UPDATE_PROPERTY(getThis(), "what", what);
		
		zval_ptr_dtor(&what);
	}
}