From 621cef70480c18e36383d155d9446ea318299f90 Mon Sep 17 00:00:00 2001 From: John Bodley <4567245+john-bodley@users.noreply.github.com> Date: Tue, 23 Apr 2019 13:22:29 -0700 Subject: [PATCH] [schema] Updating the datasources schema (#5451) --- UPDATING.md | 10 +++- superset/connectors/druid/models.py | 3 +- .../937d04c16b64_update_datasources.py | 52 +++++++++++++++++++ 3 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 superset/migrations/versions/937d04c16b64_update_datasources.py diff --git a/UPDATING.md b/UPDATING.md index bec2d4204bb43..1354f4f2fdc5b 100644 --- a/UPDATING.md +++ b/UPDATING.md @@ -21,11 +21,17 @@ under the License. This file documents any backwards-incompatible changes in Superset and assists people when migrating to a new version. +## Superset 0.34.0 + +* [5451](https://github.com/apache/incubator-superset/pull/5451): a change +which adds missing non-nullable fields to the `datasources` table. Depending on +the integrity of the data, manual intervention may be required. + ## Superset 0.32.0 * `npm run backend-sync` is deprecated and no longer needed, will fail if called -* [5445](https://github.com/apache/incubator-superset/pull/5445) : a change -which prevents encoding of empty string from form data in the datanbase. +* [5445](https://github.com/apache/incubator-superset/pull/5445): a change +which prevents encoding of empty string from form data in the database. This involves a non-schema changing migration which does potentially impact a large number of records. Scheduled downtime may be advised. diff --git a/superset/connectors/druid/models.py b/superset/connectors/druid/models.py index 8440a25099a35..76e82947e5ad9 100644 --- a/superset/connectors/druid/models.py +++ b/superset/connectors/druid/models.py @@ -417,7 +417,7 @@ class DruidDatasource(Model, BaseDatasource): baselink = 'druiddatasourcemodelview' # Columns - datasource_name = Column(String(255)) + datasource_name = Column(String(255), nullable=False) is_hidden = Column(Boolean, default=False) filter_select_enabled = Column(Boolean, default=True) # override default fetch_values_from = Column(String(100)) @@ -427,7 +427,6 @@ class DruidDatasource(Model, BaseDatasource): 'DruidCluster', backref='datasources', foreign_keys=[cluster_name]) owners = relationship(owner_class, secondary=druiddatasource_user, backref='druiddatasources') - UniqueConstraint('cluster_name', 'datasource_name') export_fields = ( 'datasource_name', 'is_hidden', 'description', 'default_endpoint', diff --git a/superset/migrations/versions/937d04c16b64_update_datasources.py b/superset/migrations/versions/937d04c16b64_update_datasources.py new file mode 100644 index 0000000000000..5fb34ab0f544e --- /dev/null +++ b/superset/migrations/versions/937d04c16b64_update_datasources.py @@ -0,0 +1,52 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""update datasources + +Revision ID: 937d04c16b64 +Revises: d94d33dbe938 +Create Date: 2018-07-20 16:08:10.195843 + +""" + +# revision identifiers, used by Alembic. +revision = '937d04c16b64' +down_revision = 'd94d33dbe938' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + + # Enforce that the datasource_name column be non-nullable. + with op.batch_alter_table('datasources') as batch_op: + batch_op.alter_column( + 'datasource_name', + nullable=False, + type_=sa.String(255), + ) + + +def downgrade(): + + # Forego that the datasource_name column be non-nullable. + with op.batch_alter_table('datasources') as batch_op: + batch_op.alter_column( + 'datasource_name', + nullable=True, + type_=sa.String(255), + )