progs:fblutil
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
| progs:fblutil [2020/01/17 08:57] – vytvořeno Karel Petrů | progs:fblutil [2020/01/31 14:23] (aktuální) – Karel Petrů | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| ====== FBLUtil ====== | ====== FBLUtil ====== | ||
| - | ===== Klonovani mezi DB ===== | + | ===== Import ceniku z CSV ===== |
| <code LUA> | <code LUA> | ||
| + | --../ | ||
| + | |||
| + | local DBName = " | ||
| + | local CenikName=arg[1] | ||
| + | local ImportFN = "/ | ||
| + | local IDDruh=" | ||
| + | local Prefix=string.upper(string.sub(CenikName, | ||
| + | local PrefixNumChars=4 | ||
| + | local ISC_PASSWORD=os.getenv(" | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | print(" | ||
| + | local db = FBLUtil.ConnectDB(DBName, | ||
| + | |||
| + | function CloneTable(db1, | ||
| + | local r=db1: | ||
| + | if #r>0 then --tabulka existuje | ||
| + | print(" | ||
| + | db1: | ||
| + | db1: | ||
| + | end | ||
| + | local t = db1: | ||
| + | local flds = "" | ||
| + | for i, v in ipairs(t) do | ||
| + | local s = string.format(" | ||
| + | if flds ~= "" | ||
| + | flds = flds .. ", " | ||
| + | end | ||
| + | flds = flds .. s | ||
| + | end | ||
| + | print(" | ||
| + | db1: | ||
| + | db1: | ||
| + | local t = db1: | ||
| + | for i, v in ipairs(t) do | ||
| + | db1: | ||
| + | if v.Inactive then | ||
| + | db1: | ||
| + | end | ||
| + | end | ||
| + | db1: | ||
| + | end | ||
| + | |||
| + | function CloneCenik() | ||
| + | CloneTable(db, | ||
| + | end | ||
| + | |||
| + | function GetNextPrefixNum(NumChars) | ||
| + | local r=db: | ||
| + | --print(r) | ||
| + | local p=string.format(" | ||
| + | local n=0 | ||
| + | if # | ||
| + | local f=string.len(Prefix)+1 | ||
| + | local t=string.len(Prefix)+NumChars | ||
| + | n=string.sub(r.Rows[1][1], | ||
| + | --print(p, | ||
| + | end | ||
| + | return string.format(p, | ||
| + | end | ||
| + | |||
| + | local PrefixNum=GetNextPrefixNum(PrefixNumChars) | ||
| + | |||
| + | function Import_testcen() | ||
| + | print(" | ||
| + | local t = os.time() | ||
| + | print(string.format(" | ||
| + | local n = db: | ||
| + | | ||
| + | values (' | ||
| + | db:Commit() | ||
| + | print(string.format(" | ||
| + | end | ||
| + | |||
| + | function UpdateCenik() | ||
| + | print(" | ||
| + | local t = os.time() | ||
| + | local n=db: | ||
| + | naklady=(select naklady from v_rozpocty_cenik v where v.v_iddod=c.v_iddod and c.iddruh=v.iddruh), | ||
| + | DatumZmeny=CURRENT_TIMESTAMP | ||
| + | where | ||
| + | exists (select * from v_rozpocty_cenik v where v.v_iddod=c.v_iddod)]], | ||
| + | db:Commit() | ||
| + | print(string.format(" | ||
| + | t = os.time() | ||
| + | local n=db: | ||
| + | where not exists (select * from rozpocty_cenik c where c.v_iddod=v.v_iddod and c.iddruh=v.iddruh) | ||
| + | ]],{}) | ||
| + | db:Commit() | ||
| + | print(string.format(" | ||
| + | end | ||
| + | |||
| + | function CreateCenik() | ||
| + | print(" | ||
| + | local t = os.time() | ||
| + | db: | ||
| + | local n=db: | ||
| + | db:Commit() | ||
| + | print(string.format(" | ||
| + | end | ||
| + | |||
| + | |||
| + | CloneCenik() | ||
| + | |||
| + | assert(load(" | ||
| + | |||
| + | if tonumber(PrefixNum) == 0 then | ||
| + | CreateCenik() | ||
| + | else | ||
| + | UpdateCenik() | ||
| + | end | ||
| + | |||
| + | db: | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Prenos dat mezi DB, Import, Export ===== | ||
| + | |||
| + | <code LUA> | ||
| + | local Path = " | ||
| + | local DBName1 = " | ||
| + | local DBName2 = " | ||
| + | local Tmp = "/ | ||
| + | local FName0 = " | ||
| + | local FName1 = " | ||
| + | |||
| function CloneTable(db1, | function CloneTable(db1, | ||
| local t = db1: | local t = db1: | ||
| Řádek 39: | Řádek 166: | ||
| return n | return n | ||
| end | end | ||
| + | |||
| + | print(" | ||
| + | print(" | ||
| + | local db = FBLUtil.ConnectDB(Path..DBName1, | ||
| + | local ok, db2 = pcall(FBLUtil.ConnectDB, | ||
| + | if not ok then | ||
| + | print(" | ||
| + | db2 = FBLUtil.CreateDB(Path..DBName2, | ||
| + | --db2 = FBLUtil.CreateDB(Path..DBName2, | ||
| + | end | ||
| + | |||
| + | function TestTable(TableName) | ||
| + | print(" | ||
| + | local Fields = db: | ||
| + | |||
| + | local flds = "" | ||
| + | local vals = "" | ||
| + | local parms = "" | ||
| + | for i, v in ipairs(Fields) do | ||
| + | if flds ~= "" | ||
| + | flds = flds .. v.Field | ||
| + | if vals ~= "" | ||
| + | vals = vals .. " | ||
| + | if parms ~= "" | ||
| + | parms = parms .. "?" | ||
| + | end | ||
| + | local match = "" | ||
| + | local ix = db: | ||
| + | for i, v in ipairs(ix) do | ||
| + | if v.Opts == " | ||
| + | match = v.Fields | ||
| + | break | ||
| + | end | ||
| + | end | ||
| + | |||
| + | local t = os.time() | ||
| + | --local TableRows = db: | ||
| + | local TableRows = db: | ||
| + | print(string.format(" | ||
| + | |||
| + | local t2idx = {} | ||
| + | for i, v in ipairs(db2: | ||
| + | t2idx[v] = true | ||
| + | end | ||
| + | if t2idx[TableName] then | ||
| + | db2: | ||
| + | db2: | ||
| + | end | ||
| local t = os.time() | local t = os.time() | ||
| print(" | print(" | ||
| - | CloneTable(db1, TableName, db2) | + | CloneTable(db, TableName, db2) |
| - | local n = db1: | + | local n = db: |
| db2: | db2: | ||
| - | CloneIndices(db1, TableName, db2) | + | CloneIndices(db, TableName, db2) |
| print(string.format(" | print(string.format(" | ||
| local n = ExportAndDiff(db2, | local n = ExportAndDiff(db2, | ||
| Řádek 51: | Řádek 226: | ||
| db2: | db2: | ||
| db2: | db2: | ||
| + | |||
| + | local t = os.time() | ||
| + | print(" | ||
| + | CloneTable(db, | ||
| + | CloneIndices(db, | ||
| + | --local n = db2: | ||
| + | local n = db2: | ||
| + | db2: | ||
| + | --CloneIndices(db, | ||
| + | print(string.format(" | ||
| + | assert(TableRows == n) | ||
| + | local n = ExportAndDiff(db2, | ||
| + | assert(TableRows == n) | ||
| + | db2: | ||
| + | db2: | ||
| + | |||
| + | local t = os.time() | ||
| + | print(" | ||
| + | CloneTable(db, | ||
| + | local Struct = {} | ||
| + | --local n = db: | ||
| + | local n = db: | ||
| + | function(t) | ||
| + | if t.Structure then | ||
| + | for i, v in ipairs(t.Structure) do | ||
| + | local tt = {} | ||
| + | for kk, vv in pairs(v) do | ||
| + | tt[kk] = vv | ||
| + | end | ||
| + | table.insert(Struct, | ||
| + | end | ||
| + | else | ||
| + | --print(t) | ||
| + | --db2: | ||
| + | db2: | ||
| + | --return false --ukoncit | ||
| + | end | ||
| + | end | ||
| + | ) | ||
| + | db2: | ||
| + | CloneIndices(db, | ||
| + | print(string.format(" | ||
| + | assert(TableRows == n) | ||
| + | --print(" | ||
| + | local n = ExportAndDiff(db2, | ||
| + | assert(TableRows == n) | ||
| + | end | ||
| + | |||
| + | --print(db: | ||
| + | |||
| + | local t = db: | ||
| + | if arg and arg[1] then | ||
| + | TestTable(arg[1]) | ||
| + | else | ||
| + | for i, v in ipairs(t) do | ||
| + | TestTable(v) | ||
| + | end | ||
| + | end | ||
| + | |||
| + | db2:Drop() | ||
| + | --db2: | ||
| + | |||
| + | db: | ||
| + | |||
| + | print(" | ||
| + | return 6 | ||
| </ | </ | ||
progs/fblutil.1579251441.txt.gz · Poslední úprava: 2020/01/17 08:57 autor: Karel Petrů