def InstancesQuery(parentNode): sql = pgQuery("pg_class rel") sql.AddCol( "rel.oid, relname as name, nspname, ns.oid as nspoid, spcname, pg_get_userbyid(relowner) AS owner, relacl as acl, rel.*" ) if parentNode.GetServer().version < 8.4: sql.AddCol("'t' AS relpersistence") elif parentNode.GetServer().version < 9.1: sql.AddCol( "CASE WHEN relistemp THEN 't' ELSE 'p' END AS relpersistence") else: sql.AddCol("relpersistence") sql.AddCol("description") sql.AddJoin("pg_namespace ns ON ns.oid=rel.relnamespace") sql.AddLeft("pg_tablespace ta ON ta.oid=rel.reltablespace") sql.AddLeft( "pg_description des ON (des.objoid=rel.oid AND des.objsubid=0)") sql.AddLeft("pg_constraint c ON c.conrelid=rel.oid AND c.contype='p'") sql.AddWhere("relkind", 'r') sql.AddWhere("relnamespace", parentNode.parentNode.GetOid()) sql.AddOrder("CASE WHEN nspname='%s' THEN ' ' else nspname END" % "public") sql.AddOrder("relname") return sql
def Delete(self, rows): """ Delete(rows) expects rows in reverse sorted order """ query=pgQuery(self.tableSpecs.tabName, self.tableSpecs.GetCursor()) all=[] for row in rows: wh=[] for colname in self.tableSpecs.keyCols: wh.append("%s=%s" % (quoteIdent(colname), quoteValue(self.rows[row][colname]))) all.append("(%s)" % " AND ".join(wh)) query.AddWhere("\n OR ".join(all)) rc=query.Delete() self.grid.Freeze() self.grid.BeginBatch() for row in rows: self.grid.DeleteRows(row, 1, True) # msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED) self.grid.EndBatch() self.grid.ForceRefresh() self.grid.Thaw() return rc
def Go(self, tableSpecs): self.tableSpecs=tableSpecs dc=self['DisplayCols'] sc=self['SortCols'] for colName in self.tableSpecs.colNames: i=dc.Append(colName) dc.Check(i, True) i=sc.Append(colName) if colName in self.tableSpecs.keyCols: sc.Check(i, True) if self.dialog.querypreset_table: query=pgQuery(self.dialog.querypreset_table, self.dialog.server.GetCursor()) query.AddCol('presetname') query.AddWhere('dbname', self.tableSpecs.dbName) query.AddWhere('tabname', self.tableSpecs.tabName) query.AddOrder('presetname') res=query.Select() fp=self['FilterPreset'] for row in res: fp.Append(row[0]) default=fp.FindString('default') if id >= 0: fp.SetSelection(default) self.OnPresetSelect(None)
def InstancesQuery(parentNode): sql=pgQuery("pg_namespace nsp") sql.AddCol("nsp.oid, nspacl, nspname as name, pg_get_userbyid(nspowner) AS owner, description") sql.AddLeft("pg_description des ON des.objoid=nsp.oid") sql.AddWhere("(nsp.oid=2200 OR nsp.oid > %d)" % parentNode.GetServer().GetLastSysOid()) sql.AddOrder("nspname") return sql
def Delete(self, rows): """ Delete(rows) expects rows in reverse sorted order """ query = pgQuery(self.tableSpecs.tabName, self.tableSpecs.GetCursor()) all = [] for row in rows: wh = [] for colname in self.tableSpecs.keyCols: wh.append( "%s=%s" % (quoteIdent(colname), quoteValue(self.rows[row][colname]))) all.append("(%s)" % " AND ".join(wh)) query.AddWhere("\n OR ".join(all)) rc = query.Delete() self.grid.Freeze() self.grid.BeginBatch() for row in rows: self.grid.DeleteRows(row, 1, True) # msg=wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED) self.grid.EndBatch() self.grid.ForceRefresh() self.grid.Thaw() return rc
def OnFilterSave(self, evt): preset = self.FilterPreset if self.LimitCheck: limit = self.LimitValue else: limit = None if self.FilterCheck: filter = self.FilterValue.GetText() else: filter = None sort = self["SortCols"].GetCheckedStrings() display = self["DisplayCols"].GetCheckedStrings() sql = self.dialog.editor.GetText() query = pgQuery(self.dialog.querypreset_table, self.dialog.server.GetCursor()) query.AddColVal("querylimit", limit) query.AddColVal("filter", filter) query.AddColVal("sort", unicode(sort)) query.AddColVal("display", unicode(display)) query.AddColVal("sql", sql) fp = self["FilterPreset"] if fp.FindString(preset) < 0: query.AddColVal("dbname", self.tableSpecs.dbName) query.AddColVal("tabname", self.tableSpecs.tabName) query.AddColVal("presetname", preset) query.Insert() fp.Append(preset) else: query.AddWhere("dbname", self.tableSpecs.dbName) query.AddWhere("tabname", self.tableSpecs.tabName) query.AddWhere("presetname", preset) query.Update()
def OnFilterSave(self, evt): preset=self.FilterPreset if self.LimitCheck: limit=self.LimitValue else: limit=None if self.FilterCheck: filter=self.FilterValue.GetText() else: filter=None sort=self['SortCols'].GetCheckedStrings() display=self['DisplayCols'].GetCheckedStrings() sql=self.dialog.editor.GetText() query=pgQuery(self.dialog.querypreset_table, self.dialog.server.GetCursor()) query.AddColVal('querylimit', limit) query.AddColVal('filter', filter) query.AddColVal('sort', unicode(sort)) query.AddColVal('display', unicode(display)) query.AddColVal('sql', sql) fp=self['FilterPreset'] if fp.FindString(preset) < 0: query.AddColVal('dbname', self.tableSpecs.dbName) query.AddColVal('tabname', self.tableSpecs.tabName) query.AddColVal('presetname', preset) query.Insert() fp.Append(preset) else: query.AddWhere('dbname', self.tableSpecs.dbName) query.AddWhere('tabname', self.tableSpecs.tabName) query.AddWhere('presetname', preset) query.Update()
def updateSnippet(self, snippet): query = pgQuery(self.frame.snippet_table, self.server.GetCursor()) query.AddColVal('parent', snippet.parent) query.AddColVal('sort', snippet.sort) query.AddColVal('name', snippet.name) query.AddColVal('snippet', snippet.text) query.AddWhere('id', snippet.id) query.Update()
def __init__(self, parent, tableSpecs): Grid.__init__(self, parent) self.frame = parent self.table = None pt = parent.GetFont().GetPointSize() if wx.Platform != "__WXMSW__": pt *= 0.95 # a little smaller font = wx.Font(pt, wx.FONTFAMILY_TELETYPE, wx.NORMAL, wx.NORMAL) self.SetDefaultCellFont(font) self.Bind(wx.grid.EVT_GRID_COL_SIZE, self.OnChangeColSize) self.tableSpecs = tableSpecs self.lastRow = -1 # self.node=node self.deferredChange = False self.dirty = False self.dataTypes = [] for cd in self.tableSpecs.colSpecs.values(): if cd.category == 'B': cd.type = self.RegisterDataType('bool:Null', None, wx.grid.GRID_VALUE_BOOL) elif cd.category == 'N': if cd.pgtype in ['real', 'double precision']: cd.type = wx.grid.GRID_VALUE_FLOAT elif cd.pgtype in ['numeric']: cd.type = wx.grid.GRID_VALUE_NUMBER else: cd.type = wx.grid.GRID_VALUE_LONG elif cd.category == 'E': cd.type = "ENUM:%s" % cd.pgtype if not cd.notNull: cd.type += ":Null" if cd.type not in self.dataTypes: query = pgQuery("pg_enum", self.tableSpecs.GetCursor()) query.AddCol("enumlabel") if self.tableSpecs.serverVersion > 9.1: query.addOrder("enumsortorder") query.AddWhere('enumtypid', cd.typoid) enum = [] if not cd.notNull: enum.append("") for row in query.Select(): enum.append(row['enumlabel']) editor = wx.grid.GridCellChoiceEditor(enum) self.RegisterDataType(cd.type, wx.grid.GRID_VALUE_CHOICE, editor) else: cd.type = wx.grid.GRID_VALUE_STRING self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell) self.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnEditorShown) self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick) self.Bind(wx.grid.EVT_GRID_LABEL_LEFT_DCLICK, self.OnLabelDclick) self.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick) self.Bind(wx.grid.EVT_GRID_CELL_CHANGED, self.OnCellChanged)
def __init__(self, parent, tableSpecs): Grid.__init__(self, parent) self.frame=parent self.table=None pt=parent.GetFont().GetPointSize() if wx.Platform != "__WXMSW__": pt *= 0.95 # a little smaller font=wx.Font(pt, wx.FONTFAMILY_TELETYPE, wx.NORMAL, wx.NORMAL) self.SetDefaultCellFont(font) self.Bind(wx.grid.EVT_GRID_COL_SIZE, self.OnChangeColSize) self.tableSpecs=tableSpecs self.lastRow=-1 # self.node=node self.deferredChange=False self.dirty=False self.dataTypes=[] for cd in self.tableSpecs.colSpecs.values(): if cd.category == 'B': cd.type = self.RegisterDataType('bool:Null', None, wx.grid.GRID_VALUE_BOOL) elif cd.category == 'N': if cd.pgtype in ['real', 'double precision']: cd.type=wx.grid.GRID_VALUE_FLOAT elif cd.pgtype in ['numeric']: cd.type=wx.grid.GRID_VALUE_NUMBER else: cd.type=wx.grid.GRID_VALUE_LONG elif cd.category == 'E': cd.type="ENUM:%s" % cd.pgtype if not cd.notNull: cd.type += ":Null" if cd.type not in self.dataTypes: query=pgQuery("pg_enum", self.tableSpecs.GetCursor()) query.AddCol("enumlabel") if self.tableSpecs.serverVersion > 9.1: query.addOrder("enumsortorder") query.AddWhere('enumtypid', cd.typoid) enum=[] if not cd.notNull: enum.append("") for row in query.Select(): enum.append(row['enumlabel']) editor=wx.grid.GridCellChoiceEditor(enum) self.RegisterDataType(cd.type, wx.grid.GRID_VALUE_CHOICE, editor) else: cd.type= wx.grid.GRID_VALUE_STRING self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell) self.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnEditorShown) self.Bind(wx.grid.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick) self.Bind(wx.grid.EVT_GRID_LABEL_LEFT_DCLICK, self.OnLabelDclick) self.Bind(wx.grid.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick) self.Bind(wx.grid.EVT_GRID_CELL_CHANGED, self.OnCellChanged)
def OnDelSnippet(self, evt): snippet = self.GetNode() if snippet: query = pgQuery(self.frame.snippet_table, self.server.GetCursor()) query.AddWhere('id', snippet.id) query.Delete() self.Delete(snippet.treeitem) del self.snippets[snippet.id] self.frame.SetStatus(xlt("Snippet deleted."))
def insertSnippet(self, snippet): query = pgQuery(self.frame.snippet_table, self.server.GetCursor()) query.AddColVal('parent', snippet.parent) query.AddColVal('sort', snippet.sort) query.AddColVal('name', snippet.name) query.AddColVal('snippet', snippet.text) id = query.Insert("id") snippet.id = id return id
def InstancesQuery(parentNode): sql = pgQuery("pg_namespace nsp") sql.AddCol( "nsp.oid, nspacl, nspname as name, pg_get_userbyid(nspowner) AS owner, description" ) sql.AddLeft("pg_description des ON des.objoid=nsp.oid") sql.AddWhere("(nsp.oid=2200 OR nsp.oid > %d)" % parentNode.GetServer().GetLastSysOid()) sql.AddOrder("nspname") return sql
def FindQuery(schemaName, schemaOid, patterns): sql=pgQuery("pg_proc p") sql.AddCol("'P' as kind") sql.AddCol("nspname") sql.AddCol("proname as name") sql.AddCol("n.oid as nspoid") sql.AddCol("p.oid") sql.AddJoin("pg_namespace n ON n.oid=pronamespace") SchemaObject.AddFindRestrictions(sql, schemaName, schemaOid, 'proname', patterns) return sql
def FindQuery(schemaName, schemaOid, patterns): sql=pgQuery("pg_class c") sql.AddCol("relkind as kind") sql.AddCol("nspname") sql.AddCol("relname as name") sql.AddCol("n.oid as nspoid") sql.AddCol("c.oid") sql.AddJoin("pg_namespace n ON n.oid=relnamespace") sql.AddWhere("relkind='r'") SchemaObject.AddFindRestrictions(sql, schemaName, schemaOid, 'relname', patterns) return sql
def FindQuery(schemaName, schemaOid, patterns): sql = pgQuery("pg_proc p") sql.AddCol("'P' as kind") sql.AddCol("nspname") sql.AddCol("proname as name") sql.AddCol("n.oid as nspoid") sql.AddCol("p.oid") sql.AddJoin("pg_namespace n ON n.oid=pronamespace") SchemaObject.AddFindRestrictions(sql, schemaName, schemaOid, 'proname', patterns) return sql
def InstancesQuery(parentNode): sql=pgQuery("pg_proc pro") sql.AddCol("pro.oid, pg_get_userbyid(proowner) AS owner, proacl as acl, proname as name, pro.*, nspname, ns.oid as nspoid, lanname, description") if parentNode.GetServer().version >= 8.4: sql.AddCol("pg_get_function_arguments(pro.oid) as arguments, pg_get_function_result(pro.oid) as result") sql.AddJoin("pg_language lang ON lang.oid=prolang") sql.AddLeft("pg_namespace ns ON ns.oid=pronamespace") sql.AddLeft("pg_description des ON (des.objoid=pro.oid AND des.objsubid=0)") sql.AddWhere("pronamespace", parentNode.parentNode.GetOid()) sql.AddOrder("proname") return sql
def InstancesQuery(parentNode): sql=pgQuery("pg_class rel") sql.AddCol("rel.oid, relname as name, nspname, ns.oid as nspoid, spcname, pg_get_userbyid(relowner) AS owner, relacl as acl, relkind") sql.AddCol("description") sql.AddJoin("pg_namespace ns ON ns.oid=rel.relnamespace") sql.AddLeft("pg_tablespace ta ON ta.oid=rel.reltablespace") sql.AddLeft("pg_description des ON (des.objoid=rel.oid AND des.objsubid=0)") sql.AddWhere("relkind in ('S')") sql.AddWhere("relnamespace", parentNode.parentNode.GetOid()) sql.AddOrder("CASE WHEN nspname='%s' THEN ' ' else nspname END" % "public") sql.AddOrder("relname") return sql
def FindQuery(schemaName, schemaOid, patterns): sql = pgQuery("pg_class c") sql.AddCol("relkind as kind") sql.AddCol("nspname") sql.AddCol("relname as name") sql.AddCol("n.oid as nspoid") sql.AddCol("c.oid") sql.AddJoin("pg_namespace n ON n.oid=relnamespace") sql.AddWhere("relkind='v'") SchemaObject.AddFindRestrictions(sql, schemaName, schemaOid, 'relname', patterns) return sql
def Commit(self): if self.currentRowNo >= 0: query=pgQuery(self.tableSpecs.tabName, self.tableSpecs.GetCursor()) if self.currentRowNo < len(self.rows): # UPDATE case for col in self.colsChanged: colname=self.colNames[col] val=self.currentRow[colname] query.AddColVal(quoteIdent(colname), val) r=self.rows[self.currentRowNo] if self.hasoids: query.AddWhere("oid", r['oid']) else: for colname in self.tableSpecs.keyCols: query.AddWhere(colname, self.currentRow[colname]) query.Update() self.rows[self.currentRowNo] = self.currentRow else: # INSERT case for colname in self.colNames: if colname == "oid" and self.hasoids: continue value=self.currentRow.get(colname) if value != None: query.AddColVal(quoteIdent(colname), self.currentRow[colname]) if self.hasoids: returning=None else: returning=",".join(map(quoteIdent, self.tableSpecs.keyCols)) returned=query.Insert(returning) if returned != None: if self.hasoids: self.currentRow['oid'] = returned else: if isinstance(returned, tuple): for i in range(len(returned)): self.currentRow[self.tableSpecs.keyCols[i]] = returned[i] else: self.currentRow[self.tableSpecs.keyCols[0]] = returned self.rows.append(self.currentRow) self.grid.ProcessTableMessage(wx.grid.GridTableMessage(self, wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED, 1)) self.grid.GetParent().SetStatusText(xlt("%d rows") % len(self.rows), SqlFrame.STATUSPOS_ROWS) rc=True else: rc=False self.Revert() return rc
def GetQuery(self): query = pgQuery(self.tableSpecs.tabName) for colName in self['DisplayCols'].GetCheckedStrings(): query.AddCol(colName) for colName in self['SortCols'].GetCheckedStrings(): query.AddOrder(colName) if self.FilterCheck: filter = self.FilterValue.GetText().strip() query.AddWhere(filter) sql = query.SelectQueryString() if self.LimitCheck: sql += "\n LIMIT %d" % self.LimitValue return sql
def GetQuery(self): query = pgQuery(self.tableSpecs.tabName) for colName in self["DisplayCols"].GetCheckedStrings(): query.AddCol(colName) for colName in self["SortCols"].GetCheckedStrings(): query.AddOrder(colName) if self.FilterCheck: filter = self.FilterValue.GetText().strip() query.AddWhere(filter) sql = query.SelectQueryString() if self.LimitCheck: sql += "\n LIMIT %d" % self.LimitValue return sql
def InstancesQuery(parentNode): sql = pgQuery("pg_class rel") sql.AddCol( "rel.oid, relname as name, nspname, ns.oid as nspoid, spcname, pg_get_userbyid(relowner) AS owner, relacl as acl, relkind" ) sql.AddCol("description") sql.AddJoin("pg_namespace ns ON ns.oid=rel.relnamespace") sql.AddLeft("pg_tablespace ta ON ta.oid=rel.reltablespace") sql.AddLeft( "pg_description des ON (des.objoid=rel.oid AND des.objsubid=0)") sql.AddWhere("relkind in ('S')") sql.AddWhere("relnamespace", parentNode.parentNode.GetOid()) sql.AddOrder("CASE WHEN nspname='%s' THEN ' ' else nspname END" % "public") sql.AddOrder("relname") return sql
def InstancesQuery(parentNode): sql = pgQuery("pg_proc pro") sql.AddCol( "pro.oid, pg_get_userbyid(proowner) AS owner, proacl as acl, proname as name, pro.*, nspname, ns.oid as nspoid, lanname, description" ) if parentNode.GetServer().version >= 8.4: sql.AddCol( "pg_get_function_arguments(pro.oid) as arguments, pg_get_function_result(pro.oid) as result" ) sql.AddJoin("pg_language lang ON lang.oid=prolang") sql.AddLeft("pg_namespace ns ON ns.oid=pronamespace") sql.AddLeft( "pg_description des ON (des.objoid=pro.oid AND des.objsubid=0)") sql.AddWhere("pronamespace", parentNode.parentNode.GetOid()) sql.AddOrder("proname") return sql
def DelFavourite(self, node): try: node.GetDatabase().favourites.remove(node.GetOid()) except: pass query=pgQuery(self.fav_table, self.GetCursor()) query.AddWhere('dboid',node.GetDatabase().GetOid()) query.AddWhere('favoid', node.GetOid()) query.Delete() return True self.GetCursor().ExecuteSingle( "DELETE FROM %(favtable)s WHERE dboid=%(dboid)s AND favoid=%(favoid)s" % { 'favtable': self.fav_table, 'dboid': node.GetDatabase().GetOid(), 'favoid': node.GetOid(), } ) return True
def GetQuery(self): query=pgQuery(self.tableSpecs.tabName) for colName in self['DisplayCols'].GetCheckedStrings(): query.AddCol(colName, True) for colName in self['SortCols'].GetCheckedStrings(): if colName.endswith(' DESC'): query.AddOrder(query.quoteIdent(colName[:-5]) + " DESC", False) else: query.AddOrder(colName, True) if self.FilterCheck: filter=self.FilterValue.GetText().strip() query.AddWhere(filter) sql= query.SelectQueryString() if self.LimitCheck: sql += "\n LIMIT %d" % self.LimitValue return sql
def DelFavourite(self, node): try: node.GetDatabase().favourites.remove(node.GetOid()) except: pass query = pgQuery(self.fav_table, self.GetCursor()) query.AddWhere('dboid', node.GetDatabase().GetOid()) query.AddWhere('favoid', node.GetOid()) query.Delete() return True self.GetCursor().ExecuteSingle( "DELETE FROM %(favtable)s WHERE dboid=%(dboid)s AND favoid=%(favoid)s" % { 'favtable': self.fav_table, 'dboid': node.GetDatabase().GetOid(), 'favoid': node.GetOid(), }) return True
def InstancesQuery(parentNode): sql=pgQuery("pg_class rel") sql.AddCol("rel.oid, relname as name, nspname, ns.oid as nspoid, spcname, pg_get_userbyid(relowner) AS owner, relacl as acl, rel.*") if parentNode.GetServer().version < 8.4: sql.AddCol("'t' AS relpersistence") elif parentNode.GetServer().version < 9.1: sql.AddCol("CASE WHEN relistemp THEN 't' ELSE 'p' END AS relpersistence") else: sql.AddCol("relpersistence") sql.AddCol("description") sql.AddJoin("pg_namespace ns ON ns.oid=rel.relnamespace") sql.AddLeft("pg_tablespace ta ON ta.oid=rel.reltablespace") sql.AddLeft("pg_description des ON (des.objoid=rel.oid AND des.objsubid=0)") sql.AddLeft("pg_constraint c ON c.conrelid=rel.oid AND c.contype='p'") sql.AddWhere("relkind", 'r') sql.AddWhere("relnamespace", parentNode.parentNode.GetOid()) sql.AddOrder("CASE WHEN nspname='%s' THEN ' ' else nspname END" % "public") sql.AddOrder("relname") return sql
def AddFavourite(self, node, favgroup=None): query=pgQuery(self.fav_table, self.GetCursor()) query.AddColVal('dboid',node.GetDatabase().GetOid()) query.AddColVal('favoid', node.GetOid()) query.AddColVal('favtype', node.favtype) query.AddColVal('favgroup', favgroup) query.Insert() node.GetDatabase().favourites.append(node.GetOid()) return True self.GetCursor().ExecuteSingle( "INSERT INTO %(favtable)s (dboid, favoid, favtype, favgroup) VALUES (%(dboid)d, %(favoid)d, '%(favtype)s', %(favgroup)s)" % { 'favtable': self.fav_table, 'dboid': node.GetDatabase().GetOid(), 'favoid': node.GetOid(), 'favtype': node.favtype, 'favgroup': quoteValue(favgroup) } ) node.GetDatabase().favourites.append(node.GetOid()) return True
def AddFavourite(self, node, favgroup=None): query = pgQuery(self.fav_table, self.GetCursor()) query.AddColVal('dboid', node.GetDatabase().GetOid()) query.AddColVal('favoid', node.GetOid()) query.AddColVal('favtype', node.favtype) query.AddColVal('favgroup', favgroup) query.Insert() node.GetDatabase().favourites.append(node.GetOid()) return True self.GetCursor().ExecuteSingle( "INSERT INTO %(favtable)s (dboid, favoid, favtype, favgroup) VALUES (%(dboid)d, %(favoid)d, '%(favtype)s', %(favgroup)s)" % { 'favtable': self.fav_table, 'dboid': node.GetDatabase().GetOid(), 'favoid': node.GetOid(), 'favtype': node.favtype, 'favgroup': quoteValue(favgroup) }) node.GetDatabase().favourites.append(node.GetOid()) return True
def OnPresetSelect(self, evt): preset=self.FilterPreset.strip() if not preset: return query=pgQuery(self.dialog.querypreset_table, self.dialog.server.GetCursor()) query.AddCol('querylimit') query.AddCol('filter') query.AddCol('sort') query.AddCol('display') query.AddCol('sql') query.AddWhere('dbname', self.tableSpecs.dbName) query.AddWhere('tabname', self.tableSpecs.tabName) query.AddWhere('presetname', preset) res=query.Select() for row in res: limit=row['querylimit'] filter=row['filter'] sort=evalAsPython(row['sort']) display=evalAsPython(row['display']) sql=row['sql'] if limit: self.LimitCheck=True self.OnLimitCheck() self.LimitValue=limit else: self.LimitCheck=False if sql: self.dialog.editor.SetText(sql) if sort: sc=self['SortCols'] sc.Clear() cols=self.tableSpecs.colNames[:] for col in sort: if col.endswith(' DESC'): colpure=col[:-5] else: colpure=col if colpure in cols: id=sc.Append(col) sc.Check(id, True) cols.remove(colpure) sc.AppendItems(cols) if display: dc=self['DisplayCols'] dc.Clear() cols=self.tableSpecs.colNames[:] for col in display: if col in cols: id=dc.Append(col) dc.Check(id, True) cols.remove(col) dc.AppendItems(cols) if filter: self.FilterCheck=True self.OnFilterCheck() self.FilterValue.SetText(filter) self.OnFilterValidate(evt) else: self.FilterCheck=False break # only one row, hopefully self.OnPresetChange(evt)