Skip to content

Commit 9b9284a

Browse files
committed
Merge branch 'master' into build
2 parents 33e64ca + 5895e73 commit 9b9284a

File tree

6 files changed

+40018
-39953
lines changed

6 files changed

+40018
-39953
lines changed

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ preserved the last remaining fork of the BigSQL fork of pgadmin3-lts.
55
Although a limited amount of maintenance work has occurred, there is no
66
active project leadership or commitments to maintain pgadmin-lts
77
compatibility with future releases of PostgreSQL. The master branch is functional
8-
with PostgreSQL 15. YMMV.
8+
with PostgreSQL 16. YMMV.
99

1010
Also, this GitHub repo will not vanish.
1111

@@ -52,11 +52,11 @@ If you are too lazy to read [INSTALL](./INSTALL) instructions, then try this for
5252
```
5353
# apt-get install libwxgtk3.0-dev wx3.0-headers wxgtk3.0 wx3.0
5454
55-
# apt-get install libssh2-1 libssh2-1-dev libgcrypt20 libgcrypt20-dev libjson-perl libpq-dev #postgresql-15 postgresql-contrib-15 postgresql-client-15
55+
# apt-get install libssh2-1 libssh2-1-dev libgcrypt20 libgcrypt20-dev libjson-perl libpq-dev #postgresql-16 postgresql-contrib-16 postgresql-client-16
5656
# systemctl restart postgresql || true
5757
5858
$ bash bootstrap
59-
$ ./configure --prefix=/opt/pgadmin3bigsql --with-libgcrypt --with-wx-version=3.0 CFLAGS=-fPIC CXXFLAGS=-fPIC #--with-pgsql=/usr/lib/postgresql/15 --without-sphinx-build
59+
$ ./configure --prefix=/opt/pgadmin3bigsql --with-libgcrypt --with-wx-version=3.0 CFLAGS=-fPIC CXXFLAGS=-fPIC #--with-pgsql=/usr/lib/postgresql/16 --without-sphinx-build
6060
$ make -j8
6161
$ sudo make install
6262
```
@@ -65,10 +65,10 @@ for Centos/RedHat:
6565
------------------------
6666
```
6767
yum install wxGTK3 wxGTK3-devel
68-
yum install libssh2 libssh2-devel libxml2 libxml2-devel libxslt libxslt-devel openssl-devel #postgresql15 postgresql15-devel postgresql15-libs
68+
yum install libssh2 libssh2-devel libxml2 libxml2-devel libxslt libxslt-devel openssl-devel #postgresql16 postgresql16-devel postgresql16-libs
6969
7070
$ bash bootstrap
71-
$ ./configure --prefix=/opt/pgadmin3bigsql --with-wx-version=3.0 CFLAGS=-fPIC CXXFLAGS=-fPIC --with-pgsql=/usr/pgsql-15 --without-sphinx-build
71+
$ ./configure --prefix=/opt/pgadmin3bigsql --with-wx-version=3.0 CFLAGS=-fPIC CXXFLAGS=-fPIC --with-pgsql=/usr/pgsql-16 --without-sphinx-build
7272
$ make -j8
7373
$ sudo make install
7474
```

pgadmin/include/parser/kwlist.h

+33-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* by the PG_KEYWORD macro, which is not defined in this file; it can
88
* be defined by the caller for special purposes.
99
*
10-
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
10+
* Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
1111
* Portions Copyright (c) 1994, Regents of the University of California
1212
*
1313
* IDENTIFICATION
@@ -26,6 +26,7 @@
2626

2727
/* name, value, category, is-bare-label */
2828
PG_KEYWORD("abort", ABORT_P, UNRESERVED_KEYWORD, BARE_LABEL)
29+
PG_KEYWORD("absent", ABSENT, UNRESERVED_KEYWORD, BARE_LABEL)
2930
PG_KEYWORD("absolute", ABSOLUTE_P, UNRESERVED_KEYWORD, BARE_LABEL)
3031
PG_KEYWORD("access", ACCESS, UNRESERVED_KEYWORD, BARE_LABEL)
3132
PG_KEYWORD("action", ACTION, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -92,6 +93,7 @@ PG_KEYWORD("commit", COMMIT, UNRESERVED_KEYWORD, BARE_LABEL)
9293
PG_KEYWORD("committed", COMMITTED, UNRESERVED_KEYWORD, BARE_LABEL)
9394
PG_KEYWORD("compression", COMPRESSION, UNRESERVED_KEYWORD, BARE_LABEL)
9495
PG_KEYWORD("concurrently", CONCURRENTLY, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL)
96+
PG_KEYWORD("conditional", CONDITIONAL, UNRESERVED_KEYWORD, BARE_LABEL)
9597
PG_KEYWORD("configuration", CONFIGURATION, UNRESERVED_KEYWORD, BARE_LABEL)
9698
PG_KEYWORD("conflict", CONFLICT, UNRESERVED_KEYWORD, BARE_LABEL)
9799
PG_KEYWORD("connection", CONNECTION, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -146,11 +148,13 @@ PG_KEYWORD("double", DOUBLE_P, UNRESERVED_KEYWORD, BARE_LABEL)
146148
PG_KEYWORD("drop", DROP, UNRESERVED_KEYWORD, BARE_LABEL)
147149
PG_KEYWORD("each", EACH, UNRESERVED_KEYWORD, BARE_LABEL)
148150
PG_KEYWORD("else", ELSE, RESERVED_KEYWORD, BARE_LABEL)
151+
PG_KEYWORD("empty", EMPTY_P, UNRESERVED_KEYWORD, BARE_LABEL)
149152
PG_KEYWORD("enable", ENABLE_P, UNRESERVED_KEYWORD, BARE_LABEL)
150153
PG_KEYWORD("encoding", ENCODING, UNRESERVED_KEYWORD, BARE_LABEL)
151154
PG_KEYWORD("encrypted", ENCRYPTED, UNRESERVED_KEYWORD, BARE_LABEL)
152155
PG_KEYWORD("end", END_P, RESERVED_KEYWORD, BARE_LABEL)
153156
PG_KEYWORD("enum", ENUM_P, UNRESERVED_KEYWORD, BARE_LABEL)
157+
PG_KEYWORD("error", ERROR_P, UNRESERVED_KEYWORD, BARE_LABEL)
154158
PG_KEYWORD("escape", ESCAPE, UNRESERVED_KEYWORD, BARE_LABEL)
155159
PG_KEYWORD("event", EVENT, UNRESERVED_KEYWORD, BARE_LABEL)
156160
PG_KEYWORD("except", EXCEPT, RESERVED_KEYWORD, AS_LABEL)
@@ -175,6 +179,7 @@ PG_KEYWORD("following", FOLLOWING, UNRESERVED_KEYWORD, BARE_LABEL)
175179
PG_KEYWORD("for", FOR, RESERVED_KEYWORD, AS_LABEL)
176180
PG_KEYWORD("force", FORCE, UNRESERVED_KEYWORD, BARE_LABEL)
177181
PG_KEYWORD("foreign", FOREIGN, RESERVED_KEYWORD, BARE_LABEL)
182+
PG_KEYWORD("format", FORMAT, UNRESERVED_KEYWORD, BARE_LABEL)
178183
PG_KEYWORD("forward", FORWARD, UNRESERVED_KEYWORD, BARE_LABEL)
179184
PG_KEYWORD("freeze", FREEZE, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL)
180185
PG_KEYWORD("from", FROM, RESERVED_KEYWORD, AS_LABEL)
@@ -205,6 +210,7 @@ PG_KEYWORD("in", IN_P, RESERVED_KEYWORD, BARE_LABEL)
205210
PG_KEYWORD("include", INCLUDE, UNRESERVED_KEYWORD, BARE_LABEL)
206211
PG_KEYWORD("including", INCLUDING, UNRESERVED_KEYWORD, BARE_LABEL)
207212
PG_KEYWORD("increment", INCREMENT, UNRESERVED_KEYWORD, BARE_LABEL)
213+
PG_KEYWORD("indent", INDENT, UNRESERVED_KEYWORD, BARE_LABEL)
208214
PG_KEYWORD("index", INDEX, UNRESERVED_KEYWORD, BARE_LABEL)
209215
PG_KEYWORD("indexes", INDEXES, UNRESERVED_KEYWORD, BARE_LABEL)
210216
PG_KEYWORD("inherit", INHERIT, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -227,7 +233,20 @@ PG_KEYWORD("is", IS, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL)
227233
PG_KEYWORD("isnull", ISNULL, TYPE_FUNC_NAME_KEYWORD, AS_LABEL)
228234
PG_KEYWORD("isolation", ISOLATION, UNRESERVED_KEYWORD, BARE_LABEL)
229235
PG_KEYWORD("join", JOIN, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL)
236+
PG_KEYWORD("json", JSON, COL_NAME_KEYWORD, BARE_LABEL)
237+
PG_KEYWORD("json_array", JSON_ARRAY, COL_NAME_KEYWORD, BARE_LABEL)
238+
PG_KEYWORD("json_arrayagg", JSON_ARRAYAGG, COL_NAME_KEYWORD, BARE_LABEL)
239+
PG_KEYWORD("json_exists", JSON_EXISTS, COL_NAME_KEYWORD, BARE_LABEL)
240+
PG_KEYWORD("json_object", JSON_OBJECT, COL_NAME_KEYWORD, BARE_LABEL)
241+
PG_KEYWORD("json_objectagg", JSON_OBJECTAGG, COL_NAME_KEYWORD, BARE_LABEL)
242+
PG_KEYWORD("json_query", JSON_QUERY, COL_NAME_KEYWORD, BARE_LABEL)
243+
PG_KEYWORD("json_scalar", JSON_SCALAR, COL_NAME_KEYWORD, BARE_LABEL)
244+
PG_KEYWORD("json_serialize", JSON_SERIALIZE, COL_NAME_KEYWORD, BARE_LABEL)
245+
PG_KEYWORD("json_table", JSON_TABLE, COL_NAME_KEYWORD, BARE_LABEL)
246+
PG_KEYWORD("json_value", JSON_VALUE, COL_NAME_KEYWORD, BARE_LABEL)
247+
PG_KEYWORD("keep", KEEP, UNRESERVED_KEYWORD, BARE_LABEL)
230248
PG_KEYWORD("key", KEY, UNRESERVED_KEYWORD, BARE_LABEL)
249+
PG_KEYWORD("keys", KEYS, UNRESERVED_KEYWORD, BARE_LABEL)
231250
PG_KEYWORD("label", LABEL, UNRESERVED_KEYWORD, BARE_LABEL)
232251
PG_KEYWORD("language", LANGUAGE, UNRESERVED_KEYWORD, BARE_LABEL)
233252
PG_KEYWORD("large", LARGE_P, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -255,6 +274,7 @@ PG_KEYWORD("matched", MATCHED, UNRESERVED_KEYWORD, BARE_LABEL)
255274
PG_KEYWORD("materialized", MATERIALIZED, UNRESERVED_KEYWORD, BARE_LABEL)
256275
PG_KEYWORD("maxvalue", MAXVALUE, UNRESERVED_KEYWORD, BARE_LABEL)
257276
PG_KEYWORD("merge", MERGE, UNRESERVED_KEYWORD, BARE_LABEL)
277+
PG_KEYWORD("merge_action", MERGE_ACTION, COL_NAME_KEYWORD, BARE_LABEL)
258278
PG_KEYWORD("method", METHOD, UNRESERVED_KEYWORD, BARE_LABEL)
259279
PG_KEYWORD("minute", MINUTE_P, UNRESERVED_KEYWORD, AS_LABEL)
260280
PG_KEYWORD("minvalue", MINVALUE, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -266,6 +286,7 @@ PG_KEYWORD("names", NAMES, UNRESERVED_KEYWORD, BARE_LABEL)
266286
PG_KEYWORD("national", NATIONAL, COL_NAME_KEYWORD, BARE_LABEL)
267287
PG_KEYWORD("natural", NATURAL, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL)
268288
PG_KEYWORD("nchar", NCHAR, COL_NAME_KEYWORD, BARE_LABEL)
289+
PG_KEYWORD("nested", NESTED, UNRESERVED_KEYWORD, BARE_LABEL)
269290
PG_KEYWORD("new", NEW, UNRESERVED_KEYWORD, BARE_LABEL)
270291
PG_KEYWORD("next", NEXT, UNRESERVED_KEYWORD, BARE_LABEL)
271292
PG_KEYWORD("nfc", NFC, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -291,6 +312,7 @@ PG_KEYWORD("off", OFF, UNRESERVED_KEYWORD, BARE_LABEL)
291312
PG_KEYWORD("offset", OFFSET, RESERVED_KEYWORD, AS_LABEL)
292313
PG_KEYWORD("oids", OIDS, UNRESERVED_KEYWORD, BARE_LABEL)
293314
PG_KEYWORD("old", OLD, UNRESERVED_KEYWORD, BARE_LABEL)
315+
PG_KEYWORD("omit", OMIT, UNRESERVED_KEYWORD, BARE_LABEL)
294316
PG_KEYWORD("on", ON, RESERVED_KEYWORD, AS_LABEL)
295317
PG_KEYWORD("only", ONLY, RESERVED_KEYWORD, BARE_LABEL)
296318
PG_KEYWORD("operator", OPERATOR, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -313,9 +335,12 @@ PG_KEYWORD("parameter", PARAMETER, UNRESERVED_KEYWORD, BARE_LABEL)
313335
PG_KEYWORD("parser", PARSER, UNRESERVED_KEYWORD, BARE_LABEL)
314336
PG_KEYWORD("partial", PARTIAL, UNRESERVED_KEYWORD, BARE_LABEL)
315337
PG_KEYWORD("partition", PARTITION, UNRESERVED_KEYWORD, BARE_LABEL)
338+
PG_KEYWORD("partitions", PARTITIONS, UNRESERVED_KEYWORD, BARE_LABEL)
316339
PG_KEYWORD("passing", PASSING, UNRESERVED_KEYWORD, BARE_LABEL)
317340
PG_KEYWORD("password", PASSWORD, UNRESERVED_KEYWORD, BARE_LABEL)
341+
PG_KEYWORD("path", PATH, UNRESERVED_KEYWORD, BARE_LABEL)
318342
PG_KEYWORD("placing", PLACING, RESERVED_KEYWORD, BARE_LABEL)
343+
PG_KEYWORD("plan", PLAN, UNRESERVED_KEYWORD, BARE_LABEL)
319344
PG_KEYWORD("plans", PLANS, UNRESERVED_KEYWORD, BARE_LABEL)
320345
PG_KEYWORD("policy", POLICY, UNRESERVED_KEYWORD, BARE_LABEL)
321346
PG_KEYWORD("position", POSITION, COL_NAME_KEYWORD, BARE_LABEL)
@@ -333,6 +358,7 @@ PG_KEYWORD("procedures", PROCEDURES, UNRESERVED_KEYWORD, BARE_LABEL)
333358
PG_KEYWORD("program", PROGRAM, UNRESERVED_KEYWORD, BARE_LABEL)
334359
PG_KEYWORD("publication", PUBLICATION, UNRESERVED_KEYWORD, BARE_LABEL)
335360
PG_KEYWORD("quote", QUOTE, UNRESERVED_KEYWORD, BARE_LABEL)
361+
PG_KEYWORD("quotes", QUOTES, UNRESERVED_KEYWORD, BARE_LABEL)
336362
PG_KEYWORD("range", RANGE, UNRESERVED_KEYWORD, BARE_LABEL)
337363
PG_KEYWORD("read", READ, UNRESERVED_KEYWORD, BARE_LABEL)
338364
PG_KEYWORD("real", REAL, COL_NAME_KEYWORD, BARE_LABEL)
@@ -367,6 +393,7 @@ PG_KEYWORD("row", ROW, COL_NAME_KEYWORD, BARE_LABEL)
367393
PG_KEYWORD("rows", ROWS, UNRESERVED_KEYWORD, BARE_LABEL)
368394
PG_KEYWORD("rule", RULE, UNRESERVED_KEYWORD, BARE_LABEL)
369395
PG_KEYWORD("savepoint", SAVEPOINT, UNRESERVED_KEYWORD, BARE_LABEL)
396+
PG_KEYWORD("scalar", SCALAR, UNRESERVED_KEYWORD, BARE_LABEL)
370397
PG_KEYWORD("schema", SCHEMA, UNRESERVED_KEYWORD, BARE_LABEL)
371398
PG_KEYWORD("schemas", SCHEMAS, UNRESERVED_KEYWORD, BARE_LABEL)
372399
PG_KEYWORD("scroll", SCROLL, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -391,6 +418,8 @@ PG_KEYWORD("skip", SKIP, UNRESERVED_KEYWORD, BARE_LABEL)
391418
PG_KEYWORD("smallint", SMALLINT, COL_NAME_KEYWORD, BARE_LABEL)
392419
PG_KEYWORD("snapshot", SNAPSHOT, UNRESERVED_KEYWORD, BARE_LABEL)
393420
PG_KEYWORD("some", SOME, RESERVED_KEYWORD, BARE_LABEL)
421+
PG_KEYWORD("source", SOURCE, UNRESERVED_KEYWORD, BARE_LABEL)
422+
PG_KEYWORD("split", SPLIT, UNRESERVED_KEYWORD, BARE_LABEL)
394423
PG_KEYWORD("sql", SQL_P, UNRESERVED_KEYWORD, BARE_LABEL)
395424
PG_KEYWORD("stable", STABLE, UNRESERVED_KEYWORD, BARE_LABEL)
396425
PG_KEYWORD("standalone", STANDALONE_P, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -402,6 +431,7 @@ PG_KEYWORD("stdout", STDOUT, UNRESERVED_KEYWORD, BARE_LABEL)
402431
PG_KEYWORD("storage", STORAGE, UNRESERVED_KEYWORD, BARE_LABEL)
403432
PG_KEYWORD("stored", STORED, UNRESERVED_KEYWORD, BARE_LABEL)
404433
PG_KEYWORD("strict", STRICT_P, UNRESERVED_KEYWORD, BARE_LABEL)
434+
PG_KEYWORD("string", STRING_P, UNRESERVED_KEYWORD, BARE_LABEL)
405435
PG_KEYWORD("strip", STRIP_P, UNRESERVED_KEYWORD, BARE_LABEL)
406436
PG_KEYWORD("subscription", SUBSCRIPTION, UNRESERVED_KEYWORD, BARE_LABEL)
407437
PG_KEYWORD("substring", SUBSTRING, COL_NAME_KEYWORD, BARE_LABEL)
@@ -414,6 +444,7 @@ PG_KEYWORD("table", TABLE, RESERVED_KEYWORD, BARE_LABEL)
414444
PG_KEYWORD("tables", TABLES, UNRESERVED_KEYWORD, BARE_LABEL)
415445
PG_KEYWORD("tablesample", TABLESAMPLE, TYPE_FUNC_NAME_KEYWORD, BARE_LABEL)
416446
PG_KEYWORD("tablespace", TABLESPACE, UNRESERVED_KEYWORD, BARE_LABEL)
447+
PG_KEYWORD("target", TARGET, UNRESERVED_KEYWORD, BARE_LABEL)
417448
PG_KEYWORD("temp", TEMP, UNRESERVED_KEYWORD, BARE_LABEL)
418449
PG_KEYWORD("template", TEMPLATE, UNRESERVED_KEYWORD, BARE_LABEL)
419450
PG_KEYWORD("temporary", TEMPORARY, UNRESERVED_KEYWORD, BARE_LABEL)
@@ -437,6 +468,7 @@ PG_KEYWORD("types", TYPES_P, UNRESERVED_KEYWORD, BARE_LABEL)
437468
PG_KEYWORD("uescape", UESCAPE, UNRESERVED_KEYWORD, BARE_LABEL)
438469
PG_KEYWORD("unbounded", UNBOUNDED, UNRESERVED_KEYWORD, BARE_LABEL)
439470
PG_KEYWORD("uncommitted", UNCOMMITTED, UNRESERVED_KEYWORD, BARE_LABEL)
471+
PG_KEYWORD("unconditional", UNCONDITIONAL, UNRESERVED_KEYWORD, BARE_LABEL)
440472
PG_KEYWORD("unencrypted", UNENCRYPTED, UNRESERVED_KEYWORD, BARE_LABEL)
441473
PG_KEYWORD("union", UNION, RESERVED_KEYWORD, AS_LABEL)
442474
PG_KEYWORD("unique", UNIQUE, RESERVED_KEYWORD, BARE_LABEL)

pgadmin/include/pgAdmin3.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060
const short SERVER_MIN_VERSION_N = 0x0804;
6161
const wxString SERVER_MIN_VERSION_T = wxT("8.4");
6262
/*ABDUL:BEGIN*/
63-
const short SERVER_MAX_VERSION_N = 0x0FFF;
64-
const wxString SERVER_MAX_VERSION_T = wxT("15.255");
63+
const short SERVER_MAX_VERSION_N = 0x10FF;
64+
const wxString SERVER_MAX_VERSION_T = wxT("16.255");
6565
/*ABDUL:END*/
6666

6767
// Supported Greenplum Database and Greenplum HAWQ minimum and maximum values.

pgadmin/schema/pgFunction.cpp

+38-24
Original file line numberDiff line numberDiff line change
@@ -287,12 +287,12 @@ wxString pgFunction::GetSql(ctlTree *browser)
287287
wxString qtSig = GetQuotedFullIdentifier() + wxT("(") + GetArgSigList() + wxT(")");
288288

289289
sql = wxT("-- Function: ") + qtSig + wxT("\n\n")
290-
+ wxT("-- DROP FUNCTION ") + qtSig + wxT(";")
291-
+ wxT("\n\nCREATE OR REPLACE FUNCTION ") + qtName;
290+
+ wxT("-- DROP FUNCTION ") + qtSig + wxT(";\n\n");
292291

293292
// Use Oracle style syntax for edb-spl functions
294293
if (GetLanguage() == wxT("edbspl") && GetProcType() == 2)
295294
{
295+
sql += wxT("CREATE OR REPLACE FUNCTION ") + qtName;
296296
sql += wxT("\nRETURN ");
297297
sql += GetReturnType();
298298

@@ -304,34 +304,48 @@ wxString pgFunction::GetSql(ctlTree *browser)
304304
}
305305
else
306306
{
307-
sql += wxT("\n RETURNS ");
308-
sql += GetReturnType();
309-
310-
sql += wxT(" AS\n");
311-
312-
if (GetLanguage().IsSameAs(wxT("C"), false))
307+
if (GetLanguage() == wxT("sql"))
313308
{
314-
sql += qtDbString(GetBin()) + wxT(", ") + qtDbString(GetSource());
309+
pgSet* set = ExecuteSet(
310+
wxT("SELECT pg_get_functiondef(") + this->GetOidStr() + wxT(")")
311+
);
312+
if (set)
313+
{
314+
sql += set->GetVal(0);
315+
delete set;
316+
}
315317
}
316318
else
317319
{
318-
if (GetConnection()->BackendMinimumVersion(7, 5))
319-
sql += qtDbStringDollar(GetSource());
320+
sql += wxT("CREATE OR REPLACE FUNCTION ") + qtName;
321+
sql += wxT("\n RETURNS ");
322+
sql += GetReturnType();
323+
324+
sql += wxT(" AS\n");
325+
326+
if (GetLanguage().IsSameAs(wxT("C"), false))
327+
{
328+
sql += qtDbString(GetBin()) + wxT(", ") + qtDbString(GetSource());
329+
}
320330
else
321-
sql += qtDbString(GetSource());
331+
{
332+
if (GetConnection()->BackendMinimumVersion(7, 5))
333+
sql += qtDbStringDollar(GetSource());
334+
else
335+
sql += qtDbString(GetSource());
336+
}
337+
sql += wxT("\n LANGUAGE ") + GetLanguage() + wxT(" ");
338+
if (GetConnection()->BackendMinimumVersion(8, 4) && GetIsWindow())
339+
sql += wxT("WINDOW ");
340+
sql += GetVolatility();
341+
342+
if (GetConnection()->BackendMinimumVersion(9, 2) && GetIsLeakProof())
343+
sql += wxT(" LEAKPROOF");
344+
if (GetIsStrict())
345+
sql += wxT(" STRICT");
346+
if (GetSecureDefiner())
347+
sql += wxT(" SECURITY DEFINER");
322348
}
323-
sql += wxT("\n LANGUAGE ") + GetLanguage() + wxT(" ");
324-
if (GetConnection()->BackendMinimumVersion(8, 4) && GetIsWindow())
325-
sql += wxT("WINDOW ");
326-
sql += GetVolatility();
327-
328-
if (GetConnection()->BackendMinimumVersion(9, 2) && GetIsLeakProof())
329-
sql += wxT(" LEAKPROOF");
330-
if (GetIsStrict())
331-
sql += wxT(" STRICT");
332-
if (GetSecureDefiner())
333-
sql += wxT(" SECURITY DEFINER");
334-
335349
// PostgreSQL 8.3+ cost/row estimations
336350
if (GetConnection()->BackendMinimumVersion(8, 3))
337351
{

pgadmin/schema/pgTable.cpp

+19
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,25 @@ wxString pgTable::GetSql(ctlTree *browser)
753753

754754
sql += wxT(";\n")
755755
+ GetOwnerSql(7, 3);
756+
if (GetConnection()->BackendMinimumVersion(14, 0))
757+
{
758+
pgSet* set = ExecuteSet(
759+
wxT("SELECT sn.nspname||'.'|| s.stxname AS statistics_name,\n")
760+
wxT(" unnest(pg_get_statisticsobjdef_expressions(s.oid)) AS stat_expr\n")
761+
wxT("FROM pg_statistic_ext s\n")
762+
wxT("LEFT JOIN pg_namespace sn ON ((sn.oid = s.stxnamespace))\n")
763+
wxT("WHERE stxrelid=") + GetOidStr()
764+
);
765+
if (set)
766+
{
767+
while (!set->Eof())
768+
{
769+
sql += wxT("CREATE STATISTICS ") + set->GetVal(0) + " ON " + set->GetVal(1) + " FROM " + GetQuotedFullIdentifier() + wxT("\n");
770+
set->MoveNext();
771+
}
772+
delete set;
773+
}
774+
}
756775

757776
if (GetConnection()->BackendMinimumVersion(8, 4))
758777
sql += GetGrant(wxT("arwdDxt"));

0 commit comments

Comments
 (0)