+zend_function_entry php_pqconv_methods[] = {
+ PHP_ABSTRACT_ME(pqconv, convertTypes, ai_pqconv_convert_types)
+ PHP_ABSTRACT_ME(pqconv, convertFromString, ai_pqconv_convert_from_string)
+ PHP_ABSTRACT_ME(pqconv, convertToString, ai_pqconv_convert_to_string)
+ {0}
+};
+
+
+PHP_MINIT_FUNCTION(pq_misc)
+{
+ zend_class_entry **json, ce = {0};
+
+ INIT_NS_CLASS_ENTRY(ce, "pq", "Converter", php_pqconv_methods);
+ php_pqconv_class_entry = zend_register_internal_interface(&ce TSRMLS_CC);
+
+ memset(&ce, 0, sizeof(ce));
+ INIT_NS_CLASS_ENTRY(ce ,"pq", "DateTime", php_pqdt_methods);
+ php_pqdt_class_entry = zend_register_internal_class_ex(&ce, php_date_get_date_ce(), "DateTime" TSRMLS_CC);
+
+ zend_declare_property_stringl(php_pqdt_class_entry, ZEND_STRL("format"), ZEND_STRL("Y-m-d H:i:s.uO"), ZEND_ACC_PUBLIC TSRMLS_CC);
+
+ /* stop reading this file right here! */
+ if (SUCCESS == zend_hash_find(CG(class_table), ZEND_STRS("jsonserializable"), (void *) &json)) {
+ zend_class_implements(php_pqdt_class_entry TSRMLS_CC, 1, *json);
+ }
+
+ return SUCCESS;
+}
+
+typedef struct _HashTableList {
+ HashTable ht;
+ struct _HashTableList *parent;
+} HashTableList;
+
+typedef struct _ArrayParserState {
+ const char *ptr, *end;
+ HashTableList *list;
+ php_pqres_t *res;
+#ifdef ZTS
+ void ***ts;
+#endif
+ Oid typ;
+ unsigned quotes:1;
+ unsigned escaped:1;
+} ArrayParserState;
+
+static char caa(ArrayParserState *a, const char *any, unsigned advance)
+{
+ const char *p = any;
+ TSRMLS_FETCH_FROM_CTX(a->ts);
+
+ do {
+ if (*p == *a->ptr) {
+ a->ptr += advance;
+ return *p;