Esempio n. 1
0
    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
Esempio n. 2
0
  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
Esempio n. 3
0
 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)
Esempio n. 4
0
 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
Esempio n. 5
0
    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
Esempio n. 6
0
    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()
Esempio n. 7
0
 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()
Esempio n. 8
0
 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()
Esempio n. 9
0
    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)
Esempio n. 10
0
  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)
Esempio n. 11
0
 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."))
Esempio n. 12
0
 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
Esempio n. 13
0
 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
Esempio n. 14
0
 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
Esempio n. 15
0
 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
Esempio n. 16
0
 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
Esempio n. 17
0
 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
Esempio n. 18
0
 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
Esempio n. 19
0
 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
Esempio n. 20
0
  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
Esempio n. 21
0
  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
Esempio n. 22
0
    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
Esempio n. 23
0
    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
Esempio n. 24
0
 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
Esempio n. 25
0
 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
Esempio n. 26
0
 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
Esempio n. 27
0
 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
Esempio n. 28
0
 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
Esempio n. 29
0
  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
Esempio n. 30
0
 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
Esempio n. 31
0
    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
Esempio n. 32
0
  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)