Skip to content

Commit 83bb08c

Browse files
committed
Copy methods from being the magic implementations, to being declared on the PdoPgsql class.
1 parent 524c893 commit 83bb08c

File tree

6 files changed

+295
-67
lines changed

6 files changed

+295
-67
lines changed

ext/pdo_pgsql/pdo_pgsql.c

+6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@
2727
#include "php_pdo_pgsql_int.h"
2828
#include "pdo_pgsql_arginfo.h"
2929

30+
#define REGISTER_PDOPGSQL_CLASS_CONST_LONG(const_name, value) \
31+
zend_declare_class_constant_long(php_pdo_get_dbh_ce(), const_name, sizeof(const_name)-1, (zend_long)value);
32+
33+
#define REGISTER_PDOPGSQL_CLASS_CONST_STRING(const_name, value) \
34+
zend_declare_class_constant_stringl(php_pdo_get_dbh_ce(), const_name, sizeof(const_name)-1, value, sizeof(value)-1);
35+
3036
zend_class_entry *pdopgsql_ce;
3137
static pdo_driver_class_entry pdopgsql_pdo_driver_class_entry;
3238

ext/pdo_pgsql/pdo_pgsql.stub.php

+55-27
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,61 @@
66
class PDOPgSql extends PDO
77
{
88

9+
/**
10+
* @var int
11+
* @cname PDO_PGSQL_ATTR_DISABLE_PREPARES
12+
*/
13+
public const ATTR_DISABLE_PREPARES = UNKNOWN;
14+
15+
/**
16+
* @var int
17+
* @cname PGSQL_TRANSACTION_IDLE
18+
*/
19+
public const TRANSACTION_IDLE = UNKNOWN;
20+
21+
/**
22+
* @var int
23+
* @cname PGSQL_TRANSACTION_ACTIVE
24+
*/
25+
public const TRANSACTION_ACTIVE = UNKNOWN;
26+
27+
/**
28+
* @var int
29+
* @cname PGSQL_TRANSACTION_INTRANS
30+
*/
31+
public const TRANSACTION_INTRANS = UNKNOWN;
32+
33+
/**
34+
* @var int
35+
* @cname PGSQL_TRANSACTION_INERROR
36+
*/
37+
public const TRANSACTION_INERROR = UNKNOWN;
38+
39+
/**
40+
* @var int
41+
* @cname PGSQL_TRANSACTION_UNKNOWN
42+
*/
43+
public const TRANSACTION_UNKNOWN = UNKNOWN;
44+
945
public function escapeIdentifier(string $input): string {}
1046

11-
// This is a comment
12-
// /** @tentative-return-type */
13-
// public function pgsqlCopyFromArray(string $tableName, array $rows, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): bool {}
14-
//
15-
// /** @tentative-return-type */
16-
// public function pgsqlCopyFromFile(string $tableName, string $filename, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): bool {}
17-
//
18-
// /** @tentative-return-type */
19-
// public function pgsqlCopyToArray(string $tableName, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): array|false {}
20-
//
21-
// /** @tentative-return-type */
22-
// public function pgsqlCopyToFile(string $tableName, string $filename, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): bool {}
23-
//
24-
// /** @tentative-return-type */
25-
// public function pgsqlLOBCreate(): string|false {}
26-
//
27-
// /** @return resource|false */
28-
// public function pgsqlLOBOpen(string $oid, string $mode = "rb") {}
29-
//
30-
// /** @tentative-return-type */
31-
// public function pgsqlLOBUnlink(string $oid): bool {}
32-
//
33-
// /** @tentative-return-type */
34-
// public function pgsqlGetNotify(int $fetchMode = PDO::FETCH_USE_DEFAULT, int $timeoutMilliseconds = 0): array|false {}
35-
//
36-
// /** @tentative-return-type */
37-
// public function pgsqlGetPid(): int {}
47+
public function copyFromArray(string $tableName, array $rows, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): bool {}
48+
49+
public function copyFromFile(string $tableName, string $filename, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): bool {}
50+
51+
public function copyToArray(string $tableName, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): array|false {}
52+
53+
public function copyToFile(string $tableName, string $filename, string $separator = "\t", string $nullAs = "\\\\N", ?string $fields = null): bool {}
54+
55+
public function lobCreate(): string|false {}
56+
57+
// Opens an existing large object stream. Must be called inside a transaction.
58+
/** @return resource|false */
59+
public function lobOpen(string $oid, string $mode = "rb"){}
60+
61+
public function lobUnlink(string $oid): bool {}
62+
63+
public function getNotify(int $fetchMode = PDO::FETCH_USE_DEFAULT, int $timeoutMilliseconds = 0): array|false {}
64+
65+
public function getPid(): int {}
3866
}

ext/pdo_pgsql/pdo_pgsql_arginfo.h

+100-1
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,79 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 7aa8f420e9fb24633be2f72a061b32f4d9207620 */
2+
* Stub hash: 72f5729365dc3f7ae888e96b612ef9b236da2135 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PDOPgSql_escapeIdentifier, 0, 1, IS_STRING, 0)
55
ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0)
66
ZEND_END_ARG_INFO()
77

8+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PDOPgSql_copyFromArray, 0, 2, _IS_BOOL, 0)
9+
ZEND_ARG_TYPE_INFO(0, tableName, IS_STRING, 0)
10+
ZEND_ARG_TYPE_INFO(0, rows, IS_ARRAY, 0)
11+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"")
12+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nullAs, IS_STRING, 0, "\"\\\\\\\\N\"")
13+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null")
14+
ZEND_END_ARG_INFO()
15+
16+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PDOPgSql_copyFromFile, 0, 2, _IS_BOOL, 0)
17+
ZEND_ARG_TYPE_INFO(0, tableName, IS_STRING, 0)
18+
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
19+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"")
20+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nullAs, IS_STRING, 0, "\"\\\\\\\\N\"")
21+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null")
22+
ZEND_END_ARG_INFO()
23+
24+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_PDOPgSql_copyToArray, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
25+
ZEND_ARG_TYPE_INFO(0, tableName, IS_STRING, 0)
26+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\"\\t\"")
27+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, nullAs, IS_STRING, 0, "\"\\\\\\\\N\"")
28+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fields, IS_STRING, 1, "null")
29+
ZEND_END_ARG_INFO()
30+
31+
#define arginfo_class_PDOPgSql_copyToFile arginfo_class_PDOPgSql_copyFromFile
32+
33+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_PDOPgSql_lobCreate, 0, 0, MAY_BE_STRING|MAY_BE_FALSE)
34+
ZEND_END_ARG_INFO()
35+
36+
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_PDOPgSql_lobOpen, 0, 0, 1)
37+
ZEND_ARG_TYPE_INFO(0, oid, IS_STRING, 0)
38+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"rb\"")
39+
ZEND_END_ARG_INFO()
40+
41+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PDOPgSql_lobUnlink, 0, 1, _IS_BOOL, 0)
42+
ZEND_ARG_TYPE_INFO(0, oid, IS_STRING, 0)
43+
ZEND_END_ARG_INFO()
44+
45+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_class_PDOPgSql_getNotify, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
46+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, fetchMode, IS_LONG, 0, "PDO::FETCH_USE_DEFAULT")
47+
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeoutMilliseconds, IS_LONG, 0, "0")
48+
ZEND_END_ARG_INFO()
49+
50+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_PDOPgSql_getPid, 0, 0, IS_LONG, 0)
51+
ZEND_END_ARG_INFO()
52+
853

954
ZEND_METHOD(PDOPgSql, escapeIdentifier);
55+
ZEND_METHOD(PDOPgSql, copyFromArray);
56+
ZEND_METHOD(PDOPgSql, copyFromFile);
57+
ZEND_METHOD(PDOPgSql, copyToArray);
58+
ZEND_METHOD(PDOPgSql, copyToFile);
59+
ZEND_METHOD(PDOPgSql, lobCreate);
60+
ZEND_METHOD(PDOPgSql, lobOpen);
61+
ZEND_METHOD(PDOPgSql, lobUnlink);
62+
ZEND_METHOD(PDOPgSql, getNotify);
63+
ZEND_METHOD(PDOPgSql, getPid);
1064

1165

1266
static const zend_function_entry class_PDOPgSql_methods[] = {
1367
ZEND_ME(PDOPgSql, escapeIdentifier, arginfo_class_PDOPgSql_escapeIdentifier, ZEND_ACC_PUBLIC)
68+
ZEND_ME(PDOPgSql, copyFromArray, arginfo_class_PDOPgSql_copyFromArray, ZEND_ACC_PUBLIC)
69+
ZEND_ME(PDOPgSql, copyFromFile, arginfo_class_PDOPgSql_copyFromFile, ZEND_ACC_PUBLIC)
70+
ZEND_ME(PDOPgSql, copyToArray, arginfo_class_PDOPgSql_copyToArray, ZEND_ACC_PUBLIC)
71+
ZEND_ME(PDOPgSql, copyToFile, arginfo_class_PDOPgSql_copyToFile, ZEND_ACC_PUBLIC)
72+
ZEND_ME(PDOPgSql, lobCreate, arginfo_class_PDOPgSql_lobCreate, ZEND_ACC_PUBLIC)
73+
ZEND_ME(PDOPgSql, lobOpen, arginfo_class_PDOPgSql_lobOpen, ZEND_ACC_PUBLIC)
74+
ZEND_ME(PDOPgSql, lobUnlink, arginfo_class_PDOPgSql_lobUnlink, ZEND_ACC_PUBLIC)
75+
ZEND_ME(PDOPgSql, getNotify, arginfo_class_PDOPgSql_getNotify, ZEND_ACC_PUBLIC)
76+
ZEND_ME(PDOPgSql, getPid, arginfo_class_PDOPgSql_getPid, ZEND_ACC_PUBLIC)
1477
ZEND_FE_END
1578
};
1679

@@ -22,5 +85,41 @@ static zend_class_entry *register_class_PDOPgSql(zend_class_entry *class_entry_P
2285
class_entry = zend_register_internal_class_ex(&ce, class_entry_PDO);
2386
class_entry->ce_flags |= ZEND_ACC_NOT_SERIALIZABLE;
2487

88+
zval const_ATTR_DISABLE_PREPARES_value;
89+
ZVAL_LONG(&const_ATTR_DISABLE_PREPARES_value, PDO_PGSQL_ATTR_DISABLE_PREPARES);
90+
zend_string *const_ATTR_DISABLE_PREPARES_name = zend_string_init_interned("ATTR_DISABLE_PREPARES", sizeof("ATTR_DISABLE_PREPARES") - 1, 1);
91+
zend_declare_class_constant_ex(class_entry, const_ATTR_DISABLE_PREPARES_name, &const_ATTR_DISABLE_PREPARES_value, ZEND_ACC_PUBLIC, NULL);
92+
zend_string_release(const_ATTR_DISABLE_PREPARES_name);
93+
94+
zval const_TRANSACTION_IDLE_value;
95+
ZVAL_LONG(&const_TRANSACTION_IDLE_value, PGSQL_TRANSACTION_IDLE);
96+
zend_string *const_TRANSACTION_IDLE_name = zend_string_init_interned("TRANSACTION_IDLE", sizeof("TRANSACTION_IDLE") - 1, 1);
97+
zend_declare_class_constant_ex(class_entry, const_TRANSACTION_IDLE_name, &const_TRANSACTION_IDLE_value, ZEND_ACC_PUBLIC, NULL);
98+
zend_string_release(const_TRANSACTION_IDLE_name);
99+
100+
zval const_TRANSACTION_ACTIVE_value;
101+
ZVAL_LONG(&const_TRANSACTION_ACTIVE_value, PGSQL_TRANSACTION_ACTIVE);
102+
zend_string *const_TRANSACTION_ACTIVE_name = zend_string_init_interned("TRANSACTION_ACTIVE", sizeof("TRANSACTION_ACTIVE") - 1, 1);
103+
zend_declare_class_constant_ex(class_entry, const_TRANSACTION_ACTIVE_name, &const_TRANSACTION_ACTIVE_value, ZEND_ACC_PUBLIC, NULL);
104+
zend_string_release(const_TRANSACTION_ACTIVE_name);
105+
106+
zval const_TRANSACTION_INTRANS_value;
107+
ZVAL_LONG(&const_TRANSACTION_INTRANS_value, PGSQL_TRANSACTION_INTRANS);
108+
zend_string *const_TRANSACTION_INTRANS_name = zend_string_init_interned("TRANSACTION_INTRANS", sizeof("TRANSACTION_INTRANS") - 1, 1);
109+
zend_declare_class_constant_ex(class_entry, const_TRANSACTION_INTRANS_name, &const_TRANSACTION_INTRANS_value, ZEND_ACC_PUBLIC, NULL);
110+
zend_string_release(const_TRANSACTION_INTRANS_name);
111+
112+
zval const_TRANSACTION_INERROR_value;
113+
ZVAL_LONG(&const_TRANSACTION_INERROR_value, PGSQL_TRANSACTION_INERROR);
114+
zend_string *const_TRANSACTION_INERROR_name = zend_string_init_interned("TRANSACTION_INERROR", sizeof("TRANSACTION_INERROR") - 1, 1);
115+
zend_declare_class_constant_ex(class_entry, const_TRANSACTION_INERROR_name, &const_TRANSACTION_INERROR_value, ZEND_ACC_PUBLIC, NULL);
116+
zend_string_release(const_TRANSACTION_INERROR_name);
117+
118+
zval const_TRANSACTION_UNKNOWN_value;
119+
ZVAL_LONG(&const_TRANSACTION_UNKNOWN_value, PGSQL_TRANSACTION_UNKNOWN);
120+
zend_string *const_TRANSACTION_UNKNOWN_name = zend_string_init_interned("TRANSACTION_UNKNOWN", sizeof("TRANSACTION_UNKNOWN") - 1, 1);
121+
zend_declare_class_constant_ex(class_entry, const_TRANSACTION_UNKNOWN_name, &const_TRANSACTION_UNKNOWN_value, ZEND_ACC_PUBLIC, NULL);
122+
zend_string_release(const_TRANSACTION_UNKNOWN_name);
123+
25124
return class_entry;
26125
}

ext/pdo_pgsql/pdo_pgsql_class.c

+60-19
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,6 @@
3030
#include "php_pdo_pgsql.h"
3131
#include "php_pdo_pgsql_int.h"
3232

33-
///* {{{ proto string PDO::mysqlGetWarningCount()
34-
// Returns the number of SQL warnings during the execution of the last statement
35-
//*/
36-
//PHP_METHOD(PDOMySql, getWarningCount)
37-
//{
38-
// pdo_dbh_t *dbh;
39-
// pdo_mysql_db_handle *H;
40-
//
41-
// dbh = Z_PDO_DBH_P(ZEND_THIS);
42-
// PDO_CONSTRUCT_CHECK;
43-
//
44-
// H = (pdo_mysql_db_handle *)dbh->driver_data;
45-
// RETURN_LONG(mysql_warning_count(H->server));
46-
//}
47-
///* }}} */
48-
49-
50-
51-
//
5233
//static void php_pgsql_escape_internal(INTERNAL_FUNCTION_PARAMETERS, int escape_literal) /* {{{ */ {
5334
// zend_string *from = NULL;
5435
// zval *pgsql_link = NULL;
@@ -131,7 +112,67 @@ PHP_METHOD(PDOPgSql, escapeIdentifier)
131112
/* }}} */
132113

133114

115+
/* {{{ Returns true if the copy worked fine or false if error */
116+
PHP_METHOD(PDOPgSql, copyFromArray)
117+
{
118+
pgsqlCopyFromArray_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
119+
}
120+
/* }}} */
121+
122+
123+
/* {{{ Returns true if the copy worked fine or false if error */
124+
PHP_METHOD(PDOPgSql, copyFromFile)
125+
{
126+
pgsqlCopyFromFile_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
127+
}
128+
/* }}} */
129+
130+
/* {{{ Returns true if the copy worked fine or false if error */
131+
PHP_METHOD(PDOPgSql, copyToFile)
132+
{
133+
pgsqlCopyToFile_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
134+
135+
}
136+
/* }}} */
137+
138+
/* {{{ Returns true if the copy worked fine or false if error */
139+
PHP_METHOD(PDOPgSql, copyToArray)
140+
{
141+
pgsqlCopyToArray_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
142+
}
143+
/* }}} */
144+
145+
/* {{{ Creates a new large object, returning its identifier. Must be called inside a transaction. */
146+
PHP_METHOD(PDOPgSql, lobCreate)
147+
{
148+
pgsqlLOBCreate_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
149+
}
150+
/* }}} */
134151

152+
/* {{{ Opens an existing large object stream. Must be called inside a transaction. */
153+
PHP_METHOD(PDOPgSql, lobOpen)
154+
{
155+
pgsqlLOBOpen_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
156+
}
157+
/* }}} */
135158

159+
/* {{{ Deletes the large object identified by oid. Must be called inside a transaction. */
160+
PHP_METHOD(PDOPgSql, lobUnlink)
161+
{
162+
pgsqlLOBUnlink_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
163+
}
164+
/* }}} */
136165

166+
/* {{{ Get asynchronous notification */
167+
PHP_METHOD(PDOPgSql, getNotify)
168+
{
169+
pgsqlGetNotify_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
170+
}
171+
/* }}} */
137172

173+
/* {{{ Get backend(server) pid */
174+
PHP_METHOD(PDOPgSql, getPid)
175+
{
176+
pgsqlGetPid_internal(INTERNAL_FUNCTION_PARAM_PASSTHRU);
177+
}
178+
/* }}} */

0 commit comments

Comments
 (0)