mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-27 20:34:12 +02:00
Ability to add desc indexes using CLI, closes #260
This commit is contained in:
parent
c374d7ef04
commit
9a8c6fa020
3 changed files with 32 additions and 3 deletions
|
|
@ -1033,6 +1033,14 @@ Use the ``--unique`` option to create a unique index.
|
||||||
|
|
||||||
Use ``--if-not-exists`` to avoid attempting to create the index if one with that name already exists.
|
Use ``--if-not-exists`` to avoid attempting to create the index if one with that name already exists.
|
||||||
|
|
||||||
|
To add an index on a column in descending order, prefix the column with a hyphen. Since this can be confused for a command-line option you need to construct that like this::
|
||||||
|
|
||||||
|
$ sqlite-utils create-index mydb.db mytable -- col1 -col2 col3
|
||||||
|
|
||||||
|
This will create an index on that table on ``(col1, col2 desc, col3)``.
|
||||||
|
|
||||||
|
If your column names are already prefixed with a hyphen you'll need to manually execute a ``CREATE INDEX`` SQL statement to add indexes to them rather than using this tool.
|
||||||
|
|
||||||
.. _cli_fts:
|
.. _cli_fts:
|
||||||
|
|
||||||
Configuring full-text search
|
Configuring full-text search
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from datetime import datetime
|
||||||
import hashlib
|
import hashlib
|
||||||
import pathlib
|
import pathlib
|
||||||
import sqlite_utils
|
import sqlite_utils
|
||||||
from sqlite_utils.db import AlterError
|
from sqlite_utils.db import AlterError, DescIndex
|
||||||
import textwrap
|
import textwrap
|
||||||
import io
|
import io
|
||||||
import itertools
|
import itertools
|
||||||
|
|
@ -450,11 +450,21 @@ def index_foreign_keys(path, load_extension):
|
||||||
)
|
)
|
||||||
@load_extension_option
|
@load_extension_option
|
||||||
def create_index(path, table, column, name, unique, if_not_exists, load_extension):
|
def create_index(path, table, column, name, unique, if_not_exists, load_extension):
|
||||||
"Add an index to the specified table covering the specified columns"
|
"""
|
||||||
|
Add an index to the specified table covering the specified columns.
|
||||||
|
Use "sqlite-utils create-index mydb -- -column" to specify descending
|
||||||
|
order for a column.
|
||||||
|
"""
|
||||||
db = sqlite_utils.Database(path)
|
db = sqlite_utils.Database(path)
|
||||||
_load_extensions(db, load_extension)
|
_load_extensions(db, load_extension)
|
||||||
|
# Treat -prefix as descending for columns
|
||||||
|
columns = []
|
||||||
|
for col in column:
|
||||||
|
if col.startswith("-"):
|
||||||
|
col = DescIndex(col[1:])
|
||||||
|
columns.append(col)
|
||||||
db[table].create_index(
|
db[table].create_index(
|
||||||
column, index_name=name, unique=unique, if_not_exists=if_not_exists
|
columns, index_name=name, unique=unique, if_not_exists=if_not_exists
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -208,6 +208,17 @@ def test_create_index(db_path):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_index_desc(db_path):
|
||||||
|
db = Database(db_path)
|
||||||
|
assert [] == db["Gosh"].indexes
|
||||||
|
result = CliRunner().invoke(cli.cli, ["create-index", db_path, "Gosh", "--", "-c1"])
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert (
|
||||||
|
db.execute("select sql from sqlite_master where type='index'").fetchone()[0]
|
||||||
|
== "CREATE INDEX [idx_Gosh_c1]\n ON [Gosh] ([c1] desc)"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"col_name,col_type,expected_schema",
|
"col_name,col_type,expected_schema",
|
||||||
(
|
(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue