Sarim Ahmed
Sarim Ahmed

Reputation: 191

SQLDelight Migration

I am trying to add more columns in table in SQLDelight. I have made a migration file 1.sqm. In migration file it gives error that no table found. enter image description here

My build.gradle.kts:

sqldelight {
    database("AppDatabase") {
        packageName = "com.jetbrains.handson.kmm.shared.cache"
        schemaOutputDirectory = file("shared/src/commonMain/sqldelight/com/jetbrains/handson/kmm/shared/cache/AppDatabase.sq")
        migrationOutputDirectory = file("shared/src/commonMain/sqldelight/migrations/1.sqm")
        migrationOutputFileFormat = ".sqm" 
        schemaOutputDirectory
        deriveSchemaFromMigrations = true
    }
}

Create table statement:

CREATE TABLE pos_orders(id INTEGER AS Int PRIMARY KEY, orderId INTEGER AS Int , dateandtime TEXT, restaurant_id INTEGER AS Int, restaurant_name TEXT, deliveryType_description TEXT, paymentType_description TEXT, totalAmount REAL AS Float,
process_order INTEGER AS Int, pos_accept INTEGER AS Int, pos_printed INTEGER AS Int, status INTEGER AS Int, prep_time INTEGER AS Int, desired_delivery_time TEXT, restaurant_address TEXT, customerNo TEXT, title TEXT, firstName TEXT, lastName TEXT,company TEXT, street TEXT, houseNo TEXT, zip TEXT, city TEXT, state TEXT,floor TEXT, bezirk TEXT, bellname TEXT, email TEXT, phoneNo TEXT, fax TEXT, taxAmount REAL AS Float, total REAL AS Float , deliverycharges REAL AS Float,
deliveryType INTEGER AS Int, paymentType INTEGER AS Int, comment TEXT, order_note TEXT, sender TEXT, cancelation_cause TEXT, demo_order INTEGER AS Int, orderDate TEXT, updated TEXT);

Upvotes: 8

Views: 5546

Answers (2)

Artem_Iens
Artem_Iens

Reputation: 312

Had the same issue. When I deleted everything from gradle except packageName, the error "No table found..." was still there, but migration worked as intended.

Here's my example, I needed to delete some columns from table

sqldelight {
    database("AppDatabase") {
        packageName = "com.my.domain.db"
    }
}

1.sqm file

CREATE TEMPORARY TABLE profileTemp (
id TEXT NOT NULL PRIMARY KEY,
name TEXT,
birthdate TEXT,
);
INSERT INTO profileTemp SELECT id, name, birthdate, FROM ProfileSQL;
DROP TABLE ProfileSQL;
CREATE TABLE ProfileSQL (
id TEXT NOT NULL PRIMARY KEY,
name TEXT,
birthdate TEXT,
);
INSERT INTO ProfileSQL SELECT id, name, birthdate, FROM profileTemp;
DROP TABLE profileTemp;

Upvotes: 0

Fady Emad
Fady Emad

Reputation: 173

sqldelight {
    database("AppDatabase") {
        packageName = "com.jetbrains.handson.kmm.shared.cache"
        schemaOutputDirectory = file("com.jetbrains.handson.kmm.shared.cache")
        migrationOutputDirectory = file("com.jetbrains.handson.kmm.shared.cache")
        deriveSchemaFromMigrations = true
        verifyMigrations = true
    }
}

change the gradle.build to the above one then in the path exactly as i write with the two folders sqldelight

shared/src/commonMain/sqldelight/com/jetbrains/handson/kmm/shared/cache/sqldelight


in the sqldelight folder put all your database files AppDatabase.sq, 1.sqm, 2.sqm ... so on

the trick is here in the AppDatabase.sq put only the db queries.

AppDatabase should looklike

getAll:
SELECT * FROM pos_orders;

deleteAll:
DELETE FROM pos_orders;

and create another one 1.sqm to put your original tables and create 2.sqm to put your migration.

1.sqm should looklike

CREATE TABLE pos_orders(id INTEGER AS Int PRIMARY KEY, orderId INTEGER AS Int , dateandtime TEXT, restaurant_id INTEGER AS Int, restaurant_name TEXT, deliveryType_description TEXT, paymentType_description TEXT, totalAmount REAL AS Float,
process_order INTEGER AS Int, pos_accept INTEGER AS Int, pos_printed INTEGER AS Int, status INTEGER AS Int, prep_time INTEGER AS Int, desired_delivery_time TEXT, restaurant_address TEXT, customerNo TEXT, title TEXT, firstName TEXT, lastName TEXT,company TEXT, street TEXT, houseNo TEXT, zip TEXT, city TEXT, state TEXT,floor TEXT, bezirk TEXT, bellname TEXT, email TEXT, phoneNo TEXT, fax TEXT, taxAmount REAL AS Float, total REAL AS Float , deliverycharges REAL AS Float,
deliveryType INTEGER AS Int, paymentType INTEGER AS Int, comment TEXT, order_note TEXT, sender TEXT, cancelation_cause TEXT, demo_order INTEGER AS Int, orderDate TEXT, updated TEXT);

2.sqm should looklike

ALTER TABLE pos_orders ADD COLUMN year INTEGER ;

Upvotes: 3

Related Questions