diff --git a/.gitignore b/.gitignore index 11175e7..7ed47ad 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,8 @@ Thumbs.db ################## .idea/ .vscode/ +build +dist venv/* parser.out parsetab.py diff --git a/db.cfg b/db.cfg index 3c45fea..9fcca26 100644 --- a/db.cfg +++ b/db.cfg @@ -1,10 +1,10 @@ { 'db': { - 'host': 'localhost', - 'port': 3306, - 'dbname': 'test', - 'user': 'root', - 'pswd': '123456', - 'charset': 'big5' + 'host': '*****', + 'port': '*', + 'dbname': '*', + 'user': '*', + 'pswd': '*', + 'charset': '*' } } diff --git a/src/metadata/metadata_utils.py b/src/metadata/metadata_utils.py index 76f3b98..1e03b4f 100644 --- a/src/metadata/metadata_utils.py +++ b/src/metadata/metadata_utils.py @@ -200,6 +200,7 @@ def json_to_catalog(catalog_json, schema_sql=None) -> Catalog: @staticmethod def extension_all_match_index(filter_column_list, order_list): + column_set = set() column_list = [] range_flag = False last_column = '' @@ -207,7 +208,9 @@ def extension_all_match_index(filter_column_list, order_list): column_name = filter_column['column_name'] opt = filter_column['opt'] if opt == '=' or opt == 'in' or opt == 'is': - column_list.append(column_name) + if column_name not in column_set: + column_set.add(column_name) + column_list.append(column_name) elif ( opt == '>' or opt == '<' @@ -221,6 +224,8 @@ def extension_all_match_index(filter_column_list, order_list): range_flag = True if range_flag: + if last_column in column_set: + column_list.remove(last_column) column_list.append(last_column) # TODO Statistics need to be added to determine which one comes first when there are range queries and sorting diff --git a/src/optimizer/rewrite_rule/__init__.py b/src/optimizer/rewrite_rule/__init__.py index 5705d03..7620270 100644 --- a/src/optimizer/rewrite_rule/__init__.py +++ b/src/optimizer/rewrite_rule/__init__.py @@ -13,6 +13,10 @@ from .rewrite_or_rule import RewriteMySQLORRule from .remove_order_by_in_delete_update_rule import RemoveOrderByInDeleteUpdateRule -common_rules = [RewriteSupplementColumnRule(), RemoveOrderByInDeleteUpdateRule()] +common_rules = [ + RewriteSupplementColumnRule(), + RemoveOrderByInDeleteUpdateRule(), + RewriteMySQLORRule(), +] mysql_rules = [RewriteMySQLORRule()]