File: dlgTextSearchTemplate.cpp

package info (click to toggle)
pgadmin3 1.20.0~beta2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 73,704 kB
  • ctags: 18,591
  • sloc: cpp: 193,786; ansic: 18,736; sh: 5,154; pascal: 1,120; yacc: 927; makefile: 516; lex: 421; xml: 126; perl: 40
file content (190 lines) | stat: -rw-r--r-- 4,811 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// dlgTextSearchTemplate.cpp - PostgreSQL Text Search Template Property
//
//////////////////////////////////////////////////////////////////////////

// wxWindows headers
#include <wx/wx.h>

// App headers
#include "pgAdmin3.h"
#include "utils/misc.h"
#include "utils/pgDefs.h"

#include "dlg/dlgTextSearchTemplate.h"
#include "schema/pgSchema.h"
#include "schema/pgTextSearchTemplate.h"
#include "schema/pgDatatype.h"


// pointer to controls
#define cbInit              CTRL_COMBOBOX2("cbInit")
#define cbLexize            CTRL_COMBOBOX2("cbLexize")


BEGIN_EVENT_TABLE(dlgTextSearchTemplate, dlgTypeProperty)
	EVT_TEXT(XRCID("cbInit"),                   dlgTextSearchTemplate::OnChange)
	EVT_COMBOBOX(XRCID("cbInit"),               dlgTextSearchTemplate::OnChange)
	EVT_TEXT(XRCID("cbLexize"),                 dlgTextSearchTemplate::OnChange)
	EVT_COMBOBOX(XRCID("cbLexize"),             dlgTextSearchTemplate::OnChange)
END_EVENT_TABLE();



dlgProperty *pgTextSearchTemplateFactory::CreateDialog(frmMain *frame, pgObject *node, pgObject *parent)
{
	return new dlgTextSearchTemplate(this, frame, (pgTextSearchTemplate *)node, (pgSchema *)parent);
}

dlgTextSearchTemplate::dlgTextSearchTemplate(pgaFactory *f, frmMain *frame, pgTextSearchTemplate *node, pgSchema *sch)
	: dlgTypeProperty(f, frame, wxT("dlgTextSearchTemplate"))
{
	schema = sch;
	tmpl = node;
}


pgObject *dlgTextSearchTemplate::GetObject()
{
	return tmpl;
}


int dlgTextSearchTemplate::Go(bool modal)
{
	wxString qry;
	pgSet *set;

	cbInit->Append(wxT(""));

	qry = wxT("SELECT proname, nspname\n")
	      wxT("  FROM pg_proc\n")
	      wxT("  JOIN pg_namespace n ON n.oid=pronamespace\n")
	      wxT("  WHERE prorettype=2281 and proargtypes='2281'\n")
	      wxT("  ORDER BY proname\n");

	set = connection->ExecuteSet(qry);
	if (set)
	{
		while (!set->Eof())
		{
			wxString procname = database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + set->GetVal(wxT("proname"));
			cbInit->Append(procname);
			set->MoveNext();
		}
		delete set;
	}

	qry = wxT("SELECT proname, nspname\n")
	      wxT("  FROM pg_proc\n")
	      wxT("  JOIN pg_namespace n ON n.oid=pronamespace\n")
	      wxT("  WHERE prorettype=2281 and proargtypes='2281 2281 2281 2281'\n")
	      wxT("  ORDER BY proname\n");

	set = connection->ExecuteSet(qry);
	if (set)
	{
		while (!set->Eof())
		{
			wxString procname = database->GetSchemaPrefix(set->GetVal(wxT("nspname"))) + set->GetVal(wxT("proname"));
			cbLexize->Append(procname);
			set->MoveNext();
		}
		delete set;
	}

	if (tmpl)
	{
		// edit mode
		cbSchema->Enable(connection->BackendMinimumVersion(9, 1));
		cbInit->SetValue(tmpl->GetInit());
		cbInit->Disable();
		cbLexize->SetValue(tmpl->GetLexize());
		cbLexize->Disable();
	}
	else
	{
		// create mode
	}

	cbOwner->Disable();

	return dlgProperty::Go(modal);
}


pgObject *dlgTextSearchTemplate::CreateObject(pgCollection *collection)
{
	pgObject *obj = textSearchTemplateFactory.CreateObjects(collection, 0,
	                wxT("\n   AND tmpl.tmplname=") + qtDbString(GetName()) +
	                wxT("\n   AND tmpl.tmplnamespace=") + schema->GetOidStr());

	return obj;
}


void dlgTextSearchTemplate::CheckChange()
{
	if (tmpl)
	{
		EnableOK(txtName->GetValue() != tmpl->GetName()
		         || cbSchema->GetValue() != tmpl->GetSchema()->GetName()
		         || txtComment->GetValue() != tmpl->GetComment());
	}
	else
	{
		wxString name = GetName();
		bool enable = true;
		CheckValid(enable, !name.IsEmpty(), _("Please specify name."));
		CheckValid(enable, cbLexize->GetGuessedSelection() > 0 , _("Please select a lexize function."));

		EnableOK(enable);
	}
}


void dlgTextSearchTemplate::OnChange(wxCommandEvent &ev)
{
	CheckChange();
}


wxString dlgTextSearchTemplate::GetSql()
{
	wxString sql;
	wxString objname;

	if (tmpl)
	{
		// edit mode
		objname = schema->GetQuotedPrefix() + qtIdent(GetName());
		AppendNameChange(sql, wxT("TEXT SEARCH TEMPLATE ") + tmpl->GetQuotedFullIdentifier());
		AppendSchemaChange(sql, wxT("TEXT SEARCH TEMPLATE ") + objname);
	}
	else
	{
		// create mode
		objname = qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName());
		sql = wxT("CREATE TEXT SEARCH TEMPLATE ")
		      + objname
		      + wxT(" (");

		AppendIfFilled(sql, wxT("\n   INIT="), cbInit->GetValue());
		if (cbInit->GetValue().Length() > 0)
			sql += wxT(",");
		AppendIfFilled(sql, wxT("\n   LEXIZE="), cbLexize->GetValue());

		sql += wxT("\n);\n");

	}

	AppendComment(sql, wxT("TEXT SEARCH TEMPLATE ") + qtIdent(cbSchema->GetValue()) + wxT(".") + qtIdent(GetName()), tmpl);

	return sql;
}