Index: CHANGELOG.txt
===================================================================
RCS file: /projects/pgadmin3/CHANGELOG.txt,v
retrieving revision 1.199
retrieving revision 1.200
diff -LCHANGELOG.txt -LCHANGELOG.txt -u -w -r1.199 -r1.200
--- CHANGELOG.txt
+++ CHANGELOG.txt
@@ -17,6 +17,7 @@
+ - 2005-04-01 AP Speed up of column property retrieval
- 2005-04-01 DP 1.2.2 Fix changing of view ownership
- 2005-03-28 AP FK MATCH FULL
- 2005-03-28 AP Option: User defined system schemas
Index: pgColumn.h
===================================================================
RCS file: /projects/pgadmin3/src/include/pgColumn.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -Lsrc/include/pgColumn.h -Lsrc/include/pgColumn.h -u -w -r1.29 -r1.30
--- src/include/pgColumn.h
+++ src/include/pgColumn.h
@@ -82,6 +82,8 @@
void iSetSerialSequence(const wxString &s) { serialSequence=s; }
wxString GetSerialSchema() const { return serialSchema; }
void iSetSerialSchema(const wxString &s) { serialSchema=s; }
+ void iSetPkCols(const wxString &s) { pkCols = s; }
+ void iSetIsFK(const bool b) { isFK = b; }
bool DropObject(wxFrame *frame, wxTreeCtrl *browser, bool cascaded);
bool GetSystemObject() const { return colNumber < 0; }
@@ -94,7 +96,7 @@
private:
wxString varTypename, quotedTypename, defaultVal, tableName, quotedFullTable, storage, rawTypename;
- wxString serialSequence, serialSchema;
+ wxString serialSequence, serialSchema, pkCols;
long colNumber, length, precision, statistics, attstattarget;
long typlen, typmod, inheritedCount;
bool isPK, isFK, notNull, isArray;
Index: pgColumn.cpp
===================================================================
RCS file: /projects/pgadmin3/src/schema/pgColumn.cpp,v
retrieving revision 1.41
retrieving revision 1.42
diff -Lsrc/schema/pgColumn.cpp -Lsrc/schema/pgColumn.cpp -u -w -r1.41 -r1.42
--- src/schema/pgColumn.cpp
+++ src/schema/pgColumn.cpp
@@ -158,21 +158,11 @@
if (!expandedKids)
{
expandedKids = true;
- // append type here
- // fk, pk lesen
- pgSet *set = ExecuteSet(
- wxT("SELECT indkey FROM pg_index\n")
- wxT(" WHERE indrelid=") + GetTableOidStr() +
- wxT(" AND indisprimary"));
- if (set)
- {
- wxString indkey, str;
- while (!isPK && !set->Eof())
- {
- wxStringTokenizer indkey(set->GetVal(0));
+
+ wxStringTokenizer indkey(pkCols);
while (indkey.HasMoreTokens())
{
- str=indkey.GetNextToken();
+ wxString str=indkey.GetNextToken();
if (StrToLong(str) == GetColNumber())
{
isPK = true;
@@ -180,12 +170,10 @@
}
}
- set->MoveNext();
- }
- delete set;
- }
-
- set=ExecuteSet(
+ if (!GetDatabase()->BackendMinimumVersion(7, 4))
+ {
+ // 7.3 misses the ANY(array) comparision
+ pgSet *set=ExecuteSet(
wxT("SELECT conkey\n")
wxT(" FROM pg_constraint ct\n")
wxT(" JOIN pg_class cl on cl.oid=confrelid\n")
@@ -213,6 +201,7 @@
delete set;
}
}
+ }
if (properties)
{
@@ -278,10 +267,18 @@
if (!settings->GetShowSystemObjects())
systemRestriction = wxT("\n AND attnum > 0");
- pgSet *columns= database->ExecuteSet(
+ wxString sql=
wxT("SELECT att.*, def.*, CASE WHEN attndims > 0 THEN 1 ELSE 0 END AS isarray, CASE WHEN ty.typname = 'bpchar' THEN 'char' WHEN ty.typname = '_bpchar' THEN '_char' ELSE ty.typname END AS typname, tn.nspname as typnspname, et.typname as elemtypname,\n")
wxT(" cl.relname, na.nspname, att.attstattarget, description, cs.relname AS sername, ns.nspname AS serschema,\n")
- wxT(" (SELECT count(1) FROM pg_type t2 WHERE t2.typname=ty.typname) > 1 AS isdup\n")
+ wxT(" (SELECT count(1) FROM pg_type t2 WHERE t2.typname=ty.typname) > 1 AS isdup, indkey");
+
+ if (database->BackendMinimumVersion(7, 4))
+ sql +=
+ wxT(",\n")
+ wxT(" EXISTS(SELECT 1 FROM pg_constraint WHERE conrelid=att.attrelid AND contype='f'")
+ wxT(" AND att.attnum=ANY(conkey)) As isfk");
+
+ sql += wxT("\n")
wxT(" FROM pg_attribute att\n")
wxT(" JOIN pg_type ty ON ty.oid=atttypid\n")
wxT(" JOIN pg_namespace tn ON tn.oid=ty.typnamespace\n")
@@ -292,11 +289,13 @@
wxT(" LEFT OUTER JOIN pg_description des ON des.objoid=attrelid AND des.objsubid=attnum\n")
wxT(" LEFT OUTER JOIN (pg_depend JOIN pg_class cs ON objid=cs.oid AND cs.relkind='S') ON refobjid=attrelid AND refobjsubid=attnum\n")
wxT(" LEFT OUTER JOIN pg_namespace ns ON ns.oid=cs.relnamespace\n")
+ wxT(" LEFT OUTER JOIN pg_index pi ON pi.indrelid=attrelid AND indisprimary\n")
wxT(" WHERE attrelid = ") + collection->GetOidStr()
+ restriction + systemRestriction + wxT("\n")
wxT(" AND attisdropped IS FALSE\n")
- wxT(" ORDER BY attnum"));
+ wxT(" ORDER BY attnum");
+ pgSet *columns= database->ExecuteSet(sql);
if (columns)
{
while (!columns->Eof())
@@ -310,6 +309,9 @@
column->iSetComment(columns->GetVal(wxT("description")));
column->iSetSerialSequence(columns->GetVal(wxT("sername")));
column->iSetSerialSchema(columns->GetVal(wxT("serschema")));
+ column->iSetPkCols(columns->GetVal(wxT("indkey")));
+ if (database->BackendMinimumVersion(7, 4))
+ column->iSetIsFK(columns->GetBool(wxT("isfk")));
if (columns->GetBool(wxT("atthasdef")))
column->iSetDefault(columns->GetVal(wxT("adsrc")));
Index: sysSettings.cpp
===================================================================
RCS file: /projects/pgadmin3/src/utils/sysSettings.cpp,v
retrieving revision 1.71
retrieving revision 1.72
diff -Lsrc/utils/sysSettings.cpp -Lsrc/utils/sysSettings.cpp -u -w -r1.71 -r1.72
--- src/utils/sysSettings.cpp
+++ src/utils/sysSettings.cpp
@@ -33,7 +33,7 @@
sysSettings::sysSettings(const wxString& name) : wxConfig(name)
{
// Tip Of The Day
- Read(wxT("ShowTipOfTheDay"), &showTipOfTheDay, TRUE);
+ Read(wxT("ShowTipOfTheDay"), &showTipOfTheDay, true);
Read(wxT("NextTipOfTheDay"), &nextTipOfTheDay, 0);
// Log
@@ -49,7 +49,7 @@
Read(wxT("LastSSL"), &lastSSL, 0);
// Show System Objects
- Read(wxT("ShowSystemObjects"), &showSystemObjects, FALSE);
+ Read(wxT("ShowSystemObjects"), &showSystemObjects, false);
// Read(wxT("SqlHelpSite"), &sqlHelpSite, docPath + wxT("/en_US/pg/"));
Read(wxT("SqlHelpSite"), &sqlHelpSite, wxT(""));