wxString pgTablespace::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Tablespace: ") + GetName() + wxT("\n\n"); if (location.IsEmpty()) sql += wxT("-- System Tablespace\n"); else sql += wxT("-- DROP TABLESPACE ") + GetQuotedIdentifier() + wxT("\n\nCREATE TABLESPACE ") + GetQuotedIdentifier() + wxT("\n OWNER ") + qtIdent(GetOwner()) + wxT("\n LOCATION ") + qtDbString(location) + wxT(";\n"); sql += GetCommentSql(); size_t i; for (i = 0 ; i < variables.GetCount() ; i++) sql += wxT("ALTER TABLESPACE ") + GetQuotedFullIdentifier() + wxT(" SET (") + variables.Item(i) + wxT(");\n"); if (GetConnection()->BackendMinimumVersion(9, 2)) sql += GetSeqLabelsSql(); } return sql; }
bool edbPrivateSynonym::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { wxString sql; if (isPublic) sql = wxT("DROP PUBLIC SYNONYM ") + GetQuotedIdentifier(); else sql = wxT("DROP SYNONYM ") + this->GetSchema()->GetQuotedIdentifier() + wxT(".") + GetQuotedIdentifier(); return GetDatabase()->ExecuteVoid(sql); }
wxString edbResourceGroup::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- RESOURCE GROUP: ") + GetName() + wxT("\n\n") + wxT("-- DROP RESOURCE GROUP ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE RESOURCE GROUP ") + GetQuotedIdentifier() + wxT(";") + wxT("\nALTER RESOURCE GROUP ") + GetQuotedIdentifier() + wxT(" SET cpu_rate_limit = ") + wxString::Format(wxT("%f"), GetCPURateLimit()) + wxT(", dirty_rate_limit = ") + wxString::Format(wxT("%f"), GetDirtyRateLimit()) + wxT(";"); } return sql; }
bool pgTrigger::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { wxString sql = wxT("DROP TRIGGER ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedFullTable(); if (cascaded) sql += wxT(" CASCADE"); return GetDatabase()->ExecuteVoid(sql); }
bool pgExtension::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { wxString sql = wxT("DROP EXTENSION ") + GetQuotedIdentifier(); if (cascaded) sql += wxT(" CASCADE"); return GetDatabase()->ExecuteVoid(sql); }
wxString gpResQueue::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Resource Queue: \"") + GetName() + wxT("\"\n\n") + wxT("-- DROP RESOURCE QUEUE ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE RESOURCE QUEUE ") + GetQuotedIdentifier(); if (GetCountLimit() != -1.0) { sql += wxT(" ACTIVE THRESHOLD "); sql += NumToStr(GetCountLimit()); } if (GetCostLimit() != -1.0) { sql += wxT(" COST THRESHOLD "); sql += NumToStr(GetCostLimit()); } if (GetIgnoreCostLimit() != 0.0) { sql += wxT(" IGNORE THRESHOLD "); sql += NumToStr(GetIgnoreCostLimit()); } if (GetOvercommit()) sql += wxT(" OVERCOMMIT"); else sql += wxT(" NOOVERCOMMIT"); } return sql; }
wxString pgForeignKey::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Foreign Key: ") + GetQuotedFullIdentifier() + wxT("\n\n") + wxT("-- ALTER TABLE ") + GetQuotedSchemaPrefix(fkSchema) + qtIdent(fkTable) + wxT(" DROP CONSTRAINT ") + GetQuotedIdentifier() + wxT(";") + wxT("\n\nALTER TABLE ") + GetQuotedSchemaPrefix(fkSchema) + qtIdent(fkTable) + wxT("\n ADD CONSTRAINT ") + GetConstraint() + wxT(";\n"); if (!GetComment().IsEmpty()) sql += wxT("COMMENT ON CONSTRAINT ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedSchemaPrefix(fkSchema) + qtIdent(fkTable) + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n"); } return sql; }
wxString pgForeignKey::GetConstraint() { wxString sql; sql = GetQuotedIdentifier() + wxT(" FOREIGN KEY ") + GetDefinition(); return sql; }
bool pgForeignKey::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { wxString sql = wxT("ALTER TABLE ") + this->GetSchema()->GetQuotedIdentifier() + wxT(".") + qtIdent(fkTable) + wxT(" DROP CONSTRAINT ") + GetQuotedIdentifier(); if (cascaded) sql += wxT(" CASCADE"); return GetDatabase()->ExecuteVoid(sql); }
wxString pgExtension::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Extension: ") + GetQuotedIdentifier() + wxT("\n\n") + wxT("-- DROP EXTENSION ") + GetQuotedIdentifier() + wxT(";") + wxT("\n\n CREATE EXTENSION ") + GetName(); if (!GetSchemaStr().IsEmpty()) sql += wxT("\n SCHEMA ") + qtIdent(GetSchemaStr()); if (!GetVersion().IsEmpty()) sql += wxT("\n VERSION ") + qtIdent(GetVersion()); sql += wxT(";\n"); } return sql; }
bool pgCheck::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { wxString sql = wxT("ALTER ") + objectKind + wxT(" ") + qtIdent(objectSchema) + wxT(".") + qtIdent(objectName) + wxT(" DROP CONSTRAINT ") + GetQuotedIdentifier(); if (cascaded) sql += wxT(" CASCADE"); return GetDatabase()->ExecuteVoid(sql); }
wxString pgCatalogObject::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Catalog Object: ") + GetQuotedIdentifier() + wxT("\n"); } return sql; }
wxString edbSynonym::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Public synonym: ") + GetQuotedIdentifier() + wxT("\n\n") wxT("-- DROP PUBLIC SYNONYM ") + GetQuotedIdentifier(); sql += wxT("\n\nCREATE OR REPLACE PUBLIC SYNONYM ") + GetQuotedIdentifier() + wxT(" FOR "); if (GetTargetSchema() != wxEmptyString) sql += qtIdent(GetTargetSchema()) + wxT("."); sql += qtIdent(GetTargetObject()) + wxT(";\n"); } return sql; }
void pgForeignKey::Validate(frmMain *form) { wxString sql = wxT("ALTER TABLE ") + GetQuotedSchemaPrefix(fkSchema) + qtIdent(fkTable) + wxT("\n VALIDATE CONSTRAINT ") + GetQuotedIdentifier(); GetDatabase()->ExecuteVoid(sql); iSetValid(true); UpdateIcon(form->GetBrowser()); }
void pgCheck::Validate(frmMain *form) { wxString sql = wxT("ALTER ") + objectKind + wxT(" ") + GetQuotedSchemaPrefix(objectSchema) + qtIdent(objectName) + wxT("\n VALIDATE CONSTRAINT ") + GetQuotedIdentifier(); GetDatabase()->ExecuteVoid(sql); iSetValid(true); UpdateIcon(form->GetBrowser()); }
wxString pgCheck::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Check: ") + GetQuotedFullIdentifier() + wxT("\n\n") + wxT("-- ALTER ") + objectKind + wxT(" ") + GetQuotedSchemaPrefix(objectSchema) + qtIdent(objectName) + wxT(" DROP CONSTRAINT ") + GetQuotedIdentifier() + wxT(";\n\nALTER ") + objectKind + wxT(" ") + GetQuotedSchemaPrefix(objectSchema) + qtIdent(objectName) + wxT("\n ADD CONSTRAINT ") + GetConstraint() + wxT(";\n"); if (!GetComment().IsNull()) { sql += wxT("COMMENT ON CONSTRAINT ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedSchemaPrefix(objectSchema) + qtIdent(objectName) + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n"); } } return sql; }
// Get a single char token bool SqlParser::GetSingleCharToken(Token *token) { if(token == NULL) return false; bool exists = false; while(_remain_size > 0) { const char *cur = _next_start; // Check for a comment, but do not return it as a token if(ParseComment() == true) continue; // Check for quoted identifier exists = GetQuotedIdentifier(token); if(exists == true) break; // Check for string literal exists = GetStringLiteral(token); if(exists == true) break; // Return if not a single char if(strchr(g_symbols, *cur) == NULL) break; _next_start++; _remain_size--; token->type = TOKEN_SYMBOL; token->chr = *cur; token->wchr = 0; token->str = NULL; token->wstr = NULL; token->len = 0; token->remain_size = _remain_size; token->next_start = _next_start; _tokens.Add(token); cur++; exists = true; break; } return exists; }
wxString pgRule::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Rule: ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedFullTable() + wxT("\n\n") + wxT("-- DROP RULE ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedFullTable() + wxT(";\n\n") + wxT("CREATE OR REPLACE") + GetFormattedDefinition().Mid(6) // the backend pg_get_ruledef gives CREATE only + wxT("\n"); if (!GetEnabled()) { sql += wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" ") + wxT("DISABLE RULE ") + GetQuotedIdentifier() + wxT(";\n"); } if (!GetComment().IsEmpty()) sql += wxT("COMMENT ON RULE ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedFullTable() + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n"); } return sql; }
wxString pgGroup::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Group: ") + GetName() + wxT("\n\n") + wxT("DROP GROUP ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE Group ") + GetQuotedIdentifier() + wxT("\n WITH SYSID ") + NumToStr(groupId) + wxT("\n USER ") + quotedMembers + wxT(";\n"); } return sql; }
wxString pgCheck::GetConstraint() { sql = GetQuotedIdentifier() + wxT(" CHECK "); sql += wxT("(") + GetDefinition() + wxT(")"); if (GetDatabase()->BackendMinimumVersion(9, 2) && GetNoInherit()) sql += wxT(" NO INHERIT"); if (GetDatabase()->BackendMinimumVersion(9, 2) && !GetValid()) sql += wxT(" NOT VALID"); return sql; }
wxString pgUser::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- User: "******"\n\n") + wxT("-- DROP USER ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE USER ") + GetQuotedIdentifier() + wxT("\n WITH SYSID ") + NumToStr(userId); if (GetPassword() != wxT("********")) AppendIfFilled(sql, wxT("\n ENCRYPTED PASSWORD "), qtDbString(GetPassword())); sql += wxT("\n "); if (GetCreateDatabase()) sql += wxT(" CREATEDB"); else sql += wxT(" NOCREATEDB"); if (GetUpdateCatalog()) sql += wxT(" CREATEUSER"); else sql += wxT(" NOCREATEUSER"); if (GetAccountExpires().IsValid()) AppendIfFilled(sql, wxT(" VALID UNTIL "), qtDbString(DateToAnsiStr(GetAccountExpires()))); sql += wxT(";\n"); size_t index; for (index = 0 ; index < configList.GetCount() ; index++) { if (configList.Item(index).BeforeFirst('=') != wxT("search_path") && configList.Item(index).BeforeFirst('=') != wxT("temp_tablespaces")) sql += wxT("ALTER USER ") + GetQuotedIdentifier() + wxT(" SET ") + configList.Item(index).BeforeFirst('=') + wxT("='") + configList.Item(index).AfterFirst('=') + wxT("';\n"); else sql += wxT("ALTER USER ") + GetQuotedIdentifier() + wxT(" SET ") + configList.Item(index).BeforeFirst('=') + wxT("=") + configList.Item(index).AfterFirst('=') + wxT(";\n"); } for (index = 0 ; index < groupsIn.GetCount() ; index++) sql += wxT("ALTER GROUP ") + qtIdent(groupsIn.Item(index)) + wxT(" ADD USER ") + GetQuotedIdentifier() + wxT(";\n"); } return sql; }
void pgTrigger::SetEnabled(ctlTree *browser, const bool b) { if (GetQuotedFullTable().Len() > 0 && ((enabled && !b) || (!enabled && b))) { wxString sql = wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" "); if (enabled && !b) sql += wxT("DISABLE"); else if (!enabled && b) sql += wxT("ENABLE"); sql += wxT(" TRIGGER ") + GetQuotedIdentifier(); GetDatabase()->ExecuteVoid(sql); } enabled = b; UpdateIcon(browser); }
bool pgDatabase::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { if (useServerConnection) { wxMessageDialog(frame, _("Maintenance database can't be dropped."), _("Dropping database not allowed"), wxICON_EXCLAMATION | wxOK).ShowModal(); return false; } Disconnect(); bool done = server->ExecuteVoid(wxT("DROP DATABASE ") + GetQuotedIdentifier() + wxT(";")); if (!done) Connect(); return done; }
// Get a word token bool SqlParser::GetWordToken(Token *token) { if(token == NULL) return false; int len = 0; const char *cur = _next_start; // Check for a sign for numbers in the first position (sign can go before variable name -num i.e) if(_remain_size > 1 && (*cur == '+' || *cur == '-') /*&& cur[1] >= '0' && cur[1] <= '9'*/ && // Skip comment -- cur[1] != '-') { char sign = *cur; _remain_size--; len++; cur++; // Allow spaces follow the sign while(sign == '-' && _remain_size > 1 && *cur == ' ') { _remain_size--; len++; cur++; } } // Identifiers starts as a word but then there is quoted part SCHEMA."TABLE".COL i.e. bool partially_quoted_identifier = false; // Calculate the length while(_remain_size > 0) { // Check for a comment if(len == 0 && ParseComment() == true) { cur = _next_start; continue; } // Check whether we meet a special character allowed in identifiers if(strchr(g_symbols, *cur) != NULL) { // @variable in SQL Server and MySQL, :new in Oracle trigger, #temp table name in SQL Server // * meaning all columns, - in COBOL identifier, label : label name in DB2 if(*cur != '_' && *cur != '.' && *cur != '@' && *cur != ':' && *cur != '#' && *cur != '*' && *cur != '-' && *cur != '"' && *cur != '[' && *cur != ' ' && *cur != '&') break; // Spaces are allowed between identifier parts: table . name if(*cur == ' ') { int ident_len = 0; for(int i = 0; i < _remain_size - 1; i++) { if(cur[i] == ' ' || cur[i] == '\t' || cur[i] == '\n' || cur[i] == '\r') continue; if(cur[i] == '.') ident_len = i; break; } // Not a multi-part identifier if(len == 0 || ident_len == 0) break; _remain_size -= ident_len; cur += ident_len; len += ident_len; continue; } // * must be after . to not confuse with multiplication operator if(*cur == '*' && (len == 0 || (len > 0 && cur > _start && cur[-1] != '.'))) break; // Check for partially quoted identifier that starts as a word then quoted part follows if(*cur == '"' || *cur == '[') { if(len > 0 && cur > _start && cur[-1] == '.') partially_quoted_identifier = true; break; } if(*cur == ':') { // But := also means assigment in Oracle (space is not allowed between : and =) if((_remain_size > 1 && cur[1] == '=') || // In DB2, Teradata, MySQL : used in label, and label:BEGIN (without spaces) or // label :BEGIN is correct, but :param can be also used in scripts (Source(SQL_DB2, SQL_TERADATA, SQL_MYSQL) == true && IsScope(SQL_SCOPE_SELECT_STMT) == false) || // In Informix, PostgreSQL :: is data type cast operator (_remain_size > 1 && cur[1] == ':') || (cur > _start && cur[-1] == ':')) break; } // : can follow after label in DB2 //if(*cur == ':' && len == 0 && _remain_size > 1 && Str::IsSpace(cur[1]) == true) // break; // & used as parameter marker in scripts i.e. SQL*Plus, must be at the first position if(*cur == '&' && len != 0) break; // Allow - in COBOL only if(*cur == '-' && _source_app != APP_COBOL && _level != LEVEL_APP) break; bool right = true; // @ must not be followed by a blank or delimiter if(*cur == '@') { // Remain size not decremented yet if(_remain_size == 1 || (_remain_size > 1 && (cur[1] == ' ' || cur[1] == '\r' || cur[1] == '\n' || cur[1] == '\t'))) right = false; } else // . is the statement delimiter in COBOL if(_source_app == APP_COBOL && _level == LEVEL_APP && *cur == '.') right = false; if(right == false) break; } _remain_size--; cur++; len++; } if(partially_quoted_identifier == true) { _remain_size += len; GetQuotedIdentifier(token, true); } else if(len > 0) { // If a single special character was selected in the right position, but no more characters followed // do not return as word if(len == 1 && (strchr(g_symbols, *_next_start) != NULL || // Also skip N'literal' in SQL Server (*_next_start == 'N' && _remain_size > 1 && *cur == '\''))) { _remain_size++; return false; } token->type = TOKEN_WORD; token->chr = 0; token->wchr = 0; token->str = _next_start; token->wstr = 0; token->len = len; token->remain_size = _remain_size; token->next_start = _next_start + len; _tokens.Add(token); _next_start = cur; } return (len > 0) ? true : false; }
wxString pgRole::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Role: ") + GetName() + wxT("\n\n") + wxT("-- DROP ROLE ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE ROLE ") + GetQuotedIdentifier(); if (GetCanLogin()) { sql += wxT(" LOGIN"); if (GetPassword() != wxT("********") && !GetPassword().IsEmpty()) AppendIfFilled(sql, wxT("\n ENCRYPTED PASSWORD "), qtDbString(GetPassword())); } sql += wxT("\n "); if (this->GetSuperuser()) sql += wxT(" SUPERUSER"); else sql += wxT(" NOSUPERUSER"); if (GetInherits()) sql += wxT(" INHERIT"); else sql += wxT(" NOINHERIT"); if (GetCreateDatabase()) sql += wxT(" CREATEDB"); else sql += wxT(" NOCREATEDB"); if (GetCreateRole()) sql += wxT(" CREATEROLE"); else sql += wxT(" NOCREATEROLE"); if (server->GetConnection()->BackendMinimumVersion(9, 1)) { if (GetReplication()) sql += wxT(" REPLICATION"); else sql += wxT(" NOREPLICATION"); } if (GetConnectionLimit() > 0) sql += wxT(" CONNECTION LIMIT ") + NumToStr(GetConnectionLimit()); if (GetAccountExpires().IsValid()) AppendIfFilled(sql, wxT(" VALID UNTIL "), qtDbString(DateToAnsiStr(GetAccountExpires()))); if (GetRolQueueName().Length() > 0) AppendIfFilled(sql, wxT(" RESOURCE QUEUE "), GetRolQueueName()); sql +=wxT(";\n"); if (this->GetSuperuser() && !GetUpdateCatalog()) sql += wxT("UPDATE pg_authid SET rolcatupdate=false WHERE rolname=") + qtDbString(GetIdentifier()) + wxT(";\n"); size_t index; for (index=0 ; index < configList.GetCount() ; index++) { if (configList.Item(index).BeforeFirst('=') != wxT("search_path") && configList.Item(index).BeforeFirst('=') != wxT("temp_tablespaces")) sql += wxT("ALTER ROLE ") + GetQuotedIdentifier() + wxT(" SET ") + configList.Item(index).BeforeFirst('=') + wxT("='") + configList.Item(index).AfterFirst('=') + wxT("';\n"); else sql += wxT("ALTER ROLE ") + GetQuotedIdentifier() + wxT(" SET ") + configList.Item(index).BeforeFirst('=') + wxT("=") + configList.Item(index).AfterFirst('=') + wxT(";\n"); } for (index=0 ; index < rolesIn.GetCount() ; index++) { wxString role=rolesIn.Item(index); bool admin=false; if (role.Right(PGROLE_ADMINOPTION_LEN) == PGROLE_ADMINOPTION) { admin=true; role=role.Left(role.Length()-PGROLE_ADMINOPTION_LEN); } sql += wxT("GRANT ") + qtIdent(role) + wxT(" TO ") + GetQuotedIdentifier(); if (admin) sql += wxT(" WITH ADMIN OPTION"); sql += wxT(";\n"); } if (!GetComment().IsNull()) { sql += wxT("COMMENT ON ROLE ") + GetQuotedFullIdentifier() + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n"); } } return sql; }
bool edbSynonym::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { wxString sql = wxT("DROP PUBLIC SYNONYM ") + GetQuotedIdentifier(); return GetDatabase()->ExecuteVoid(sql); }
wxString pgTrigger::GetSql(ctlTree *browser) { if (sql.IsNull() && (this->triggerFunction || GetLanguage() == wxT("edbspl"))) { sql = wxT("-- Trigger: ") + GetName() + wxT(" on ") + GetQuotedFullTable() + wxT("\n\n") + wxT("-- DROP TRIGGER ") + qtIdent(GetName()) + wxT(" ON ") + GetQuotedFullTable() + wxT(";\n\n"); if (GetLanguage() == wxT("edbspl")) sql += wxT("CREATE OR REPLACE TRIGGER "); else if (GetConnection()->BackendMinimumVersion(8, 2) && GetIsConstraint()) sql += wxT("CREATE CONSTRAINT TRIGGER "); else sql += wxT("CREATE TRIGGER "); sql += qtIdent(GetName()) + wxT("\n ") + GetFireWhen() + wxT(" ") + GetEvent(); sql += wxT("\n ON ") + GetQuotedFullTable(); if (GetDeferrable()) { sql += wxT("\n DEFERRABLE INITIALLY "); if (GetDeferred()) sql += wxT("DEFERRED"); else sql += wxT("IMMEDIATE"); } sql += wxT("\n FOR EACH ") + GetForEach(); if (GetConnection()->BackendMinimumVersion(8, 5) && !GetWhen().IsEmpty()) sql += wxT("\n WHEN (") + GetWhen() + wxT(")"); if (GetLanguage() == wxT("edbspl")) { sql += wxT("\n") + GetSource(); if (!sql.Trim().EndsWith(wxT(";"))) sql = sql.Trim() + wxT(";"); sql += wxT("\n"); } else { sql += wxT("\n EXECUTE PROCEDURE ") + triggerFunction->GetQuotedFullIdentifier() + wxT("(") + GetArguments() + wxT(")") + wxT(";\n"); } if (!GetEnabled()) { sql += wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" ") + wxT("DISABLE TRIGGER ") + GetQuotedIdentifier() + wxT(";\n"); } if (!GetComment().IsEmpty()) sql += wxT("COMMENT ON TRIGGER ") + GetQuotedIdentifier() + wxT(" ON ") + GetQuotedFullTable() + wxT(" IS ") + qtDbString(GetComment()) + wxT(";\n"); } return sql; }
wxString pgDatabase::GetSql(ctlTree *browser) { if (sql.IsEmpty()) { // If we can't connect to this database, use the maintenance DB pgConn *myConn = GetConnection(); if (!myConn) myConn = GetServer()->GetConnection(); sql = wxT("-- Database: ") + GetQuotedFullIdentifier() + wxT("\n\n") + wxT("-- DROP DATABASE ") + GetQuotedIdentifier() + wxT(";") + wxT("\n\nCREATE DATABASE ") + GetQuotedIdentifier() + wxT("\n WITH OWNER = ") + qtIdent(GetOwner()) + wxT("\n ENCODING = ") + qtDbString(GetEncoding()); if (!GetTablespace().IsEmpty()) sql += wxT("\n TABLESPACE = ") + qtIdent(GetTablespace()); if (myConn && myConn->BackendMinimumVersion(8, 4)) { sql += wxT("\n LC_COLLATE = ") + qtDbString(GetCollate()); sql += wxT("\n LC_CTYPE = ") + qtDbString(GetCType()); } if (myConn && myConn->BackendMinimumVersion(8, 1)) { sql += wxT("\n CONNECTION LIMIT = "); sql << GetConnectionLimit(); } sql += wxT(";\n"); size_t i; wxString username; wxString varname; wxString varvalue; for (i = 0 ; i < variables.GetCount() ; i++) { wxStringTokenizer tkz(variables.Item(i), wxT("=")); while (tkz.HasMoreTokens()) { username = tkz.GetNextToken(); varname = tkz.GetNextToken(); varvalue = tkz.GetNextToken(); } if (username.Length() == 0) { sql += wxT("ALTER DATABASE ") + GetQuotedFullIdentifier(); } else { sql += wxT("ALTER ROLE ") + username + wxT(" IN DATABASE ") + GetQuotedFullIdentifier(); } if (varname != wxT("search_path") && varname != wxT("temp_tablespaces")) sql += wxT(" SET ") + varname + wxT("='") + varvalue + wxT("';\n"); else sql += wxT(" SET ") + varname + wxT("=") + varvalue + wxT(";\n"); } if (myConn) { if (!myConn->BackendMinimumVersion(8, 2)) sql += GetGrant(wxT("CT")); else sql += GetGrant(wxT("CTc")); } sql += wxT("\n") + pgDatabase::GetDefaultPrivileges('r', m_defPrivsOnTables, wxT("")); sql += pgDatabase::GetDefaultPrivileges('S', m_defPrivsOnSeqs, wxT("")); sql += pgDatabase::GetDefaultPrivileges('f', m_defPrivsOnFuncs, wxT("")); sql += GetCommentSql(); if (myConn->BackendMinimumVersion(9, 2)) sql += GetSeqLabelsSql(); } return sql; }