@@ -43,17 +43,120 @@ PHP_METHOD(AnalyticsQuery, fromString)
43
43
pcbc_analytics_query_init (return_value , statement , statement_len TSRMLS_CC );
44
44
} /* }}} */
45
45
46
+ PHP_METHOD (AnalyticsQuery , rawParam )
47
+ {
48
+ zval * value ;
49
+ zval * options ;
50
+ char * name = NULL ;
51
+ pcbc_str_arg_size name_len = 0 ;
52
+ int rv ;
53
+
54
+ rv = zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sz" , & name , & name_len , & value );
55
+ if (rv == FAILURE ) {
56
+ RETURN_NULL ();
57
+ }
58
+
59
+ PCBC_READ_PROPERTY (options , pcbc_analytics_query_ce , getThis (), "options" , 0 );
60
+ PCBC_ADDREF_P (value );
61
+ add_assoc_zval_ex (options , name , name_len , value );
62
+
63
+ RETURN_ZVAL (getThis (), 1 , 0 );
64
+ }
65
+
66
+ PHP_METHOD (AnalyticsQuery , positionalParams )
67
+ {
68
+ zval * params ;
69
+ zval * options ;
70
+ int rv ;
71
+
72
+ rv = zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "a" , & params );
73
+ if (rv == FAILURE ) {
74
+ RETURN_NULL ();
75
+ }
76
+
77
+ PCBC_READ_PROPERTY (options , pcbc_analytics_query_ce , getThis (), "options" , 0 );
78
+ PCBC_ADDREF_P (params );
79
+ add_assoc_zval (options , "args" , params );
80
+
81
+ RETURN_ZVAL (getThis (), 1 , 0 );
82
+ }
83
+
84
+ PHP_METHOD (AnalyticsQuery , namedParams )
85
+ {
86
+ zval * params ;
87
+ zval * options ;
88
+ int rv ;
89
+
90
+ rv = zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "a" , & params );
91
+ if (rv == FAILURE ) {
92
+ RETURN_NULL ();
93
+ }
94
+
95
+ PCBC_READ_PROPERTY (options , pcbc_analytics_query_ce , getThis (), "options" , 0 );
96
+ {
97
+ #if PHP_VERSION_ID >= 70000
98
+ HashTable * ht ;
99
+ zend_ulong num_key ;
100
+ zend_string * string_key = NULL ;
101
+ zval * entry ;
102
+
103
+ ht = HASH_OF (params );
104
+ ZEND_HASH_FOREACH_KEY_VAL (ht , num_key , string_key , entry )
105
+ {
106
+ if (string_key ) {
107
+ char * prefixed_key = NULL ;
108
+ spprintf (& prefixed_key , 0 , "$%s" , ZSTR_VAL (string_key ));
109
+ add_assoc_zval (options , prefixed_key , entry );
110
+ PCBC_ADDREF_P (entry );
111
+ efree (prefixed_key );
112
+ }
113
+ }
114
+ ZEND_HASH_FOREACH_END ();
115
+ #else
116
+ HashPosition pos ;
117
+ zval * * entry ;
118
+
119
+ zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (params ), & pos );
120
+ while (zend_hash_get_current_data_ex (Z_ARRVAL_P (params ), (void * * )& entry , & pos ) == SUCCESS ) {
121
+ if (zend_hash_get_current_key_type_ex (Z_ARRVAL_P (params ), & pos ) == HASH_KEY_IS_STRING ) {
122
+ char * key = NULL , * prefixed_key = NULL ;
123
+ uint key_len = 0 ;
124
+ zend_hash_get_current_key_ex (Z_ARRVAL_P (params ), & key , & key_len , NULL , 0 , & pos );
125
+ spprintf (& prefixed_key , 0 , "$%s" , key );
126
+ add_assoc_zval (options , prefixed_key , * entry );
127
+ PCBC_ADDREF_P (* entry );
128
+ efree (prefixed_key );
129
+ }
130
+ zend_hash_move_forward_ex (Z_ARRVAL_P (params ), & pos );
131
+ }
132
+ #endif
133
+ }
134
+ RETURN_ZVAL (getThis (), 1 , 0 );
135
+ }
136
+
46
137
ZEND_BEGIN_ARG_INFO_EX (ai_AnalyticsQuery_none , 0 , 0 , 0 )
47
138
ZEND_END_ARG_INFO ()
48
139
49
140
ZEND_BEGIN_ARG_INFO_EX (ai_AnalyticsQuery_fromString , 0 , 0 , 1 )
50
141
ZEND_ARG_INFO (0 , statement )
51
142
ZEND_END_ARG_INFO ()
52
143
144
+ ZEND_BEGIN_ARG_INFO_EX (ai_AnalyticsQuery_params , 0 , 0 , 1 )
145
+ ZEND_ARG_INFO (0 , params )
146
+ ZEND_END_ARG_INFO ()
147
+
148
+ ZEND_BEGIN_ARG_INFO_EX (ai_AnalyticsQuery_rawParam , 0 , 0 , 2 )
149
+ ZEND_ARG_INFO (0 , name )
150
+ ZEND_ARG_INFO (0 , value )
151
+ ZEND_END_ARG_INFO ()
152
+
53
153
// clang-format off
54
154
zend_function_entry analytics_query_methods [] = {
55
155
PHP_ME (AnalyticsQuery , __construct , ai_AnalyticsQuery_none , ZEND_ACC_PRIVATE | ZEND_ACC_FINAL | ZEND_ACC_CTOR )
56
156
PHP_ME (AnalyticsQuery , fromString , ai_AnalyticsQuery_fromString , ZEND_ACC_STATIC | ZEND_ACC_PUBLIC )
157
+ PHP_ME (AnalyticsQuery , positionalParams , ai_AnalyticsQuery_params , ZEND_ACC_PUBLIC )
158
+ PHP_ME (AnalyticsQuery , namedParams , ai_AnalyticsQuery_params , ZEND_ACC_PUBLIC )
159
+ PHP_ME (AnalyticsQuery , rawParam , ai_AnalyticsQuery_rawParam , ZEND_ACC_PUBLIC )
57
160
PHP_FE_END
58
161
};
59
162
// clang-format on
0 commit comments