1 //////////////////////////////////////////////////////////////////////////
2 //
3 // pgAdmin III - PostgreSQL Tools
4 //
5 // Copyright (C) 2002 - 2016, The pgAdmin Development Team
6 // This software is released under the PostgreSQL Licence
7 //
8 // dlgTextSearchTemplate.cpp - PostgreSQL Text Search Template Property
9 //
10 //////////////////////////////////////////////////////////////////////////
11
12 // wxWindows headers
13 #include <wx/wx.h>
14
15 // App headers
16 #include "pgAdmin3.h"
17 #include "utils/misc.h"
18 #include "utils/pgDefs.h"
19
20 #include "dlg/dlgTextSearchTemplate.h"
21 #include "schema/pgSchema.h"
22 #include "schema/pgTextSearchTemplate.h"
23 #include "schema/pgDatatype.h"
24
25
26 // pointer to controls
27 #define cbInit CTRL_COMBOBOX2("cbInit")
28 #define cbLexize CTRL_COMBOBOX2("cbLexize")
29
30
31 BEGIN_EVENT_TABLE(dlgTextSearchTemplate, dlgTypeProperty)
32 EVT_TEXT(XRCID("cbInit"), dlgTextSearchTemplate::OnChange)
33 EVT_COMBOBOX(XRCID("cbInit"), dlgTextSearchTemplate::OnChange)
34 EVT_TEXT(XRCID("cbLexize"), dlgTextSearchTemplate::OnChange)
35 EVT_COMBOBOX(XRCID("cbLexize"), dlgTextSearchTemplate::OnChange)
36 END_EVENT_TABLE();
37
38
39
CreateDialog(frmMain * frame,pgObject * node,pgObject * parent)40 dlgProperty *pgTextSearchTemplateFactory::CreateDialog(frmMain *frame, pgObject *node, pgObject *parent)
41 {
42 return new dlgTextSearchTemplate(this, frame, (pgTextSearchTemplate *)node, (pgSchema *)parent);
43 }
44
dlgTextSearchTemplate(pgaFactory * f,frmMain * frame,pgTextSearchTemplate * node,pgSchema * sch)45 dlgTextSearchTemplate::dlgTextSearchTemplate(pgaFactory *f, frmMain *frame, pgTextSearchTemplate *node, pgSchema *sch)
46 : dlgTypeProperty(f, frame, wxT("dlgTextSearchTemplate"))
47 {
48 schema = sch;
49 tmpl = node;
50 }
51
52
GetObject()53 pgObject *dlgTextSearchTemplate::GetObject()
54 {
55 return tmpl;
56 }
57
58
Go(bool modal)59 int dlgTextSearchTemplate::Go(bool modal)
60 {
61 wxString qry;
62 pgSet *set;
63
64 cbInit->Append(wxT(""));
65
66 qry = wxT("SELECT proname, nspname\n")
67 wxT(" FROM pg_proc\n")
68 wxT(" JOIN pg_namespace n ON n.oid=pronamespace\n")
69 wxT(" WHERE prorettype=2281 and proargtypes='2281'\n")
70 wxT(" ORDER BY proname\n");
71
72 set = connection->ExecuteSet(qry);
73 if (set)
74 {
75 while (!set->Eof())
76 {
77 wxString procname = database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + set->GetVal(wxT("proname"));
78 cbInit->Append(procname);
79 set->MoveNext();
80 }
81 delete set;
82 }
83
84 qry = wxT("SELECT proname, nspname\n")
85 wxT(" FROM pg_proc\n")
86 wxT(" JOIN pg_namespace n ON n.oid=pronamespace\n")
87 wxT(" WHERE prorettype=2281 and proargtypes='2281 2281 2281 2281'\n")
88 wxT(" ORDER BY proname\n");
89
90 set = connection->ExecuteSet(qry);
91 if (set)
92 {
93 while (!set->Eof())
94 {
95 wxString procname = database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + set->GetVal(wxT("proname"));
96 cbLexize->Append(procname);
97 set->MoveNext();
98 }
99 delete set;
100 }
101
102 if (tmpl)
103 {
104 // edit mode
105 cbSchema->Enable(connection->BackendMinimumVersion(9, 1));
106 cbInit->SetValue(tmpl->GetInit());
107 cbInit->Disable();
108 cbLexize->SetValue(tmpl->GetLexize());
109 cbLexize->Disable();
110 }
111 else
112 {
113 // create mode
114 }
115
116 cbOwner->Disable();
117
118 return dlgProperty::Go(modal);
119 }
120
121
CreateObject(pgCollection * collection)122 pgObject *dlgTextSearchTemplate::CreateObject(pgCollection *collection)
123 {
124 pgObject *obj = textSearchTemplateFactory.CreateObjects(collection, 0,
125 wxT("\n AND tmpl.tmplname=") + qtDbString(GetName()) +
126 wxT("\n AND tmpl.tmplnamespace=") + schema->GetOidStr());
127
128 return obj;
129 }
130
131
CheckChange()132 void dlgTextSearchTemplate::CheckChange()
133 {
134 if (tmpl)
135 {
136 EnableOK(txtName->GetValue() != tmpl->GetName()
137 || cbSchema->GetValue() != tmpl->GetSchema()->GetName()
138 || txtComment->GetValue() != tmpl->GetComment());
139 }
140 else
141 {
142 wxString name = GetName();
143 bool enable = true;
144 CheckValid(enable, !name.IsEmpty(), _("Please specify name."));
145 CheckValid(enable, cbLexize->GetGuessedSelection() > 0 , _("Please select a lexize function."));
146
147 EnableOK(enable);
148 }
149 }
150
151
OnChange(wxCommandEvent & ev)152 void dlgTextSearchTemplate::OnChange(wxCommandEvent &ev)
153 {
154 CheckChange();
155 }
156
157
GetSql()158 wxString dlgTextSearchTemplate::GetSql()
159 {
160 wxString sql;
161 wxString objname;
162
163 if (tmpl)
164 {
165 // edit mode
166 objname = schema->GetQuotedPrefix() + qtIdent(GetName());
167 AppendNameChange(sql, wxT("TEXT SEARCH TEMPLATE ") + tmpl->GetQuotedFullIdentifier());
168 AppendSchemaChange(sql, wxT("TEXT SEARCH TEMPLATE ") + objname);
169 }
170 else
171 {
172 // create mode
173 objname = qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName());
174 sql = wxT("CREATE TEXT SEARCH TEMPLATE ")
175 + objname
176 + wxT(" (");
177
178 AppendIfFilled(sql, wxT("\n INIT="), cbInit->GetValue());
179 if (cbInit->GetValue().Length() > 0)
180 sql += wxT(",");
181 AppendIfFilled(sql, wxT("\n LEXIZE="), cbLexize->GetValue());
182
183 sql += wxT("\n);\n");
184
185 }
186
187 AppendComment(sql, wxT("TEXT SEARCH TEMPLATE ") + qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName()), tmpl);
188
189 return sql;
190 }
191