mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-27 12:24:11 +02:00
add-column --ignore option, refs #450
This commit is contained in:
parent
2c77f4467e
commit
5fa823f03f
3 changed files with 35 additions and 4 deletions
|
|
@ -1031,6 +1031,7 @@ See :ref:`cli_add_column`.
|
||||||
--fk-col TEXT Referenced column on that foreign key table - if
|
--fk-col TEXT Referenced column on that foreign key table - if
|
||||||
omitted will automatically use the primary key
|
omitted will automatically use the primary key
|
||||||
--not-null-default TEXT Add NOT NULL DEFAULT 'TEXT' constraint
|
--not-null-default TEXT Add NOT NULL DEFAULT 'TEXT' constraint
|
||||||
|
--ignore If column already exists, do nothing
|
||||||
--load-extension TEXT SQLite extensions to load
|
--load-extension TEXT SQLite extensions to load
|
||||||
-h, --help Show this message and exit.
|
-h, --help Show this message and exit.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -418,9 +418,22 @@ def dump(path, load_extension):
|
||||||
required=False,
|
required=False,
|
||||||
help="Add NOT NULL DEFAULT 'TEXT' constraint",
|
help="Add NOT NULL DEFAULT 'TEXT' constraint",
|
||||||
)
|
)
|
||||||
|
@click.option(
|
||||||
|
"--ignore",
|
||||||
|
is_flag=True,
|
||||||
|
help="If column already exists, do nothing",
|
||||||
|
)
|
||||||
@load_extension_option
|
@load_extension_option
|
||||||
def add_column(
|
def add_column(
|
||||||
path, table, col_name, col_type, fk, fk_col, not_null_default, load_extension
|
path,
|
||||||
|
table,
|
||||||
|
col_name,
|
||||||
|
col_type,
|
||||||
|
fk,
|
||||||
|
fk_col,
|
||||||
|
not_null_default,
|
||||||
|
ignore,
|
||||||
|
load_extension,
|
||||||
):
|
):
|
||||||
"""Add a column to the specified table
|
"""Add a column to the specified table
|
||||||
|
|
||||||
|
|
@ -431,9 +444,13 @@ def add_column(
|
||||||
"""
|
"""
|
||||||
db = sqlite_utils.Database(path)
|
db = sqlite_utils.Database(path)
|
||||||
_load_extensions(db, load_extension)
|
_load_extensions(db, load_extension)
|
||||||
db[table].add_column(
|
try:
|
||||||
col_name, col_type, fk=fk, fk_col=fk_col, not_null_default=not_null_default
|
db[table].add_column(
|
||||||
)
|
col_name, col_type, fk=fk, fk_col=fk_col, not_null_default=not_null_default
|
||||||
|
)
|
||||||
|
except OperationalError as ex:
|
||||||
|
if not ignore:
|
||||||
|
raise click.ClickException(str(ex))
|
||||||
|
|
||||||
|
|
||||||
@cli.command(name="add-foreign-key")
|
@cli.command(name="add-foreign-key")
|
||||||
|
|
|
||||||
|
|
@ -271,6 +271,19 @@ def test_add_column(db_path, col_name, col_type, expected_schema):
|
||||||
assert expected_schema == collapse_whitespace(db["dogs"].schema)
|
assert expected_schema == collapse_whitespace(db["dogs"].schema)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("ignore", (True, False))
|
||||||
|
def test_add_column_ignore(db_path, ignore):
|
||||||
|
db = Database(db_path)
|
||||||
|
db.create_table("dogs", {"name": str})
|
||||||
|
args = ["add-column", db_path, "dogs", "name"] + (["--ignore"] if ignore else [])
|
||||||
|
result = CliRunner().invoke(cli.cli, args)
|
||||||
|
if ignore:
|
||||||
|
assert result.exit_code == 0
|
||||||
|
else:
|
||||||
|
assert result.exit_code == 1
|
||||||
|
assert result.output == "Error: duplicate column name: name\n"
|
||||||
|
|
||||||
|
|
||||||
def test_add_column_not_null_default(db_path):
|
def test_add_column_not_null_default(db_path):
|
||||||
db = Database(db_path)
|
db = Database(db_path)
|
||||||
db.create_table("dogs", {"name": str})
|
db.create_table("dogs", {"name": str})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue