Skip to content

Commit

Permalink
create-table now supports multiple --pk, refs #620
Browse files Browse the repository at this point in the history
  • Loading branch information
simonw committed Mar 17, 2024
1 parent 1dc5da3 commit 23be5be
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
2 changes: 2 additions & 0 deletions docs/cli.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1909,6 +1909,8 @@ This will create a table called ``mytable`` with two columns - an integer ``id``

You can pass as many column-name column-type pairs as you like. Valid types are ``integer``, ``text``, ``float`` and ``blob``.

Pass ``--pk`` more than once for a compound primary key that covers multiple columns.

You can specify columns that should be NOT NULL using ``--not-null colname``. You can specify default values for columns using ``--default colname defaultvalue``.

.. code-block:: bash
Expand Down
6 changes: 3 additions & 3 deletions sqlite_utils/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -1489,7 +1489,7 @@ def create_database(path, enable_wal, init_spatialite, load_extension):
)
@click.argument("table")
@click.argument("columns", nargs=-1, required=True)
@click.option("--pk", help="Column to use as primary key")
@click.option("pks", "--pk", help="Column to use as primary key", multiple=True)
@click.option(
"--not-null",
multiple=True,
Expand Down Expand Up @@ -1532,7 +1532,7 @@ def create_table(
path,
table,
columns,
pk,
pks,
not_null,
default,
fk,
Expand Down Expand Up @@ -1581,7 +1581,7 @@ def create_table(
)
db[table].create(
coltypes,
pk=pk,
pk=pks[0] if len(pks) == 1 else pks,
not_null=not_null,
defaults=dict(default),
foreign_keys=fk,
Expand Down
8 changes: 8 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -1180,6 +1180,14 @@ def test_upsert_alter(db_path, tmpdir):
["age", "integer", "--default", "age", "3"],
("CREATE TABLE [t] (\n" " [age] INTEGER DEFAULT '3'\n" ")"),
),
# Compound primary key
(
["category", "text", "name", "text", "--pk", "category", "--pk", "name"],
(
"CREATE TABLE [t] (\n [category] TEXT,\n [name] TEXT,\n"
" PRIMARY KEY ([category], [name])\n)"
),
),
],
)
def test_create_table(args, schema):
Expand Down

0 comments on commit 23be5be

Please sign in to comment.