mirror of https://github.com/apache/superset.git
[select-star] Adding optional schema to view (#6051)
This commit is contained in:
parent
9dcf8e101a
commit
1ee08fc216
|
@ -32,7 +32,7 @@ from flask_babel import lazy_gettext as _
|
|||
import pandas
|
||||
from past.builtins import basestring
|
||||
import sqlalchemy as sqla
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy import Column, select
|
||||
from sqlalchemy.engine import create_engine
|
||||
from sqlalchemy.engine.url import make_url
|
||||
from sqlalchemy.sql import quoted_name, text
|
||||
|
@ -852,6 +852,20 @@ class PrestoEngineSpec(BaseEngineSpec):
|
|||
""").format(**locals())
|
||||
return sql
|
||||
|
||||
@classmethod
|
||||
def where_latest_partition(
|
||||
cls, table_name, schema, database, qry, columns=None):
|
||||
try:
|
||||
col_name, value = cls.latest_partition(
|
||||
table_name, schema, database, show_first=True)
|
||||
except Exception:
|
||||
# table is not partitioned
|
||||
return False
|
||||
for c in columns:
|
||||
if c.get('name') == col_name:
|
||||
return qry.where(Column(col_name) == value)
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def _latest_partition_from_df(cls, df):
|
||||
recs = df.to_records(index=False)
|
||||
|
@ -1180,7 +1194,7 @@ class HiveEngineSpec(PrestoEngineSpec):
|
|||
cls, table_name, schema, database, qry, columns=None):
|
||||
try:
|
||||
col_name, value = cls.latest_partition(
|
||||
table_name, schema, database)
|
||||
table_name, schema, database, show_first=True)
|
||||
except Exception:
|
||||
# table is not partitioned
|
||||
return False
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
{{ content |safe }}
|
|
@ -2332,7 +2332,7 @@ class Superset(BaseSupersetView):
|
|||
'columns': payload_columns,
|
||||
'selectStar': mydb.select_star(
|
||||
table_name, schema=schema, show_cols=True, indent=True,
|
||||
cols=columns, latest_partition=False),
|
||||
cols=columns, latest_partition=True),
|
||||
'primaryKey': primary_key,
|
||||
'foreignKeys': foreign_keys,
|
||||
'indexes': keys,
|
||||
|
@ -2350,14 +2350,19 @@ class Superset(BaseSupersetView):
|
|||
return json_success(json.dumps(payload))
|
||||
|
||||
@has_access
|
||||
@expose('/select_star/<database_id>/<table_name>/')
|
||||
@expose('/select_star/<database_id>/<table_name>')
|
||||
@expose('/select_star/<database_id>/<table_name>/<schema>')
|
||||
@log_this
|
||||
def select_star(self, database_id, table_name):
|
||||
def select_star(self, database_id, table_name, schema=None):
|
||||
mydb = db.session.query(
|
||||
models.Database).filter_by(id=database_id).first()
|
||||
return self.render_template(
|
||||
'superset/ajah.html',
|
||||
content=mydb.select_star(table_name, show_cols=True),
|
||||
return json_success(
|
||||
mydb.select_star(
|
||||
table_name,
|
||||
schema,
|
||||
latest_partition=True,
|
||||
show_cols=True,
|
||||
),
|
||||
)
|
||||
|
||||
@expose('/theme/')
|
||||
|
|
|
@ -727,6 +727,11 @@ class CoreTests(SupersetTestCase):
|
|||
.format(db_id=dbobj.id))
|
||||
assert data == ['this_schema_is_allowed_too']
|
||||
|
||||
def test_select_star(self):
|
||||
self.login(username='admin')
|
||||
resp = self.get_resp('/superset/select_star/1/birth_names')
|
||||
self.assertIn('gender', resp)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue