You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2019/01/30 19:34:28 UTC
[GitHub] mistercrunch commented on a change in pull request #5445: [wtforms]
Using wtforms-json which prevents encoding empty strings in the database
mistercrunch commented on a change in pull request #5445: [wtforms] Using wtforms-json which prevents encoding empty strings in the database
URL: https://github.com/apache/incubator-superset/pull/5445#discussion_r252406346
##########
File path: superset/migrations/versions/c617da68de7d_form_nullable.py
##########
@@ -0,0 +1,173 @@
+"""form nullable
+
+Revision ID: c617da68de7d
+Revises: 55e910a74826
+Create Date: 2018-07-19 23:41:32.631556
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = 'c617da68de7d'
+down_revision = '55e910a74826'
+
+from alembic import op
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy import Column, Integer, String, Text
+
+from superset import db
+from superset.utils import MediumText
+
+Base = declarative_base()
+
+
+class BaseColumnMixin(object):
+ id = Column(Integer, primary_key=True)
+ column_name = Column(String(255))
+ description = Column(Text)
+ type = Column(String(32))
+ verbose_name = Column(String(1024))
+
+
+class BaseDatasourceMixin(object):
+ id = Column(Integer, primary_key=True)
+ description = Column(Text)
+
+
+class BaseMetricMixin(object):
+ id = Column(Integer, primary_key=True)
+ d3format = Column(String(128))
+ description = Column(Text)
+ metric_name = Column(String(512))
+ metric_type = Column(String(32))
+ verbose_name = Column(String(1024))
+ warning_text = Column(Text)
+
+
+class Annotation(Base):
+ __tablename__ = 'annotation'
+
+ id = Column(Integer, primary_key=True)
+ short_descr = Column(String(500))
+ long_descr = Column(Text)
+
+
+class Dashboard(Base):
+ __tablename__ = 'dashboards'
+
+ id = Column(Integer, primary_key=True)
+ css = Column(Text)
+ dashboard_title = Column(String(500))
+ description = Column(Text)
+ json_metadata = Column(Text)
+ position_json = Column(MediumText())
+ slug = Column(String(255))
+
+
+class Database(Base):
+ __tablename__ = 'dbs'
+
+ id = Column(Integer, primary_key=True)
+ database_name = Column(String(250))
+ extra = Column(Text)
+ force_ctas_schema = Column(String(250))
+ sqlalchemy_uri = Column(String(1024))
+ verbose_name = Column(String(250))
+
+
+class DruidCluster(Base):
+ __tablename__ = 'clusters'
+
+ id = Column(Integer, primary_key=True)
+ broker_host = Column(String(255))
+ broker_endpoint = Column(String(255))
+ cluster_name = Column(String(250))
+ coordinator_endpoint = Column(String(255))
+ coordinator_host = Column(String(255))
+ verbose_name = Column(String(250))
+
+
+class DruidColumn(BaseColumnMixin, Base):
+ __tablename__ = 'columns'
+
+ dimension_spec_json = Column(Text)
+
+
+class DruidDatasource(BaseDatasourceMixin, Base):
+ __tablename__ = 'datasources'
+
+ datasource_name = Column(String(255))
+
+
+class DruidMetric(BaseMetricMixin, Base):
+ __tablename__ = 'metrics'
+
+ json = Column(Text)
+
+
+class Slice(Base):
+ __tablename__ = 'slices'
+
+ id = Column(Integer, primary_key=True)
+ description = Column(Text)
+ params = Column(Text)
+ slice_name = Column(String(250))
+ viz_type = Column(String(250))
+
+
+class SqlaTable(BaseDatasourceMixin, Base):
+ __tablename__ = 'tables'
+
+ default_endpoint = Column(MediumText())
+ fetch_values_predicate = Column(String(1000))
+ main_dttm_col = Column(String(250))
+ schema = Column(String(255))
+ sql = Column(Text)
+ table_name = Column(String(250))
+ template_params = Column(Text)
+
+
+class SqlMetric(BaseMetricMixin, Base):
+ __tablename__ = 'sql_metrics'
+
+ expression = Column(Text)
+
+
+class TableColumn(BaseColumnMixin, Base):
+ __tablename__ = 'table_columns'
+
+ database_expression = Column(String(255))
+ expression = Column(Text)
+ python_date_format = Column(String(255))
+
+
+def upgrade():
+ bind = op.get_bind()
+ session = db.Session(bind=bind)
+
+ tables = [
+ Annotation,
+ Dashboard,
+ Database,
+ DruidCluster,
+ DruidColumn,
+ DruidDatasource,
+ DruidMetric,
+ Slice,
+ SqlaTable,
+ SqlMetric,
+ TableColumn,
+ ]
+
+ for table in tables:
+ for record in session.query(table).all():
+ for col in record.__table__.columns.values():
+ if not col.primary_key:
+ if getattr(record, col.name) == '':
+ setattr(record, col.name, None)
+
+ session.commit()
Review comment:
This will be a hell of a commit. I'd suggest proceeding carefully and committing on a per-record (only if needed) basis. Maybe on a per-table basis, but that could represent very large commits too.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org