@@ -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