1
1
//////////////////////////////////////////////////////////////////////////
3
3
// pgAdmin III - PostgreSQL Tools
4
// RCS-ID: $Id: dlgStep.cpp 6930 2008-01-02 00:10:01Z dpage $
5
// Copyright (C) 2002 - 2008, The pgAdmin Development Team
6
// This software is released under the Artistic Licence
4
// RCS-ID: $Id: dlgStep.cpp 7915 2009-06-11 09:40:07Z dpage $
5
// Copyright (C) 2002 - 2009, The pgAdmin Development Team
6
// This software is released under the BSD Licence
8
8
// dlgStep.cpp - PostgreSQL Step Property
14
14
#include "utils/misc.h"
15
15
#include "agent/dlgStep.h"
16
16
#include "agent/pgaStep.h"
17
#include "dlg/dlgSelectDatabase.h"
18
#include "schema/pgTable.h"
19
21
// pointer to controls
20
#define txtID CTRL_TEXT("txtID")
22
#define txtID CTRL_TEXT("txtID")
21
23
#define chkEnabled CTRL_CHECKBOX("chkEnabled")
22
#define cbDatabase CTRL_COMBOBOX("cbDatabase")
23
24
#define rbxKind CTRL_RADIOBOX("rbxKind")
24
25
#define rbxOnError CTRL_RADIOBOX("rbxOnError")
25
26
#define pnlDefinition CTRL_PANEL("pnlDefinition")
26
27
#define txtSqlBox CTRL_TEXT("txtSqlBox")
28
#define cbDatabase CTRL_COMBOBOX2("cbDatabase")
29
#define txtConnStr CTRL_TEXT("txtConnStr")
30
#define btnSelDatabase CTRL_BUTTON("btnSelDatabase")
31
#define rbRemoteConn CTRL_RADIOBUTTON("rbRemoteConn")
32
#define rbLocalConn CTRL_RADIOBUTTON("rbLocalConn")
28
34
#define CTL_SQLBOX 188
32
38
EVT_COMBOBOX(XRCID("cbDatabase"), dlgProperty::OnChange)
33
39
EVT_RADIOBOX(XRCID("rbxKind"), dlgProperty::OnChange)
34
40
EVT_RADIOBOX(XRCID("rbxOnError"), dlgProperty::OnChange)
41
EVT_TEXT(XRCID("txtConnStr"), dlgProperty::OnChange)
35
42
EVT_STC_MODIFIED(CTL_SQLBOX, dlgProperty::OnChangeStc)
43
EVT_BUTTON(XRCID("btnSelDatabase"), dlgStep::OnSelectDatabase)
44
EVT_RADIOBUTTON(XRCID("rbRemoteConn"), dlgStep::OnSelRemoteConn)
45
EVT_RADIOBUTTON(XRCID("rbLocalConn"), dlgStep::OnSelLocalConn)
74
85
int dlgStep::Go(bool modal)
89
hasConnStrSupport = connection->TableHasColumn(wxT("pgagent"), wxT("pga_jobstep"), wxT("jstconnstr"));
76
90
cbDatabase->Append(wxT(" "));
77
91
cbDatabase->SetSelection(0);
93
recId = step->GetRecId();
94
txtID->SetValue(NumToStr(recId));
95
if (step->GetDbname().IsEmpty())
96
cbDatabase->SetSelection(0);
107
recId = step->GetRecId();
108
txtID->SetValue(NumToStr(recId));
110
if (step->HasConnectionString())
112
rbRemoteConn->SetValue(true);
113
txtConnStr->Enable(true);
114
txtConnStr->ChangeValue(step->GetConnStr());
115
btnSelDatabase->Enable(true);
116
cbDatabase->Enable(false);
98
cbDatabase->SetValue(step->GetDbname());
120
rbLocalConn->SetValue(true);
121
if (step->GetDbname().IsEmpty())
122
cbDatabase->SetSelection(0);
124
cbDatabase->SetValue(step->GetDbname());
99
127
rbxKind->SetSelection(wxString(wxT("sb")).Find(step->GetKindChar()));
100
128
rbxOnError->SetSelection(wxString(wxT("fsi")).Find(step->GetOnErrorChar()));
101
129
sqlBox->SetText(step->GetCode());
136
rbLocalConn->SetValue(true);
137
cbDatabase->Enable(true);
138
btnSelDatabase->Enable(false);
139
txtConnStr->Enable(false);
140
if (!hasConnStrSupport)
141
rbLocalConn->Enable(false);
110
return dlgProperty::Go(modal);
144
returncode = dlgProperty::Go(modal);
146
SetSqlReadOnly(true);
129
167
enable = name != step->GetName()
130
168
|| chkEnabled->GetValue() != step->GetEnabled()
131
|| cbDatabase->GetValue().Trim() != step->GetDbname()
132
169
|| rbxKind->GetSelection() != wxString(wxT("sb")).Find(step->GetKindChar())
133
170
|| rbxOnError->GetSelection() != wxString(wxT("fsi")).Find(step->GetOnErrorChar())
134
171
|| txtComment->GetValue() != step->GetComment()
135
172
|| sqlBox->GetText() != step->GetCode();
174
if (!enable && rbxKind->GetSelection() == 0)
176
if (hasConnStrSupport)
178
if (step->HasConnectionString())
180
if (rbRemoteConn->GetValue())
181
enable = txtConnStr->GetValue().Trim() != step->GetConnStr();
187
if (rbRemoteConn->GetValue())
190
enable = cbDatabase->GetValue().Trim() != step->GetDbname();
195
enable = cbDatabase->GetValue().Trim() != step->GetDbname();
143
statusBar->SetStatusText(wxEmptyString);
205
statusBar->SetStatusText(wxEmptyString);
145
207
CheckValid(enable, !name.IsEmpty(), _("Please specify name."));
146
208
CheckValid(enable, sqlBox->GetLength() > 0, _("Please specify code to execute."));
148
210
// Disable/enable the database combo
149
211
if (rbxKind->GetSelection() == 1)
151
cbDatabase->SetSelection(0);
213
rbRemoteConn->Enable(false);
214
rbLocalConn->Enable(false);
215
// I don't see any reason to make
216
// the database combobox selection to 0
217
//cbDatabase->SetSelection(0);
218
txtConnStr->Enable(false);
219
btnSelDatabase->Enable(false);
152
220
cbDatabase->Enable(false);
156
cbDatabase->Enable(true);
157
CheckValid(enable, !cbDatabase->GetValue().Trim().IsEmpty(), _("Please select a database."));
224
if (hasConnStrSupport)
226
rbRemoteConn->Enable(true);
227
rbLocalConn->Enable(true);
228
if (rbRemoteConn->GetValue())
230
wxString validConnStr;
232
btnSelDatabase->Enable(true);
233
txtConnStr->Enable(true);
234
cbDatabase->Enable(false);
235
CheckValid(enable, !txtConnStr->GetValue().Trim().IsEmpty(), _("Please select a connection string."));
236
CheckValid(enable, dlgSelectDatabase::getValidConnectionString(txtConnStr->GetValue().Trim(), validConnStr), _("Please enter a valid connection string"));
240
cbDatabase->Enable(true);
241
btnSelDatabase->Enable(false);
242
txtConnStr->Enable(false);
243
CheckValid(enable, !cbDatabase->GetValue().Trim().IsEmpty(), _("Please select a database."));
248
cbDatabase->Enable(true);
249
// Make sure both radio buttons are disabled
250
rbRemoteConn->Enable(false);
251
rbLocalConn->Enable(false);
252
CheckValid(enable, !cbDatabase->GetValue().Trim().IsEmpty(), _("Please select a database."));
160
256
EnableOK(enable);
178
274
wxString name=GetName();
179
275
wxString kind = wxT("sb")[rbxKind->GetSelection()];
180
276
wxString onerror = wxT("fsi")[rbxOnError->GetSelection()];
277
wxString db, connstr;
182
278
wxString jstjobid;
184
280
jstjobid = NumToStr(jobId);
186
282
jstjobid = wxT("<JobId>");
188
db = qtDbString(cbDatabase->GetValue().Trim());
190
sql = wxT("INSERT INTO pgagent.pga_jobstep (jstid, jstjobid, jstname, jstdesc, jstenabled, jstkind, jstonerror, jstcode, jstdbname)\n")
191
wxT("SELECT <StpId>, ") + jstjobid + wxT(", ") + qtDbString(name) + wxT(", ") + qtDbString(txtComment->GetValue()) + wxT(", ")
283
// SQL script expected
284
if (rbxKind->GetSelection() == 0)
286
if (hasConnStrSupport && rbRemoteConn->GetValue())
288
connstr = qtDbString(txtConnStr->GetValue().Trim());
293
db = qtDbString(cbDatabase->GetValue().Trim());
303
sql = wxT("INSERT INTO pgagent.pga_jobstep (jstid, jstjobid, jstname, jstdesc, jstenabled, jstkind, jstonerror, jstcode, jstdbname");
304
if (hasConnStrSupport)
305
sql += wxT(", jstconnstr");
307
wxT("SELECT <StpId>, ") + jstjobid + wxT(", ") + qtDbString(name) + wxT(", ") + qtDbString(txtComment->GetValue()) + wxT(", ")
192
308
+ BoolToStr(chkEnabled->GetValue()) + wxT(", ") + qtDbString(kind) + wxT(", ")
193
+ qtDbString(onerror) + wxT(", ") + qtDbString(sqlBox->GetText()) + wxT(", ") + db + wxT(";\n");
309
+ qtDbString(onerror) + wxT(", ") + qtDbString(sqlBox->GetText()) + wxT(", ") + db;
310
if (hasConnStrSupport)
312
sql += wxT(", ") + connstr;
219
340
vars.Append(wxT(", "));
220
341
vars.Append(wxT("jstenabled=") + BoolToStr(chkEnabled->GetValue()));
222
if (cbDatabase->GetValue().Trim() != step->GetDbname())
343
if (hasConnStrSupport && kind == wxT("s"))
225
vars.Append(wxT(", "));
227
if (!cbDatabase->GetCurrentSelection())
228
vars.Append(wxT("jstdbname=''"));
345
if (rbRemoteConn->GetValue())
347
if (step->HasConnectionString())
349
if (txtConnStr->GetValue().Trim() != step->GetConnStr())
352
vars.Append(wxT(", "));
353
vars.Append(wxT("jstconnstr=") + qtDbString(txtConnStr->GetValue().Trim()));
359
vars.Append(wxT(", "));
360
vars.Append(wxT("jstconnstr=") + qtDbString(txtConnStr->GetValue().Trim()) + wxT(", "));
361
vars.Append(wxT("jstdbname=''"));
230
vars.Append(wxT("jstdbname=") + qtDbString(cbDatabase->GetValue()));
232
if (rbxKind->GetSelection() != wxString(wxT("sb")).Find(step->GetKindChar()))
234
wxString kind = wxT("sb")[rbxKind->GetSelection()];
366
if (step->HasConnectionString())
369
vars.Append(wxT(", "));
370
vars.Append(wxT("jstdbname=") + qtDbString(cbDatabase->GetValue().Trim()) + wxT(", "));
371
vars.Append(wxT("jstconnstr=''"));
375
if (cbDatabase->GetValue().Trim() != step->GetDbname())
378
vars.Append(wxT(", "));
379
vars.Append(wxT("jstdbname=") + qtDbString(cbDatabase->GetValue().Trim()));
384
else if (kind == wxT("s"))
386
if (cbDatabase->GetValue().Trim() != step->GetDbname())
389
vars.Append(wxT(", "));
390
vars.Append(wxT("jstdbname=") + qtDbString(cbDatabase->GetValue().Trim()));
396
vars.Append(wxT(", "));
397
vars.Append(wxT("jstdbname=''"));
398
if (hasConnStrSupport)
399
vars.Append(wxT(", jstconnstr=''"));
401
if (rbxKind->GetSelection() != kind)
235
403
if (!vars.IsEmpty())
236
404
vars.Append(wxT(", "));
237
405
vars.Append(wxT("jstkind=") + qtDbString(kind));
450
void dlgStep::OnSelectDatabase(wxCommandEvent &ev)
452
dlgSelectDatabase dlgSD(this, wxID_ANY);
453
if (dlgSD.ShowModal() == wxID_OK)
455
wxString strConnStr = dlgSD.getConnInfo();
456
if (!strConnStr.IsEmpty())
457
txtConnStr->SetValue(strConnStr);
461
void dlgStep::OnSelRemoteConn(wxCommandEvent& ev)
463
if (rbRemoteConn->GetValue())
465
cbDatabase->Enable(false);
466
btnSelDatabase->Enable(true);
467
txtConnStr->Enable(true);
469
dlgProperty::OnChange(ev);
472
void dlgStep::OnSelLocalConn(wxCommandEvent& ev)
474
if (rbLocalConn->GetValue())
476
cbDatabase->Enable(true);
477
btnSelDatabase->Enable(false);
478
txtConnStr->Enable(false);
480
dlgProperty::OnChange(ev);