fix: Missing sql_editor_id index (#27392)
Co-authored-by: Michael S. Molina <michael.s.molina@gmail.com> Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
This commit is contained in:
parent
0f301450e0
commit
2a7bfa4bb3
|
|
@ -48,6 +48,10 @@ assists people when migrating to a new version.
|
|||
listing all databases in CRUD-view and dropdown and didn't provide access to data as it
|
||||
seemed the name would imply.
|
||||
|
||||
### Potential Downtime
|
||||
|
||||
- [27392](https://github.com/apache/superset/pull/27392): Adds an index to `query.sql_editor_id` to improve performance. This may cause downtime on large deployments.
|
||||
|
||||
## 4.0.0
|
||||
|
||||
- [27119](https://github.com/apache/superset/pull/27119): Updates various database columns to use the `MediumText` type, potentially requiring a table lock on MySQL dbs or taking some time to complete on large deployments.
|
||||
|
|
|
|||
|
|
@ -51,6 +51,23 @@ def table_has_column(table: str, column: str) -> bool:
|
|||
return False
|
||||
|
||||
|
||||
def table_has_index(table: str, index: str) -> bool:
|
||||
"""
|
||||
Checks if an index exists in a given table.
|
||||
|
||||
:param table: A table name
|
||||
:param index: A index name
|
||||
:returns: True if the index exists in the table
|
||||
"""
|
||||
|
||||
insp = inspect(op.get_context().bind)
|
||||
|
||||
try:
|
||||
return any(ind["name"] == index for ind in insp.get_indexes(table))
|
||||
except NoSuchTableError:
|
||||
return False
|
||||
|
||||
|
||||
uuid_by_dialect = {
|
||||
MySQLDialect: "UNHEX(REPLACE(CONVERT(UUID() using utf8mb4), '-', ''))",
|
||||
PGDialect: "uuid_in(md5(random()::text || clock_timestamp()::text)::cstring)",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
# 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.
|
||||
"""add_query_sql_editor_id_index
|
||||
|
||||
Revision ID: 3dfd0e78650e
|
||||
Revises: 5f57af97bc3f
|
||||
Create Date: 2024-05-02 13:40:23.126659
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "3dfd0e78650e"
|
||||
down_revision = "5f57af97bc3f"
|
||||
|
||||
from alembic import op # noqa: E402
|
||||
|
||||
from superset.migrations.shared.utils import table_has_index # noqa: E402
|
||||
|
||||
table = "query"
|
||||
index = "ix_sql_editor_id"
|
||||
|
||||
|
||||
def upgrade():
|
||||
if not table_has_index(table, index):
|
||||
op.create_index(
|
||||
op.f(index),
|
||||
table,
|
||||
["sql_editor_id"],
|
||||
unique=False,
|
||||
)
|
||||
|
||||
|
||||
def downgrade():
|
||||
if table_has_index(table, index):
|
||||
op.drop_index(op.f(index), table_name=table)
|
||||
|
|
@ -107,7 +107,7 @@ class Query(
|
|||
user_id = Column(Integer, ForeignKey("ab_user.id"), nullable=True)
|
||||
status = Column(String(16), default=QueryStatus.PENDING)
|
||||
tab_name = Column(String(256))
|
||||
sql_editor_id = Column(String(256))
|
||||
sql_editor_id = Column(String(256), index=True)
|
||||
schema = Column(String(256))
|
||||
catalog = Column(String(256), nullable=True, default=None)
|
||||
sql = Column(MediumText())
|
||||
|
|
|
|||
Loading…
Reference in New Issue