public inbox for [email protected]help / color / mirror / Atom feed
patch: fix to use ``pg_get_functiondef()`` 6+ messages / 2 participants [nested] [flat]
* patch: fix to use ``pg_get_functiondef()`` @ 2015-12-08 08:50 Andrej Antonov <[email protected]> 0 siblings, 2 replies; 6+ messages in thread From: Andrej Antonov @ 2015-12-08 08:50 UTC (permalink / raw) To: pgadmin-hackers patch: fix to use ``pg_get_functiondef()`` [see attachment file] it is copy of pull-request https://github.com/postgres/pgadmin3/pull/12 thank you! -- Андрей Антонов, инженер-программист отдела информационных технологий и программирования, компания «Импульс М» -- Sent via pgadmin-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers Attachments: [text/x-diff] 0001-using-pg_get_functiondef.patch (4.9K, 2-0001-using-pg_get_functiondef.patch) download | inline diff: From c8330fefa05278b73f8a4f79645f4c4e92f34375 Mon Sep 17 00:00:00 2001 From: "Andrej Antonov (impulsm.work)" <[email protected]> Date: Mon, 7 Dec 2015 18:26:52 +0300 Subject: [PATCH] using ``pg_get_functiondef(..)`` --- pgadmin/include/schema/pgFunction.h | 10 +++++++++- pgadmin/schema/pgFunction.cpp | 31 ++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/pgadmin/include/schema/pgFunction.h b/pgadmin/include/schema/pgFunction.h index 7cd6ffd..bc39865 100644 --- a/pgadmin/include/schema/pgFunction.h +++ b/pgadmin/include/schema/pgFunction.h @@ -118,6 +118,14 @@ public: { source = s; } + wxString GetFunctionDefByPg() const + { + return functionDefByPg; + } + void iSetFunctionDefByPg(const wxString &s) + { + functionDefByPg = s; + } wxString GetBin() const { return bin; @@ -251,7 +259,7 @@ protected: pgFunction(pgSchema *newSchema, int newType, const wxString &newName = wxT("")); private: - wxString returnType, language, volatility, source, bin; + wxString returnType, language, volatility, source, functionDefByPg, bin; wxArrayString argNamesArray, argTypesArray, argModesArray, argDefsArray; bool returnAsSet, secureDefiner, isStrict, isWindow, isLeakProof; long argCount, cost, rows, argDefValCount, procType; diff --git a/pgadmin/schema/pgFunction.cpp b/pgadmin/schema/pgFunction.cpp index bd0342a..5440a09 100644 --- a/pgadmin/schema/pgFunction.cpp +++ b/pgadmin/schema/pgFunction.cpp @@ -287,12 +287,18 @@ wxString pgFunction::GetSql(ctlTree *browser) wxString qtSig = GetQuotedFullIdentifier() + wxT("(") + GetArgSigList() + wxT(")"); sql = wxT("-- Function: ") + qtSig + wxT("\n\n") - + wxT("-- DROP FUNCTION ") + qtSig + wxT(";") - + wxT("\n\nCREATE OR REPLACE FUNCTION ") + qtName; - - // Use Oracle style syntax for edb-spl functions - if (GetLanguage() == wxT("edbspl") && GetProcType() == 2) + + wxT("-- DROP FUNCTION ") + qtSig + wxT(";\n\n"); + + if (!!GetFunctionDefByPg()) + { + sql += GetFunctionDefByPg().Trim(); + } + else if (GetLanguage() == wxT("edbspl") && GetProcType() == 2) { + sql += wxT("CREATE OR REPLACE FUNCTION ") + qtName; + + // Use Oracle style syntax for edb-spl functions + sql += wxT("\nRETURN "); sql += GetReturnType(); @@ -304,6 +310,8 @@ wxString pgFunction::GetSql(ctlTree *browser) } else { + sql += wxT("CREATE OR REPLACE FUNCTION ") + qtName; + sql += wxT("\n RETURNS "); if (GetReturnAsSet() && !GetReturnType().StartsWith(wxT("TABLE"))) sql += wxT("SETOF "); @@ -643,7 +651,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, cacheMap typeCache, exprCache; pgFunction *function = 0; - wxString argNamesCol, argDefsCol, proConfigCol, proType, seclab; + wxString argNamesCol, argDefsCol, proConfigCol, proType, functionDefByPgSelect, seclab; if (obj->GetConnection()->BackendMinimumVersion(8, 0)) argNamesCol = wxT("proargnames, "); if (obj->GetConnection()->HasFeature(FEATURE_FUNCTION_DEFAULTS) && !obj->GetConnection()->BackendMinimumVersion(8, 4)) @@ -654,6 +662,11 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, proConfigCol = wxT("proconfig, "); if (obj->GetConnection()->EdbMinimumVersion(8, 1)) proType = wxT("protype, "); + if (obj->GetConnection()->BackendMinimumVersion(8, 4)) + { + functionDefByPgSelect = wxT(",\n") + wxT("pg_get_functiondef(pr.oid) AS function_def_by_pg"); + } if (obj->GetConnection()->BackendMinimumVersion(9, 1)) { seclab = wxT(",\n") @@ -664,7 +677,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, pgSet *functions = obj->GetDatabase()->ExecuteSet( wxT("SELECT pr.oid, pr.xmin, pr.*, format_type(TYP.oid, NULL) AS typname, typns.nspname AS typnsp, lanname, ") + argNamesCol + argDefsCol + proConfigCol + proType + - wxT(" pg_get_userbyid(proowner) as funcowner, description") + seclab + wxT("\n") + wxT(" pg_get_userbyid(proowner) as funcowner, description") + functionDefByPgSelect + seclab + wxT("\n") wxT(" FROM pg_proc pr\n") wxT(" JOIN pg_type typ ON typ.oid=prorettype\n") wxT(" JOIN pg_namespace typns ON typns.oid=typ.typnamespace\n") @@ -948,6 +961,10 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, function->iSetReturnAsSet(functions->GetBool(wxT("proretset"))); function->iSetIsStrict(functions->GetBool(wxT("proisstrict"))); function->iSetSource(functions->GetVal(wxT("prosrc"))); + if (!!functionDefByPgSelect) + { + function->iSetFunctionDefByPg(functions->GetVal(wxT("function_def_by_pg"))); + } function->iSetBin(functions->GetVal(wxT("probin"))); wxString vol = functions->GetVal(wxT("provolatile")); -- 2.6.3 ^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: patch: fix to use ``pg_get_functiondef()`` @ 2015-12-08 15:27 Andrej Antonov <[email protected]> parent: Andrej Antonov <[email protected]> 1 sibling, 0 replies; 6+ messages in thread From: Andrej Antonov @ 2015-12-08 15:27 UTC (permalink / raw) To: pgadmin-hackers |||||||||||||||||||| COMMENT-1 ON GITHUB [BEGIN] |||||||||||||||||||| <<< Dmitriy [email protected] >>> BTW > pg_get_functiondef() -- less wrong what's wrong with this function? :) |||||||||||||||||||| COMMENT-2 ON GITHUB [BEGIN] |||||||||||||||||||| ok. a few examples: example "A" =========== write function: CREATE FUNCTION test123() RETURNS TABLE(my_col text) LANGUAGE plpgsql AS $xxx$ BEGIN my_col := 'abc'; RETURN NEXT; my_col := 'def'; RETURN NEXT; END; $xxx$; --SELECT * FROM test123(); pgAdmin3 transforming it to function: -- Function: test123() -- DROP FUNCTION test123(); CREATE OR REPLACE FUNCTION test123() RETURNS SETOF text AS $BODY$ BEGIN my_col := 'abc'; RETURN NEXT; my_col := 'def'; RETURN NEXT; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000; ALTER FUNCTION test123() OWNER TO postgres; and of course with error: ERROR: "my_col" is not a known variable LINE 10: my_col := 'abc'; ^ ********** Error ********** ERROR: "my_col" is not a known variable SQL state: 42601 Character: 129 example "B" =========== CREATE FUNCTION test234(arr text[] DEFAULT ARRAY['sss', 'ddd']) RETURNS SETOF text LANGUAGE plpgsql AS $xxx$ DECLARE r record; BEGIN FOR r IN SELECT UNNEST(arr) LOOP RETURN NEXT r.unnest; END LOOP; END; $xxx$; --SELECT * FROM test234(); pgAdmin3 transforming it to function: -- Function: test234(text[]) -- DROP FUNCTION test234(text[]); CREATE OR REPLACE FUNCTION test234(arr text[] DEFAULT ARRAY['sss'::text) RETURNS SETOF text AS $BODY$ DECLARE r record; BEGIN FOR r IN SELECT UNNEST(arr) LOOP RETURN NEXT r.unnest; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000; ALTER FUNCTION test234(text[]) OWNER TO postgres; ...with error: ERROR: syntax error at or near ")" LINE 5: ...PLACE FUNCTION test234(arr text[] DEFAULT ARRAY['sss'::text) ^ ********** Error ********** ERROR: syntax error at or near ")" SQL state: 42601 Character: 137 other minor discomfort ====================== words -- ``VOLATILE``, ``COST 100``, ``ROWS 1000`` -- are extra (unnecessary, redundant). |||||||||||||||||||| COMMENT-3 ON GITHUB [BEGIN] |||||||||||||||||||| but this sql code was generated by pgadmin, isn't it? I thought you are talking about native postgres function pg_get_functiondef() ) |||||||||||||||||||| COMMENT-4 ON GITHUB [BEGIN] |||||||||||||||||||| > but this sql code was generated by pgadmin, isn't it? > I thought you are talking about native postgres function > pg_get_functiondef() sorry for my ambiguity message.. yes. my examples -- about pgadmin-generation (without ``pg_get_functiondef()`` ) I wanted to say: I do not know about bad sides of ``pg_get_functiondef()`` , but if they exists -- I think them less then bad sides of original-pgadmin-generation . |||||||||||||||||||| END OF COMMENTS ON GITHUB |||||||||||||||||||| Andrej Antonov писал 2015-12-08 11:50: > patch: fix to use ``pg_get_functiondef()`` [see attachment file] > > it is copy of pull-request https://github.com/postgres/pgadmin3/pull/12 > > thank you! -- Андрей Антонов, инженер-программист отдела информационных технологий и программирования, компания «Импульс М» -- Sent via pgadmin-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers ^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: patch: fix to use ``pg_get_functiondef()`` @ 2015-12-13 15:04 Dmitriy Olshevskiy <[email protected]> parent: Andrej Antonov <[email protected]> 1 sibling, 1 reply; 6+ messages in thread From: Dmitriy Olshevskiy @ 2015-12-13 15:04 UTC (permalink / raw) To: Andrej Antonov <[email protected]>; pgadmin-hackers Hi, Andrej! Here is small fix of your patch - can you check it please? I think there must be wxwidgets function IsEmpty() instead of double negation, because type of the variable is wxstring. Also I added the Trim() function before check if function definition is empty or not. On 08.12.2015 11:50, Andrej Antonov wrote: > patch: fix to use ``pg_get_functiondef()`` [see attachment file] > > it is copy of pull-request https://github.com/postgres/pgadmin3/pull/12 > > thank you! > > > -- Dmitriy Olshevskiy diff --git a/pgadmin/schema/pgFunction.cpp b/pgadmin/schema/pgFunction.cpp index ba49f79..c287c12 100644 --- a/pgadmin/schema/pgFunction.cpp +++ b/pgadmin/schema/pgFunction.cpp @@ -289,9 +289,10 @@ wxString pgFunction::GetSql(ctlTree *browser) sql = wxT("-- Function: ") + qtSig + wxT("\n\n") + wxT("-- DROP FUNCTION ") + qtSig + wxT(";\n\n"); - if (!!GetFunctionDefByPg()) + wxString functionDefByPgTrim = GetFunctionDefByPg().Trim(); + if (!functionDefByPgTrim.IsEmpty()) { - sql += GetFunctionDefByPg().Trim(); + sql += functionDefByPgTrim; } else if (GetLanguage() == wxT("edbspl") && GetProcType() == 2) { @@ -959,7 +960,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, function->iSetReturnAsSet(functions->GetBool(wxT("proretset"))); function->iSetIsStrict(functions->GetBool(wxT("proisstrict"))); function->iSetSource(functions->GetVal(wxT("prosrc"))); - if (!!functionDefByPgSelect) + if (!functionDefByPgSelect.IsEmpty()) { function->iSetFunctionDefByPg(functions->GetVal(wxT("function_def_by_pg"))); } -- Sent via pgadmin-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers Attachments: [text/plain] 0001-using-pg_get_functiondef-fixed.patch (1.1K, 3-0001-using-pg_get_functiondef-fixed.patch) download | inline diff: diff --git a/pgadmin/schema/pgFunction.cpp b/pgadmin/schema/pgFunction.cpp index ba49f79..c287c12 100644 --- a/pgadmin/schema/pgFunction.cpp +++ b/pgadmin/schema/pgFunction.cpp @@ -289,9 +289,10 @@ wxString pgFunction::GetSql(ctlTree *browser) sql = wxT("-- Function: ") + qtSig + wxT("\n\n") + wxT("-- DROP FUNCTION ") + qtSig + wxT(";\n\n"); - if (!!GetFunctionDefByPg()) + wxString functionDefByPgTrim = GetFunctionDefByPg().Trim(); + if (!functionDefByPgTrim.IsEmpty()) { - sql += GetFunctionDefByPg().Trim(); + sql += functionDefByPgTrim; } else if (GetLanguage() == wxT("edbspl") && GetProcType() == 2) { @@ -959,7 +960,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, function->iSetReturnAsSet(functions->GetBool(wxT("proretset"))); function->iSetIsStrict(functions->GetBool(wxT("proisstrict"))); function->iSetSource(functions->GetVal(wxT("prosrc"))); - if (!!functionDefByPgSelect) + if (!functionDefByPgSelect.IsEmpty()) { function->iSetFunctionDefByPg(functions->GetVal(wxT("function_def_by_pg"))); } ^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: patch: fix to use ``pg_get_functiondef()`` @ 2015-12-14 07:51 Andrej Antonov <[email protected]> parent: Dmitriy Olshevskiy <[email protected]> 0 siblings, 1 reply; 6+ messages in thread From: Andrej Antonov @ 2015-12-14 07:51 UTC (permalink / raw) To: Dmitriy Olshevskiy <[email protected]>; +Cc: pgadmin-hackers thank you, Dmitriy. I agree -- this-fix should works better. I applyed this-fix to my local-git-branches ("REL-1_20_0-impulsm" and "fix-to-use-pg_get_functiondef"). works good. Dmitriy Olshevskiy писал 2015-12-13 18:04: > Hi, Andrej! > Here is small fix of your patch - can you check it please? > I think there must be wxwidgets function IsEmpty() instead of double > negation, > because type of the variable is wxstring. Also I added the Trim() > function before > check if function definition is empty or not. > > On 08.12.2015 11:50, Andrej Antonov wrote: > >> patch: fix to use ``pg_get_functiondef()`` [see attachment file] >> >> it is copy of pull-request >> https://github.com/postgres/pgadmin3/pull/12 [1] >> >> thank you! > > -- > Dmitriy Olshevskiy > > > Links: > ------ > [1] https://github.com/postgres/pgadmin3/pull/12 -- Андрей Антонов, инженер-программист отдела информационных технологий и программирования, компания «Импульс М» -- Sent via pgadmin-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers ^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: patch: fix to use ``pg_get_functiondef()`` @ 2015-12-18 09:22 Andrej Antonov <[email protected]> parent: Andrej Antonov <[email protected]> 0 siblings, 1 reply; 6+ messages in thread From: Andrej Antonov @ 2015-12-18 09:22 UTC (permalink / raw) To: Dmitriy Olshevskiy <[email protected]>; +Cc: pgadmin-hackers small fix ( diff see here: https://github.com/postgres-impulsm/pgadmin3/commit/72f381aa1964d5630f3ada44768bc562911102e9 ) if we using ``pg_get_functiondef(func_oid)`` -- in this case -- no need to write additional ``ALTER FUNCTION ... = ... ;``. Andrej Antonov писал 2015-12-14 10:51: > thank you, Dmitriy. I agree -- this-fix should works better. > > I applyed this-fix to my local-git-branches ("REL-1_20_0-impulsm" and > "fix-to-use-pg_get_functiondef"). works good. > > Dmitriy Olshevskiy писал 2015-12-13 18:04: >> Hi, Andrej! >> Here is small fix of your patch - can you check it please? >> I think there must be wxwidgets function IsEmpty() instead of double >> negation, >> because type of the variable is wxstring. Also I added the Trim() >> function before >> check if function definition is empty or not. >> >> On 08.12.2015 11:50, Andrej Antonov wrote: >> >>> patch: fix to use ``pg_get_functiondef()`` [see attachment file] >>> >>> it is copy of pull-request >>> https://github.com/postgres/pgadmin3/pull/12 [1] >>> >>> thank you! >> >> -- >> Dmitriy Olshevskiy >> >> >> Links: >> ------ >> [1] https://github.com/postgres/pgadmin3/pull/12 -- Андрей Антонов, инженер-программист отдела информационных технологий и программирования, компания «Импульс М» -- Sent via pgadmin-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers Attachments: [text/x-diff] 0001-using-pg_get_functiondef__V3.patch (6.3K, 2-0001-using-pg_get_functiondef__V3.patch) download | inline diff: From 93170fb2ac121da60a10e53585bee180bc2dc652 Mon Sep 17 00:00:00 2001 From: "Andrej Antonov (impulsm.work)" <[email protected]> Date: Mon, 7 Dec 2015 18:26:52 +0300 Subject: [PATCH] using ``pg_get_functiondef(..)`` --- pgadmin/include/schema/pgFunction.h | 10 ++++++- pgadmin/schema/pgFunction.cpp | 53 ++++++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 17 deletions(-) diff --git a/pgadmin/include/schema/pgFunction.h b/pgadmin/include/schema/pgFunction.h index 7cd6ffd..bc39865 100644 --- a/pgadmin/include/schema/pgFunction.h +++ b/pgadmin/include/schema/pgFunction.h @@ -118,6 +118,14 @@ public: { source = s; } + wxString GetFunctionDefByPg() const + { + return functionDefByPg; + } + void iSetFunctionDefByPg(const wxString &s) + { + functionDefByPg = s; + } wxString GetBin() const { return bin; @@ -251,7 +259,7 @@ protected: pgFunction(pgSchema *newSchema, int newType, const wxString &newName = wxT("")); private: - wxString returnType, language, volatility, source, bin; + wxString returnType, language, volatility, source, functionDefByPg, bin; wxArrayString argNamesArray, argTypesArray, argModesArray, argDefsArray; bool returnAsSet, secureDefiner, isStrict, isWindow, isLeakProof; long argCount, cost, rows, argDefValCount, procType; diff --git a/pgadmin/schema/pgFunction.cpp b/pgadmin/schema/pgFunction.cpp index bd0342a..2a39079 100644 --- a/pgadmin/schema/pgFunction.cpp +++ b/pgadmin/schema/pgFunction.cpp @@ -287,12 +287,19 @@ wxString pgFunction::GetSql(ctlTree *browser) wxString qtSig = GetQuotedFullIdentifier() + wxT("(") + GetArgSigList() + wxT(")"); sql = wxT("-- Function: ") + qtSig + wxT("\n\n") - + wxT("-- DROP FUNCTION ") + qtSig + wxT(";") - + wxT("\n\nCREATE OR REPLACE FUNCTION ") + qtName; - - // Use Oracle style syntax for edb-spl functions - if (GetLanguage() == wxT("edbspl") && GetProcType() == 2) + + wxT("-- DROP FUNCTION ") + qtSig + wxT(";\n\n"); + + wxString functionDefByPgTrim = GetFunctionDefByPg().Trim(); + if (!functionDefByPgTrim.IsEmpty()) + { + sql += functionDefByPgTrim; + } + else if (GetLanguage() == wxT("edbspl") && GetProcType() == 2) { + sql += wxT("CREATE OR REPLACE FUNCTION ") + qtName; + + // Use Oracle style syntax for edb-spl functions + sql += wxT("\nRETURN "); sql += GetReturnType(); @@ -304,6 +311,8 @@ wxString pgFunction::GetSql(ctlTree *browser) } else { + sql += wxT("CREATE OR REPLACE FUNCTION ") + qtName; + sql += wxT("\n RETURNS "); if (GetReturnAsSet() && !GetReturnType().StartsWith(wxT("TABLE"))) sql += wxT("SETOF "); @@ -347,16 +356,19 @@ wxString pgFunction::GetSql(ctlTree *browser) if (!sql.Strip(wxString::both).EndsWith(wxT(";"))) sql += wxT(";"); - size_t i; - for (i = 0 ; i < configList.GetCount() ; i++) + if (functionDefByPgTrim.IsEmpty()) { - if (configList.Item(i).BeforeFirst('=') != wxT("search_path") && - configList.Item(i).BeforeFirst('=') != wxT("temp_tablespaces")) - sql += wxT("\nALTER FUNCTION ") + qtSig - + wxT(" SET ") + configList.Item(i).BeforeFirst('=') + wxT("='") + configList.Item(i).AfterFirst('=') + wxT("';\n"); - else - sql += wxT("\nALTER FUNCTION ") + qtSig - + wxT(" SET ") + configList.Item(i).BeforeFirst('=') + wxT("=") + configList.Item(i).AfterFirst('=') + wxT(";\n"); + size_t i; + for (i = 0 ; i < configList.GetCount() ; i++) + { + if (configList.Item(i).BeforeFirst('=') != wxT("search_path") && + configList.Item(i).BeforeFirst('=') != wxT("temp_tablespaces")) + sql += wxT("\nALTER FUNCTION ") + qtSig + + wxT(" SET ") + configList.Item(i).BeforeFirst('=') + wxT("='") + configList.Item(i).AfterFirst('=') + wxT("';\n"); + else + sql += wxT("\nALTER FUNCTION ") + qtSig + + wxT(" SET ") + configList.Item(i).BeforeFirst('=') + wxT("=") + configList.Item(i).AfterFirst('=') + wxT(";\n"); + } } sql += wxT("\n") @@ -643,7 +655,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, cacheMap typeCache, exprCache; pgFunction *function = 0; - wxString argNamesCol, argDefsCol, proConfigCol, proType, seclab; + wxString argNamesCol, argDefsCol, proConfigCol, proType, functionDefByPgSelect, seclab; if (obj->GetConnection()->BackendMinimumVersion(8, 0)) argNamesCol = wxT("proargnames, "); if (obj->GetConnection()->HasFeature(FEATURE_FUNCTION_DEFAULTS) && !obj->GetConnection()->BackendMinimumVersion(8, 4)) @@ -654,6 +666,11 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, proConfigCol = wxT("proconfig, "); if (obj->GetConnection()->EdbMinimumVersion(8, 1)) proType = wxT("protype, "); + if (obj->GetConnection()->BackendMinimumVersion(8, 4)) + { + functionDefByPgSelect = wxT(",\n") + wxT("pg_get_functiondef(pr.oid) AS function_def_by_pg"); + } if (obj->GetConnection()->BackendMinimumVersion(9, 1)) { seclab = wxT(",\n") @@ -664,7 +681,7 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, pgSet *functions = obj->GetDatabase()->ExecuteSet( wxT("SELECT pr.oid, pr.xmin, pr.*, format_type(TYP.oid, NULL) AS typname, typns.nspname AS typnsp, lanname, ") + argNamesCol + argDefsCol + proConfigCol + proType + - wxT(" pg_get_userbyid(proowner) as funcowner, description") + seclab + wxT("\n") + wxT(" pg_get_userbyid(proowner) as funcowner, description") + functionDefByPgSelect + seclab + wxT("\n") wxT(" FROM pg_proc pr\n") wxT(" JOIN pg_type typ ON typ.oid=prorettype\n") wxT(" JOIN pg_namespace typns ON typns.oid=typ.typnamespace\n") @@ -948,6 +965,10 @@ pgFunction *pgFunctionFactory::AppendFunctions(pgObject *obj, pgSchema *schema, function->iSetReturnAsSet(functions->GetBool(wxT("proretset"))); function->iSetIsStrict(functions->GetBool(wxT("proisstrict"))); function->iSetSource(functions->GetVal(wxT("prosrc"))); + if (!functionDefByPgSelect.IsEmpty()) + { + function->iSetFunctionDefByPg(functions->GetVal(wxT("function_def_by_pg"))); + } function->iSetBin(functions->GetVal(wxT("probin"))); wxString vol = functions->GetVal(wxT("provolatile")); -- 2.6.4 ^ permalink raw reply [nested|flat] 6+ messages in thread
* Re: patch: fix to use ``pg_get_functiondef()`` @ 2015-12-30 18:46 Dmitriy Olshevskiy <[email protected]> parent: Andrej Antonov <[email protected]> 0 siblings, 0 replies; 6+ messages in thread From: Dmitriy Olshevskiy @ 2015-12-30 18:46 UTC (permalink / raw) To: pgadmin-hackers; +Cc: Andrej Antonov <[email protected]> Hello, dear colleagues) Could you please review this patch (see the previous letter)? As I remember, there are several similar, but unclosed issues in pgadmin mailing list yet. Really, there is a problem with function's definition and this patch probably could solve it (at least for postgresql 8.4 and higher). What do you think? Thank you. On 18.12.2015 13:22, Andrej Antonov wrote: > small fix ( diff see here: > https://github.com/postgres-impulsm/pgadmin3/commit/72f381aa1964d5630f3ada44768bc562911102e9 > ) > > > if we using ``pg_get_functiondef(func_oid)`` -- > in this case -- no need to write additional > ``ALTER FUNCTION ... = ... ;``. > > > Andrej Antonov писал 2015-12-14 10:51: >> thank you, Dmitriy. I agree -- this-fix should >> works better. >> >> I applyed this-fix to my local-git-branches >> ("REL-1_20_0-impulsm" and >> "fix-to-use-pg_get_functiondef"). works good. >> >> Dmitriy Olshevskiy писал 2015-12-13 18:04: >>> Hi, Andrej! >>> Here is small fix of your patch - can you >>> check it please? >>> I think there must be wxwidgets function >>> IsEmpty() instead of double >>> negation, >>> because type of the variable is wxstring. >>> Also I added the Trim() >>> function before >>> check if function definition is empty or not. >>> >>> On 08.12.2015 11:50, Andrej Antonov wrote: >>> >>>> patch: fix to use ``pg_get_functiondef()`` >>>> [see attachment file] >>>> >>>> it is copy of pull-request >>>> https://github.com/postgres/pgadmin3/pull/12 [1] >>>> >>>> thank you! >>> >>> -- >>> Dmitriy Olshevskiy >>> >>> >>> Links: >>> ------ >>> [1] https://github.com/postgres/pgadmin3/pull/12 > -- Dmitriy Olshevskiy -- Sent via pgadmin-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers ^ permalink raw reply [nested|flat] 6+ messages in thread
end of thread, other threads:[~2015-12-30 18:46 UTC | newest] Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2015-12-08 08:50 patch: fix to use ``pg_get_functiondef()`` Andrej Antonov <[email protected]> 2015-12-08 15:27 ` Andrej Antonov <[email protected]> 2015-12-13 15:04 ` Dmitriy Olshevskiy <[email protected]> 2015-12-14 07:51 ` Andrej Antonov <[email protected]> 2015-12-18 09:22 ` Andrej Antonov <[email protected]> 2015-12-30 18:46 ` Dmitriy Olshevskiy <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox