diff --git a/sqlite_utils/cli.py b/sqlite_utils/cli.py index c90c137..a8baff8 100644 --- a/sqlite_utils/cli.py +++ b/sqlite_utils/cli.py @@ -3283,12 +3283,12 @@ def convert( db.conn.create_function("preview_transform", 1, preview) sql = """ select - [{column}] as value, - preview_transform([{column}]) as preview - from [{table}]{where} limit 10 + {column} as value, + preview_transform({column}) as preview + from {table}{where} limit 10 """.format( - column=columns[0], - table=table, + column=quote_identifier(columns[0]), + table=quote_identifier(table), where=f" where {where}" if where is not None else "", ) for row in db.conn.execute(sql, where_args).fetchall(): diff --git a/tests/test_cli_convert.py b/tests/test_cli_convert.py index 1101f0f..9f59d59 100644 --- a/tests/test_cli_convert.py +++ b/tests/test_cli_convert.py @@ -181,6 +181,34 @@ def test_convert_dryrun(test_db_and_path): assert result.output.strip().split("\n")[-1] == "Would affect 1 row" +def test_convert_dryrun_table_and_column_names_containing_closing_bracket( + fresh_db_and_path, +): + db, db_path = fresh_db_and_path + table_name = "table]name" + column_name = "column]name" + db[table_name].insert({column_name: "hello"}) + + result = CliRunner().invoke( + cli.cli, + [ + "convert", + db_path, + table_name, + column_name, + "value.upper()", + "--dry-run", + ], + catch_exceptions=False, + ) + + assert result.exit_code == 0 + assert result.output.strip() == ( + "hello\n --- becomes:\nHELLO\n\nWould affect 1 row" + ) + assert list(db[table_name].rows) == [{column_name: "hello"}] + + def test_convert_multi_dryrun(test_db_and_path): db_path = test_db_and_path[1] result = CliRunner().invoke(