Autor Téma: SQLite reštruktúrovať tabuľku - FireDAC  (Přečteno 143 krát)

Online Miroslav Baláž

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
SQLite reštruktúrovať tabuľku - FireDAC
« kdy: 26-06-2018, 01:55:20 »
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á.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2125
  • Karma: 114
    • Verze Delphi: D2007, XE3, DX10
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #1 kdy: 26-06-2018, 08:24:15 »
Zmena by mala byť vlastne len formalitou, nastavením nových mantinelov. Kontainer ako taký propblém nemá.
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.

Online Miroslav Baláž

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #2 kdy: 26-06-2018, 09:36:00 »
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

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 950
  • Karma: 43
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #3 kdy: 26-06-2018, 12:14:08 »
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.

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.
« Poslední změna: 26-06-2018, 12:15:53 od Delfin »
I'm a soldier, so don't panic! I know the underground! No more Google, go duck, go!

Online Miroslav Baláž

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #4 kdy: 26-06-2018, 14:03:58 »
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.
..
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.
Toto sa mi páči, vyskúšam..

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 950
  • Karma: 43
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #5 kdy: 26-06-2018, 14:16:49 »
Toto sa mi páči, vyskúšam..

Nicmene stale nechapu proc se vubec trapit pseudo datovymi typy jenz FireDAC nabizi. Nebude nakonec jednodussi pouzit jen storage tridy nabizene SQLite? Ze strany FireDAC jde o "bonus" k SQLite engine ktery se nakonec snazis obejit.
« Poslední změna: 26-06-2018, 14:18:49 od Delfin »
I'm a soldier, so don't panic! I know the underground! No more Google, go duck, go!

Online Miroslav Baláž

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #6 kdy: 26-06-2018, 14:55:34 »
Ten FireDAC "bonus" / pseudo datove typy, hodlam vyuzit.
Uz aj napriklad pre defaultnu sirku v dbGrid. Keby som pouzil Text( 1024 ), som za vodou, ale zobrazenie.. Nie je to vsak jediny dovod.

V priebehu casu sa moze stat, ze sa data vyvinu smerom k vyssim hodnotam. Typicky pole typu text, moze casom expandovat.
Preto existuje v inych databazach plnohodnotny "ALTER TABLE ALTER COLUMN"
Taky MS Access urcite nevyzaduje kopirovanie tabulky pri "upgrade" pola
« Poslední změna: 26-06-2018, 14:59:28 od Miroslav Baláž »

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 950
  • Karma: 43
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:SQLite reštruktúrovať tabuľku - FireDAC
« Odpověď #7 kdy: 26-06-2018, 15:06:38 »
Ten bonus hodlam vyuzit. V priebehu casu sa moze stat, ze sa data vyvinu smerom k vyssim hodnotam. Typicky pole typu text, moze casom expandovat.
Preto existuje v inych databazach plnohodnotny "ALTER TABLE ALTER COLUMN"
Taky MS Access urcite nevyzaduje kopirovanie tabulky pri "upgrade" pola

Ta kopie neni nic sloziteho. Abychom zustali u tematu. FireDAC momentalne nenabizi nativni zpusob modifikace schema databaze (ani SQLite nema jiny ALTER nez pomoci SQL). Muzes ty restrikce zkusit obejit upravou kodu nebo 2 oficialnimi zpusoby, nicmene porad jde o to ze mas urcitou definici tabulek jenz bych se osobne nesnazil ignorovat ale upravit (tedy tou uvedenou kopii).
« Poslední změna: 26-06-2018, 15:12:50 od Delfin »
I'm a soldier, so don't panic! I know the underground! No more Google, go duck, go!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: