Databáze > Ostatní DB

SQLite reštruktúrovať tabuľku - FireDAC

(1/2) > >>

miroB:
Alter table v SQLite toho veľa nedokáže.
Sú návody, ako reštruktúrovať tabuľku skopírovaním do novej.
Niečo ako "Lite" reštrukturalizácia, by nešla?
Napríklad :
     Text(30) na Text(100).
Podľa všetkého, SQLite engine to je jedno. Poriadok stráži FireDAC.
Dala by sa tabuľka reštruktúrovať len na úrovni FiredDAC, bez kopírovania údajov?
Niečo ako uvoľnenie reštrikcie.
Iná vec:
   SMALLINT, zmena na INT, resp. BIGINT.
Podľa všetkého Engina aj tak používa BigINT, lenže Firedac drží stráž a nepustí do SMALLINT už ani číslo 32768. Aj keď fyzické ukladanie je do priestoru BIGINT.
Zmena by mala byť vlastne len formalitou, nastavením nových mantinelov. Kontainer ako taký propblém nemá.

pf1957:

--- Citace: Miroslav Baláž  26-06-2018, 01:55:20 ---Zmena by mala byť vlastne len formalitou, nastavením nových mantinelov. Kontainer ako taký propblém nemá.

--- Konce citace ---
Jestli si to za ta leta, co s tim nedelam, nezmenilo, tak SQLite si drzi DDL command v MASTER_TABLE. Odtamtud si to FireDAC precte a chova se podle toho, stejne jako se podle toho chova SQLite engine. Kdyz se podivas v SQLite consoli prikazem .schema <tablename>, tak bys mel videt uz ta omezeni.

A pak by teoreticky mohlo stacit vhodne zmenit ten SQL command v MASTER_TABLE se zachovanim mapovani na fyzicke typy SQLite.

miroB:
Zda sa to logicke a aj prakticky vykonatelne. Predpokladam vsak, ze praca s SQLite, ma vo FireDAC dve urovne.
Napriklad informaciu o nestandartnej interpretacii typu datum/cas.
Databaza SQLite v ramci CREATE TABLE tiez akceptuje napriklad SMALLINT,
ale fyzicky ho nepodporuje, interne ho zrejme nahradi BIGINT.
Preto si myslim, ze v tom ma prsty FireDAC.
Chcel by som menit aj tie nadstavbove vlastnosti, ak by sa dalo.
Zakladny namet beriem. Vyskusam. Dik

100317:

--- Citace: Miroslav Baláž  26-06-2018, 01:55:20 ---Podľa všetkého, SQLite engine to je jedno. Poriadok stráži FireDAC.
Dala by sa tabuľka reštruktúrovať len na úrovni FiredDAC, bez kopírovania údajov?
Niečo ako uvoľnenie reštrikcie.

--- Konce citace ---

S pouzitim FireDAC pseudotypu by od nej nebylo pekne kdyby pripravil sloupec typu TLargeIntField pro datovy typ napr. SMALLINT. Takze ano, limit je na strane FireDAC.

Datove typy sloupcu si nechava FireDAC popisovat od SQLite engine po priprave prikazu ke spusteni (viz metoda TFDPhysSQLiteCommand.CreateColInfos a z ni volany getter TSQLiteValueDef.CreateForColumn jenz vola SQLite API funkci sqlite3_column_decltype). Pak si je mapuje na vlastni.

Oficialni moznosti jsou 2, mapovani a hinty datovych typu v SQL prikazu. Neoficialni by mohla byt uprava kodu zminovanych metod s tim ze pokud by se modifikovaly zdrojove datove typy, FireDAC by vytvoril odpovidajici mapovany sloupec a data by se do SQLite ulozila (samozrejme s prekrocenou hranici). Tedy alespon bych to cekal; nezkousel jsem.

miroB:

--- Citace: Delfin  26-06-2018, 12:14:08 ---
--- Citace: Miroslav Baláž  26-06-2018, 01:55:20 ---Podľa všetkého, SQLite engine to je jedno. Poriadok stráži FireDAC.
Dala by sa tabuľka reštruktúrovať len na úrovni FiredDAC, bez kopírovania údajov?
Niečo ako uvoľnenie reštrikcie.

--- Konce citace ---
..
Datove typy sloupcu si nechava FireDAC popisovat od SQLite engine po priprave prikazu ke spusteni (viz metoda TFDPhysSQLiteCommand.CreateColInfos a z ni volany getter TSQLiteValueDef.CreateForColumn jenz vola SQLite API funkci sqlite3_column_decltype). Pak si je mapuje na vlastni.

Oficialni moznosti jsou 2, mapovani a hinty datovych typu v SQL prikazu. Neoficialni by mohla byt uprava kodu zminovanych metod s tim ze pokud by se modifikovaly zdrojove datove typy, FireDAC by vytvoril odpovidajici mapovany sloupec a data by se do SQLite ulozila (samozrejme s prekrocenou hranici). Tedy alespon bych to cekal; nezkousel jsem.

--- Konce citace ---
Toto sa mi páči, vyskúšam..

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi