Added support for the CREATE script for View and Materialized View, and
SELECT & INSERT support for the Materialized View Node.pull/3/head
parent
af84ba5a4f
commit
3b3cf7502b
|
@ -164,7 +164,9 @@ def check_precondition(f):
|
||||||
|
|
||||||
# Here args[0] will hold self & kwargs will hold gid,sid,did
|
# Here args[0] will hold self & kwargs will hold gid,sid,did
|
||||||
self = args[0]
|
self = args[0]
|
||||||
self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(
|
pg_driver = get_driver(PG_DEFAULT_DRIVER)
|
||||||
|
self.qtIdent = pg_driver.qtIdent
|
||||||
|
self.manager = pg_driver.connection_manager(
|
||||||
kwargs['sid']
|
kwargs['sid']
|
||||||
)
|
)
|
||||||
self.conn = self.manager.connection(did=kwargs['did'])
|
self.conn = self.manager.connection(did=kwargs['did'])
|
||||||
|
@ -183,6 +185,12 @@ def check_precondition(f):
|
||||||
self.pg_template_path(self.manager.version)
|
self.pg_template_path(self.manager.version)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ver = self.manager.version
|
||||||
|
if ver >= 90200:
|
||||||
|
self.column_template_path = 'column/sql/9.2_plus'
|
||||||
|
else:
|
||||||
|
self.column_template_path = 'column/sql/9.1_plus'
|
||||||
|
|
||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
|
|
||||||
return wrap
|
return wrap
|
||||||
|
@ -232,6 +240,15 @@ class ViewNode(PGChildNodeView, VacuumSettings):
|
||||||
- This function will generate sql to show it in sql pane for the view
|
- This function will generate sql to show it in sql pane for the view
|
||||||
node.
|
node.
|
||||||
|
|
||||||
|
* refresh_data(gid, sid, did, scid, vid):
|
||||||
|
- This function will refresh view object
|
||||||
|
|
||||||
|
* select_sql(gid, sid, did, scid, vid):
|
||||||
|
- Returns select sql for Object
|
||||||
|
|
||||||
|
* insert_sql(gid, sid, did, scid, vid):
|
||||||
|
- Returns INSERT Script sql for the object
|
||||||
|
|
||||||
* dependency(gid, sid, did, scid):
|
* dependency(gid, sid, did, scid):
|
||||||
- This function will generate dependency list show it in dependency
|
- This function will generate dependency list show it in dependency
|
||||||
pane for the selected view node.
|
pane for the selected view node.
|
||||||
|
@ -271,6 +288,8 @@ class ViewNode(PGChildNodeView, VacuumSettings):
|
||||||
'module.js': [{}, {}, {'get': 'module_js'}],
|
'module.js': [{}, {}, {'get': 'module_js'}],
|
||||||
'configs': [{'get': 'configs'}],
|
'configs': [{'get': 'configs'}],
|
||||||
'get_tblspc': [{'get': 'get_tblspc'}, {'get': 'get_tblspc'}],
|
'get_tblspc': [{'get': 'get_tblspc'}, {'get': 'get_tblspc'}],
|
||||||
|
'select_sql': [{'get': 'select_sql'}, {'get': 'select_sql'}],
|
||||||
|
'insert_sql': [{'get': 'insert_sql'}, {'get': 'insert_sql'}],
|
||||||
'get_table_vacuum': [
|
'get_table_vacuum': [
|
||||||
{'get': 'get_table_vacuum'},
|
{'get': 'get_table_vacuum'},
|
||||||
{'get': 'get_table_vacuum'}],
|
{'get': 'get_table_vacuum'}],
|
||||||
|
@ -848,6 +867,8 @@ class ViewNode(PGChildNodeView, VacuumSettings):
|
||||||
generate their sql and render
|
generate their sql and render
|
||||||
into sql tab
|
into sql tab
|
||||||
"""
|
"""
|
||||||
|
from pgadmin.browser.server_groups.servers.databases.schemas.utils \
|
||||||
|
import trigger_definition
|
||||||
|
|
||||||
# Define template path
|
# Define template path
|
||||||
self.trigger_temp_path = 'trigger'
|
self.trigger_temp_path = 'trigger'
|
||||||
|
@ -1047,6 +1068,124 @@ class ViewNode(PGChildNodeView, VacuumSettings):
|
||||||
status=200
|
status=200
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@check_precondition
|
||||||
|
def select_sql(self, gid, sid, did, scid, vid):
|
||||||
|
"""
|
||||||
|
SELECT script sql for the object
|
||||||
|
|
||||||
|
Args:
|
||||||
|
gid: Server Group Id
|
||||||
|
sid: Server Id
|
||||||
|
did: Database Id
|
||||||
|
scid: Schema Id
|
||||||
|
vid: View Id
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
SELECT Script sql for the object
|
||||||
|
"""
|
||||||
|
SQL = render_template(
|
||||||
|
"/".join([
|
||||||
|
self.template_path, 'sql/properties.sql'
|
||||||
|
]),
|
||||||
|
scid=scid, vid=vid,
|
||||||
|
datlastsysoid=self.datlastsysoid
|
||||||
|
)
|
||||||
|
status, res = self.conn.execute_dict(SQL)
|
||||||
|
if not status:
|
||||||
|
return internal_server_error(errormsg=res)
|
||||||
|
data_view = res['rows'][0]
|
||||||
|
|
||||||
|
SQL = render_template(
|
||||||
|
"/".join([
|
||||||
|
self.column_template_path, 'properties.sql'
|
||||||
|
]),
|
||||||
|
scid=scid, tid=vid,
|
||||||
|
datlastsysoid=self.datlastsysoid
|
||||||
|
)
|
||||||
|
status, data = self.conn.execute_dict(SQL)
|
||||||
|
if not status:
|
||||||
|
return internal_server_error(errormsg=res)
|
||||||
|
|
||||||
|
columns = []
|
||||||
|
|
||||||
|
# Now we have all list of columns which we need
|
||||||
|
data = data['rows']
|
||||||
|
for c in data:
|
||||||
|
columns.append(self.qtIdent(self.conn, c['name']))
|
||||||
|
|
||||||
|
if len(columns) > 0:
|
||||||
|
columns = ", ".join(columns)
|
||||||
|
else:
|
||||||
|
columns = '*'
|
||||||
|
|
||||||
|
sql = "SELECT {0}\n\tFROM {1};".format(
|
||||||
|
columns,
|
||||||
|
self.qtIdent(self.conn, data_view['schema'], data_view['name'])
|
||||||
|
)
|
||||||
|
|
||||||
|
return ajax_response(response=sql)
|
||||||
|
|
||||||
|
@check_precondition
|
||||||
|
def insert_sql(self, gid, sid, did, scid, vid):
|
||||||
|
"""
|
||||||
|
INSERT script sql for the object
|
||||||
|
|
||||||
|
Args:
|
||||||
|
gid: Server Group Id
|
||||||
|
sid: Server Id
|
||||||
|
did: Database Id
|
||||||
|
scid: Schema Id
|
||||||
|
foid: Foreign Table Id
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
INSERT Script sql for the object
|
||||||
|
"""
|
||||||
|
SQL = render_template(
|
||||||
|
"/".join([
|
||||||
|
self.template_path, 'sql/properties.sql'
|
||||||
|
]),
|
||||||
|
scid=scid, vid=vid,
|
||||||
|
datlastsysoid=self.datlastsysoid
|
||||||
|
)
|
||||||
|
status, res = self.conn.execute_dict(SQL)
|
||||||
|
if not status:
|
||||||
|
return internal_server_error(errormsg=res)
|
||||||
|
data_view = res['rows'][0]
|
||||||
|
|
||||||
|
SQL = render_template(
|
||||||
|
"/".join([
|
||||||
|
self.column_template_path, 'properties.sql'
|
||||||
|
]),
|
||||||
|
scid=scid, tid=vid,
|
||||||
|
datlastsysoid=self.datlastsysoid
|
||||||
|
)
|
||||||
|
status, data = self.conn.execute_dict(SQL)
|
||||||
|
if not status:
|
||||||
|
return internal_server_error(errormsg=data)
|
||||||
|
|
||||||
|
columns = []
|
||||||
|
values = []
|
||||||
|
|
||||||
|
# Now we have all list of columns which we need
|
||||||
|
data = data['rows']
|
||||||
|
for c in data:
|
||||||
|
columns.append(self.qtIdent(self.conn, c['name']))
|
||||||
|
values.append('?')
|
||||||
|
|
||||||
|
if len(columns) > 0:
|
||||||
|
columns = ", ".join(columns)
|
||||||
|
values = ", ".join(values)
|
||||||
|
sql = "INSERT INTO {0}(\n\t{1})\n\tVALUES ({2});".format(
|
||||||
|
self.qtIdent(
|
||||||
|
self.conn, data_view['schema'], data_view['name']
|
||||||
|
),
|
||||||
|
columns, values
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
sql = gettext('-- Please create column(s) first...')
|
||||||
|
|
||||||
|
return ajax_response(response=sql)
|
||||||
|
|
||||||
|
|
||||||
class MaterializedViewNode(ViewNode, VacuumSettings):
|
class MaterializedViewNode(ViewNode, VacuumSettings):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -41,6 +41,7 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
|
||||||
label: '{{ _("Materialized View") }}',
|
label: '{{ _("Materialized View") }}',
|
||||||
hasSQL: true,
|
hasSQL: true,
|
||||||
hasDepends: true,
|
hasDepends: true,
|
||||||
|
hasScriptTypes: ['create', 'select'],
|
||||||
collection_type: 'coll-mview',
|
collection_type: 'coll-mview',
|
||||||
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
|
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
|
||||||
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
|
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
|
||||||
|
|
|
@ -41,6 +41,7 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
|
||||||
label: '{{ _("View") }}',
|
label: '{{ _("View") }}',
|
||||||
hasSQL: true,
|
hasSQL: true,
|
||||||
hasDepends: true,
|
hasDepends: true,
|
||||||
|
hasScriptTypes: ['create', 'select', 'insert'],
|
||||||
collection_type: 'coll-view',
|
collection_type: 'coll-view',
|
||||||
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
|
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
|
||||||
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
|
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
|
||||||
|
|
Loading…
Reference in New Issue