expo-sqlite как добавить колонку в таблицу, если колонка еще не существует?
Использую expo-sqlite. Хочу добавить к уже существующей таблице колонку, если она не существует через IF NOT EXISTS это не работает.
В интернете нашел что нужно объединить вот эти 2 кода:
ALTER TABLE table_name ADD COLUMN column_name TEXT
SELECT COUNT(*) AS CNTREC FROM pragma_table_info('table_name') WHERE name='column_name'
пробовал через
IFF, CASE THEN ELSE END,
такой вариант тоже пробовал
IF NOT EXISTS (
SELECT
*
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'table_name' AND COLUMN_NAME = 'column_name')
BEGIN
ALTER TABLE table_name
ADD column_name TEXT NULL
END;
Но ничего из этого не работает, подскажите пожалуйста еще какие нибудь варианты.
Ответы (2 шт):
Автор решения: tomato-magnet-regulato
→ Ссылка
IF NOT EXISTS( SELECT NULL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tablename'
AND table_schema = 'db_name'
AND column_name = 'columnname') THEN
ALTER TABLE `TableName` ADD `ColumnName` int(1) NOT NULL default '0';
END IF;
Взял тут
Автор решения: Dmitry
→ Ссылка
Мне пришла мысль как это можно сделать через JS, если кому пригодится. доделайте это под себя:
export class DB {
static AlterColumn(){
return new Promise((resolve, reject) => {
db.transaction(tx => {
tx.executeSql( `ALTER TABLE table_name ADD COLUMN column_name DATE NOT NULL DEFAULT ''`,
[],
resolve,
(_, error) => reject(error)
);
});
});
}
}
далее в js файле
...
const arr = useSelector(state => state.db_name.table_name);
const filterArr = arr.filter(table_name => table_name.column_name === '' );
if(filterArr.length === 0){
DB.AlterColumn();
}
...