Log Message:
-----------
performance speedup retrieving server features
Modified Files:
--------------
pgadmin3/src/db:
pgConn.cpp (r1.56 -> r1.57)
Index: pgConn.cpp
===================================================================
RCS file: /projects/pgadmin3/src/db/pgConn.cpp,v
retrieving revision 1.56
retrieving revision 1.57
diff -Lsrc/db/pgConn.cpp -Lsrc/db/pgConn.cpp -u -w -r1.56 -r1.57
--- src/db/pgConn.cpp
+++ src/db/pgConn.cpp
@@ -63,7 +63,7 @@
majorVersion=0;
noticeArg=0;
connStatus = PGCONN_BAD;
- features[FEATURE_INITIALIZED] = false;
+ memset(features, 0, sizeof(features));
#ifdef __WXMSW__
struct in_addr ipaddr;
@@ -436,54 +436,38 @@
{
features[FEATURE_INITIALIZED] = true;
- features[FEATURE_SIZE] =
- !ExecuteScalar(
- wxT("SELECT proname FROM pg_proc\n")
- wxT(" WHERE proname = 'pg_tablespace_size'")
- wxT( " AND proargtypes[0] = 26"))
- .IsEmpty();
- features[FEATURE_FILEREAD] =
- !ExecuteScalar(
- wxT("SELECT proname FROM pg_proc\n")
- wxT(" WHERE proname = 'pg_file_read'")
- wxT( " AND proargtypes[0] = 25")
- wxT( " AND proargtypes[1] = 20")
- wxT( " AND proargtypes[2] = 20"))
- .IsEmpty();
- features[FEATURE_ROTATELOG] =
- !ExecuteScalar(
- wxT("SELECT proname FROM pg_proc\n")
- wxT(" WHERE proname = 'pg_rotate_log'")
- wxT( " AND pronargs = 0"))
- .IsEmpty();
- features[FEATURE_POSTMASTER_STARTTIME] =
- !ExecuteScalar(
- wxT("SELECT proname FROM pg_proc\n")
- wxT(" WHERE proname = 'pg_postmaster_starttime'")
- wxT( " AND pronargs = 0"))
- .IsEmpty();
- features[FEATURE_TERMINATE_BACKEND] =
- !ExecuteScalar(
- wxT("SELECT proname FROM pg_proc\n")
- wxT(" WHERE proname = 'pg_terminate_backend'")
- wxT( " AND pronargs = 1"))
- .IsEmpty();
-
- if (majorVersion >= 8)
- {
- features[FEATURE_STANDARD_LOGNAME_FORMAT] =
- ExecuteScalar(
- wxT("SHOW log_filename"))
- ==
wxT("postgresql-%Y-%m-%d_%H%M%S.log");
- }
- else
+ pgSet *set=ExecuteSet(
+ wxT("SELECT proname, pronargs, proargtypes[0] AS arg0, proargtypes[1] AS
arg1, proargtypes[2] AS arg2\n")
+ wxT(" FROM pg_proc\n")
+ wxT(" WHERE proname IN ('pg_tablespace_size', 'pg_file_read',
'pg_rotate_log',")
+ wxT( " 'pg_postmaster_starttime',
'pg_terminate_backend')"));
+
+ if (set)
{
- features[FEATURE_STANDARD_LOGNAME_FORMAT] = false;
- }
+ while (!set->Eof())
+ {
+ wxString proname=set->GetVal(wxT("proname"));
+ long pronargs = set->GetLong(wxT("pronargs"));
+
+ if (proname == wxT("pg_tablespace_size") && pronargs == 1 &&
set->GetLong(wxT("arg0")) == 26)
+ features[FEATURE_SIZE]= true;
+ else if (proname == wxT("pg_file_read") && pronargs == 3 &&
set->GetLong(wxT("arg0")) == 25
+ && set->GetLong(wxT("arg1")) == 20 && set->GetLong(wxT("arg2"))
== 20)
+ features[FEATURE_FILEREAD] = true;
+ else if (proname == wxT("pg_rotate_log") && pronargs == 0)
+ features[FEATURE_ROTATELOG] = true;
+ else if (proname == wxT("pg_postmaster_starttime") && pronargs == 0)
+ features[FEATURE_POSTMASTER_STARTTIME] = true;
+ else if (proname == wxT("pg_terminate_backend") && pronargs == 1 &&
set->GetLong(wxT("arg0")) == 23)
+ features[FEATURE_TERMINATE_BACKEND] = true;
+ set->MoveNext();
+ }
+ delete set;
+ }
}
- if (featureNo < 1 ||featureNo >= FEATURE_LAST)
+ if (featureNo <= FEATURE_INITIALIZED || featureNo >= FEATURE_LAST)
return false;
return features[featureNo];
}
\ No newline at end of file
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?
http://archives.postgresql.org