drizzle-team / drizzle-team/drizzle-orm

[BUG]: Expo SQLite generatedAlwaysAs wrong migration

Open
#5,241 0 comments 0 reactions 0 assignees View on GitHub
bug bug/fixed-in-beta db/sqlite drizzle/kit
Dominant language
TypeScript
Stars
35.8k
Forks
1.6k
Avg merge
2d 7h
Merged PRs (30d)
4

Description

### Report hasn't been filed before.

- [x] I have verified that the bug I'm about to report hasn't been filed before.

### What version of `drizzle-orm` are you using?

0.45.1

### What version of `drizzle-kit` are you using?

0.31.6

### Other packages

_No response_

### Describe the Bug

When drizzle kit generates migration with data-moving statements, for table with generatedAlwaysAs, it tries to insert into the generated column.

Example

Change
```
const testTable = sqliteTable("test_table", {
id: text().primaryKey(),
likes: integer("likes").notNull().default(0),
dislikes: integer("dislikes").notNull().default(0),
votes: integer("votes").generatedAlwaysAs(sql`likes + dislikes`),
count: integer("count").notNull(),
});
```
to
```
const testTable = sqliteTable("test_table", {
id: text().primaryKey(),
likes: integer("likes").notNull().default(0),
dislikes: integer("dislikes").notNull().default(0),
votes: integer("votes").generatedAlwaysAs(sql`likes + dislikes`),
count: integer("count"),
});
```
generated migration
```
CREATE TABLE `__new_test_table` (
`id` text PRIMARY KEY NOT NULL,
`likes` integer DEFAULT 0 NOT NULL,
`dislikes` integer DEFAULT 0 NOT NULL,
`votes` integer GENERATED ALWAYS AS (likes + dislikes) VIRTUAL,
`count` integer
);
--> statement-breakpoint
INSERT INTO `__new_test_table`("id", "likes", "dislikes", "votes", "count") SELECT "id", "likes", "dislikes", "votes", "count" FROM `test_table`;--> statement-breakpoint
DROP TABLE `test_table`;--> statement-breakpoint
ALTER TABLE `__new_test_table` RENAME TO `test_table`;--> statement-breakpoint
PRAGMA foreign_keys=ON;
```

error

```
Failed to run the query '
INSERT INTO `__new_test_table`("id", "likes", "dislikes", "votes", "count") SELECT "id", "likes", "dislikes", "votes", "count" FROM `test_table`;' [Error: FunctionCallException: Calling the 'prepareSync' function has failed (at ExpoModulesCore/SyncFunctionDefinition.swift:137)
→ Caused by: SQLiteErrorException: Error code 1: cannot INSERT into generated column "votes" (at ExpoSQLite/SQLiteModule.swift:382)]
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.