diff --git a/.changepacks/changepack_log_KYO7bQOcPhhU8kIwATtUP.json b/.changepacks/changepack_log_KYO7bQOcPhhU8kIwATtUP.json new file mode 100644 index 0000000..fa04291 --- /dev/null +++ b/.changepacks/changepack_log_KYO7bQOcPhhU8kIwATtUP.json @@ -0,0 +1 @@ +{"changes":{"crates/vespertide-config/Cargo.toml":"Patch","crates/vespertide-exporter/Cargo.toml":"Patch","crates/vespertide-naming/Cargo.toml":"Patch","crates/vespertide-loader/Cargo.toml":"Patch","crates/vespertide/Cargo.toml":"Patch","crates/vespertide-query/Cargo.toml":"Patch","crates/vespertide-cli/Cargo.toml":"Patch","crates/vespertide-macro/Cargo.toml":"Patch","crates/vespertide-planner/Cargo.toml":"Patch","crates/vespertide-core/Cargo.toml":"Patch"},"note":"Fix auto increament issue on sqlite","date":"2026-01-15T12:38:07.170780700Z"} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index f3c8b4f..3c65f8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2995,7 +2995,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vespertide" -version = "0.1.27" +version = "0.1.28" dependencies = [ "vespertide-core", "vespertide-macro", @@ -3003,7 +3003,7 @@ dependencies = [ [[package]] name = "vespertide-cli" -version = "0.1.27" +version = "0.1.28" dependencies = [ "anyhow", "assert_cmd", @@ -3028,7 +3028,7 @@ dependencies = [ [[package]] name = "vespertide-config" -version = "0.1.27" +version = "0.1.28" dependencies = [ "clap", "schemars", @@ -3038,7 +3038,7 @@ dependencies = [ [[package]] name = "vespertide-core" -version = "0.1.27" +version = "0.1.28" dependencies = [ "rstest", "schemars", @@ -3050,7 +3050,7 @@ dependencies = [ [[package]] name = "vespertide-exporter" -version = "0.1.27" +version = "0.1.28" dependencies = [ "insta", "rstest", @@ -3061,7 +3061,7 @@ dependencies = [ [[package]] name = "vespertide-loader" -version = "0.1.27" +version = "0.1.28" dependencies = [ "anyhow", "rstest", @@ -3076,7 +3076,7 @@ dependencies = [ [[package]] name = "vespertide-macro" -version = "0.1.27" +version = "0.1.28" dependencies = [ "proc-macro2", "quote", @@ -3093,11 +3093,11 @@ dependencies = [ [[package]] name = "vespertide-naming" -version = "0.1.27" +version = "0.1.28" [[package]] name = "vespertide-planner" -version = "0.1.27" +version = "0.1.28" dependencies = [ "insta", "rstest", @@ -3108,7 +3108,7 @@ dependencies = [ [[package]] name = "vespertide-query" -version = "0.1.27" +version = "0.1.28" dependencies = [ "insta", "rstest", diff --git a/SKILL.md b/SKILL.md index 0ef0e67..e491602 100644 --- a/SKILL.md +++ b/SKILL.md @@ -56,6 +56,28 @@ cargo install vespertide-cli --- +## Exported ORM Files (DO NOT EDIT) + +> **CRITICAL**: Files generated by `vespertide export` are AUTO-GENERATED. Never modify them manually. + +### Rules + +1. **Never manually edit** exported files (SeaORM entities, SQLAlchemy models, etc.) +2. **Always regenerate** by running `vespertide export --orm ` +3. **Edit source models** in `models/*.json` instead, then re-export + +### Workflow + +```bash +# 1. Edit your model files (models/*.json) +# 2. Regenerate ORM code +vespertide export --orm seaorm + +# 3. Never touch the generated files after this +``` + +--- + ## Migration Files (DO NOT EDIT) > **CRITICAL**: Migration files are AUTO-GENERATED. Never create or modify them manually. @@ -625,6 +647,7 @@ Both columns with `"primary_key": true` creates a **single composite primary key 3. **Never add NOT NULL columns without default** - Requires `fill_with` in migration 4. **Never use table-level constraints** - Except for CHECK expressions only 5. **Never manually create/edit migration files** - Only `fill_with` exception +6. **Never manually edit exported ORM files** - Use `vespertide export` to regenerate ### Naming Conventions diff --git a/crates/vespertide-query/src/sql/create_table.rs b/crates/vespertide-query/src/sql/create_table.rs index ffa76ba..e52f5ba 100644 --- a/crates/vespertide-query/src/sql/create_table.rs +++ b/crates/vespertide-query/src/sql/create_table.rs @@ -49,6 +49,11 @@ pub(crate) fn build_create_table_for_backend( // Apply auto_increment if this column is in the auto_increment primary key if auto_increment_columns.contains(column.name.as_str()) { + // For SQLite, AUTOINCREMENT requires inline PRIMARY KEY (INTEGER PRIMARY KEY AUTOINCREMENT) + // So we must call primary_key() on the column even if there's a table-level PRIMARY KEY + if matches!(backend, DatabaseBackend::Sqlite) { + col.primary_key(); + } col.auto_increment(); } @@ -64,8 +69,13 @@ pub(crate) fn build_create_table_for_backend( match constraint { TableConstraint::PrimaryKey { columns: pk_cols, - auto_increment: _, + auto_increment, } => { + // For SQLite with auto_increment, skip table-level PRIMARY KEY + // because AUTOINCREMENT requires inline PRIMARY KEY on the column + if matches!(backend, DatabaseBackend::Sqlite) && *auto_increment { + continue; + } // Build primary key index let mut pk_idx = Index::create(); for c in pk_cols { diff --git a/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_auto_increment_primary_key@create_table_with_auto_increment_Sqlite.snap b/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_auto_increment_primary_key@create_table_with_auto_increment_Sqlite.snap index 43c926a..5f6ffb7 100644 --- a/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_auto_increment_primary_key@create_table_with_auto_increment_Sqlite.snap +++ b/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_auto_increment_primary_key@create_table_with_auto_increment_Sqlite.snap @@ -2,4 +2,4 @@ source: crates/vespertide-query/src/sql/create_table.rs expression: sql --- -CREATE TABLE "users" ( "id" integer NOT NULL AUTOINCREMENT, PRIMARY KEY ("id") ) +CREATE TABLE "users" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT ) diff --git a/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_inline_auto_increment_primary_key@create_table_with_inline_auto_increment_Sqlite.snap b/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_inline_auto_increment_primary_key@create_table_with_inline_auto_increment_Sqlite.snap index 43c926a..5f6ffb7 100644 --- a/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_inline_auto_increment_primary_key@create_table_with_inline_auto_increment_Sqlite.snap +++ b/crates/vespertide-query/src/sql/snapshots/vespertide_query__sql__create_table__tests__create_table_with_inline_auto_increment_primary_key@create_table_with_inline_auto_increment_Sqlite.snap @@ -2,4 +2,4 @@ source: crates/vespertide-query/src/sql/create_table.rs expression: sql --- -CREATE TABLE "users" ( "id" integer NOT NULL AUTOINCREMENT, PRIMARY KEY ("id") ) +CREATE TABLE "users" ( "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT )