connectivity/source/drivers/postgresql/pq_databasemetadata.cxx | 81 +++++++++- 1 file changed, 77 insertions(+), 4 deletions(-)
New commits: commit 43bca025961c4d78082e18efb95f9212b27f964b Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Fri Mar 4 12:38:47 2016 +0100 tdf#92538 pgsql-sdbc make a reasonable sorting of types Change-Id: I74283234834b5057857620ed2466068e88628585 Reviewed-on: https://gerrit.libreoffice.org/22896 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Stahl <mst...@redhat.com> diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx index 2b349db..fcd4847 100644 --- a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx +++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx @@ -2143,11 +2143,84 @@ struct TypeInfoByDataTypeSorter OUString nameB; a[0 /*TYPE_NAME*/] >>= nameA; b[0 /*TYPE_NAME*/] >>= nameB; - if( nameA.startsWith( "int4" ) ) + OUString nsA, tnA, nsB, tnB; + + // parse typename into schema and typename + sal_Int32 nIndex=0; + nsA = nameA.getToken(0, '.', nIndex); + if (nIndex<0) + { + tnA = nsA; + nsA.clear(); + } + else + { + tnA = nameA.getToken(0, '.', nIndex); + assert(nIndex < 0); + } + + nIndex=0; + nsB = nameB.getToken(0, '.', nIndex); + if (nIndex<0) + { + tnB = nsB; + nsB.clear(); + } + else + { + tnB = nameB.getToken(0, '.', nIndex); + assert(nIndex < 0); + } + + // sort no schema first, then "public", then normal schemas, then internal schemas + if(nsA == nsB) + { + if(nsA.isEmpty()) + { + assert(nsB.isEmpty()); + // within each type category, sort privileged choice first + if( tnA == "int4" || tnA == "varchar" || tnA == "char" || tnA == "text") + return true; + if( tnB == "int4" || tnB == "varchar" || tnB == "char" || tnB == "text") + return false; + } + return nameA.compareTo( nameB ) < 0; + } + else if (nsA.isEmpty()) + { + assert(!nsB.isEmpty()); return true; - if( nameB.startsWith( "int4" ) ) + } + else if (nsB.isEmpty()) + { + assert(!nsA.isEmpty()); + return false; + } + else if(nsA == "public") + { + assert(nsB != "public"); + return true; + } + else if(nsB == "public") + { + assert(nsA != "public"); return false; - return nameA.compareTo( nameB ) < 0; + } + else if(nsA.startsWith("pg_")) + { + if(nsB.startsWith("pg_")) + return nsA.compareTo(nsB) < 0; + else + return false; + } + else if(nsB.startsWith("pg_")) + { + return true; + } + else + { + return nsA.compareTo(nsB) < 0; + } } return valueA.toInt32() < valueB.toInt32(); commit f80bc900eecf2268587e7b7ced5f392a6b1c1c62 Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Fri Mar 4 13:22:57 2016 +0100 When not changing the value of a string parameter, use const OUString&, Change-Id: Id82a62bb437e09137a643c191ad56745daea0e38 Reviewed-on: https://gerrit.libreoffice.org/22895 Reviewed-by: Michael Stahl <mst...@redhat.com> Tested-by: Michael Stahl <mst...@redhat.com> diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx index 14cb74e..2b349db 100644 --- a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx +++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx @@ -2194,7 +2194,7 @@ static sal_Int32 getMaxScale( sal_Int32 dataType ) namespace { - OUString construct_full_typename(OUString ns, OUString tn) + OUString construct_full_typename(const OUString &ns, const OUString &tn) { if(ns.isEmpty() || ns == "pg_catalog") return tn; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits