Skip to content

Commit 5597b80

Browse files
committed
Optimize update sql primary_keys parsing
1 parent 320a3d9 commit 5597b80

1 file changed

Lines changed: 25 additions & 11 deletions

File tree

syncanysql/compiler.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3252,23 +3252,37 @@ def optimize_rewrite_update(self, expression, config, arguments):
32523252
continue
32533253
set_expressions.append({"column": column, "expression": set_expression.args["expression"]})
32543254

3255-
if not primary_keys:
3256-
primary_keys = primary_table.get("primary_keys")
3257-
if not primary_keys:
3255+
if not primary_keys and not primary_table.get("primary_keys"):
32583256
raise SyncanySqlCompileException('unknown primary key, related sql "%s"' % self.to_sql(expression))
32593257
sql = ["INSERT INTO"]
32603258
if primary_table.get("db"):
3261-
sql.append("`" + primary_table["db"] + "`." + '`' + primary_table["name"] + "<U>`")
3259+
sql.append("`" + primary_table["db"] + "`.`" + primary_table["name"] + "<U>`")
32623260
else:
32633261
sql.append('`' + primary_table["name"] + "<U>`")
32643262
select_sql = []
3265-
for primary_key in primary_keys:
3266-
if primary_table.get("table_alias"):
3267-
select_sql.append(primary_table["table_alias"] + "." + "`" + primary_key + "<pk>`")
3268-
else:
3269-
select_sql.append("`" + primary_key + "<pk>`")
3270-
for set_expression in set_expressions:
3271-
select_sql.append(self.generate_sql(set_expression["expression"]) + ' as ' + set_expression["column"]["column_name"])
3263+
if primary_keys:
3264+
for primary_key in primary_keys:
3265+
if [set_expression for set_expression in set_expressions if set_expression["column"]["column_name"] == primary_key]:
3266+
continue
3267+
if primary_table.get("table_alias"):
3268+
select_sql.append(primary_table["table_alias"] + ".`" + primary_key + "<pk>`")
3269+
else:
3270+
select_sql.append("`" + primary_key + "<pk>`")
3271+
for set_expression in set_expressions:
3272+
if set_expression["column"]["column_name"] in primary_keys:
3273+
select_sql.append(self.generate_sql(set_expression["expression"]) + ' as `' + set_expression["column"]["column_name"] + "<pk>`")
3274+
else:
3275+
select_sql.append(self.generate_sql(set_expression["expression"]) + ' as ' + set_expression["column"]["column_name"])
3276+
elif primary_table.get("primary_keys"):
3277+
for primary_key in primary_table["primary_keys"]:
3278+
if [set_expression for set_expression in set_expressions if set_expression["column"]["column_name"] == primary_key]:
3279+
continue
3280+
if primary_table.get("table_alias"):
3281+
select_sql.append(primary_table["table_alias"] + ".`" + primary_key + "`")
3282+
else:
3283+
select_sql.append("`" + primary_key + "`")
3284+
for set_expression in set_expressions:
3285+
select_sql.append(self.generate_sql(set_expression["expression"]) + ' as ' + set_expression["column"]["column_name"])
32723286
sql.append("SELECT")
32733287
sql.append(", ".join(select_sql))
32743288
sql.append("FROM")

0 commit comments

Comments
 (0)