From: Will Budicm Date: Sun, 25 Oct 2020 21:08:23 +0000 (+1100) Subject: Upd SQL and fixed backwards compatibility. X-Git-Url: https://lifelog.hopto.org/gitweb/?a=commitdiff_plain;h=1762bd6344d13a058520ce09be5d001227e92bc6;p=LifeLog.git Upd SQL and fixed backwards compatibility. --- diff --git a/htdocs/cgi-bin/login_ctr.cgi b/htdocs/cgi-bin/login_ctr.cgi index 2cfb331..3759f8d 100755 --- a/htdocs/cgi-bin/login_ctr.cgi +++ b/htdocs/cgi-bin/login_ctr.cgi @@ -109,7 +109,7 @@ sub processSubmit { $passw = uc crypt $passw, hex Settings->CIPHER_KEY; #CheckTables will return 1 if it was an logout set in config table. - if(&checkCreateTables()==0){ + if(checkCreateTables()==0){ $session->param('alias', $alias); $session->param('passw', $passw); $session->param('db_source', Settings::dbSrc()); @@ -362,10 +362,10 @@ sub checkCreateTables { # From v.1.6 view use server side views, for pages and correct record by ID and PID lookups. # This should make queries faster, less convulsed, and log renumeration less needed for accurate pagination. if(!$curr_tables{'VW_LOG'}) { - $rv = $db->do(&Settings::createVW_LOGStmt); + $rv = $db->do(Settings::createVW_LOGStmt()); } if(!$curr_tables{'CAT'}) { - $db->do(&Settings::createCATStmt); + $db->do(Settings::createCATStmt()); $changed = 1; }else{ # If empty something happened to it. It shouldn't be EMPTY! @@ -452,9 +452,11 @@ sub populate { @lines = split '\n', $content; close $fh; - my $insConfig = $db->prepare('INSERT INTO CONFIG (NAME,VALUE,DESCRIPTION) VALUES (?,?,?)'); - my $insCat = $db->prepare('INSERT INTO CAT VALUES (?,?,?)'); - $db->begin_work(); + my $cnfIns = 'INSERT INTO CONFIG (ID,NAME,VALUE,DESCRIPTION) VALUES (?,?,?,?)'; #for silly bckwrds compatbl; + $cnfIns = 'INSERT INTO CONFIG (NAME,VALUE,DESCRIPTION) VALUES (?,?,?)' if(Settings::isProgressDB()); + my $insCnf = $db->prepare($cnfIns); + my $insCat = $db->prepare('INSERT INTO CAT VALUES (?,?,?)'); + $db->begin_work(); foreach my $line (@lines) { last if ($line =~ //);#Not doing it with CNF1.0 @@ -482,7 +484,8 @@ $err .= "UID{$id} taken by $vars{$id}-> $line\n"; $inData = 1; if(!@arr) { $debug .= "conf.ins->".$name.",".$value.",".$tick[1]."\n"; - $insConfig->execute($name,$value,$tick[1]); + if(Settings::isProgressDB()) {$insCnf->execute($name,$value,$tick[1])} + else{$insCnf->execute($id,$name,$value,$tick[1])} } } diff --git a/htdocs/cgi-bin/system/modules/Settings.pm b/htdocs/cgi-bin/system/modules/Settings.pm index 6b33eeb..06e8a90 100644 --- a/htdocs/cgi-bin/system/modules/Settings.pm +++ b/htdocs/cgi-bin/system/modules/Settings.pm @@ -17,7 +17,7 @@ use DBI; use constant CIPHER_KEY => '95d7a85ba891da'; #DEFAULT SETTINGS HERE! -our $RELEASE_VER = '2.0'; +our $RELEASE_VER = '2.1'; our $TIME_ZONE = 'Australia/Sydney'; our $LANGUAGE = 'English'; our $PRC_WIDTH = '60'; @@ -89,9 +89,9 @@ sub isProgressDB {return $IS_PG_DB} sub createCONFIGStmt { -return qq( +if($IS_PG_DB){qq( CREATE TABLE CONFIG( - ID integer NOT NULL UNIQUE GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ), + ID INT NOT NULL UNIQUE GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ), NAME VARCHAR(16) UNIQUE, VALUE VARCHAR(28), DESCRIPTION VARCHAR(128), @@ -99,6 +99,17 @@ return qq( ); CREATE INDEX idx_config_name ON CONFIG (NAME); )} + +return qq( + CREATE TABLE CONFIG( + ID INT PRIMARY KEY NOT NULL, + NAME VCHAR(16) UNIQUE, + VALUE VCHAR(28), + DESCRIPTION VCHAR(128) + ); + CREATE INDEX idx_config_name ON CONFIG (NAME); +) +} sub createCATStmt { if($IS_PG_DB){ @@ -114,7 +125,7 @@ if($IS_PG_DB){ return qq( CREATE TABLE CAT( - ID INT PRIMARY UNIQUE KEY NOT NULL, + ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(16), DESCRIPTION VARCHAR(225) ); @@ -196,13 +207,13 @@ return qq( sub createNOTEStmt { - return qq(CREATE TABLE NOTES (LID INTEGER PRIMARY KEY NOT NULL, DOC TEXT);) + return qq(CREATE TABLE NOTES (LID INT PRIMARY KEY NOT NULL, DOC TEXT);) } sub createLOGCATSREFStmt { if($IS_PG_DB){ return qq( CREATE TABLE LOGCATSREF ( - LID INTEGER NOT NULL, + LID INT NOT NULL, CID INT NOT NULL, primary key(LID) ); @@ -211,7 +222,7 @@ return qq( # CONSTRAINT fk_cats FOREIGN KEY(CID) REFERENCES CAT(ID) ON DELETE CASCADE return qq( CREATE TABLE LOGCATSREF ( - LID INTEGER NOT NULL, + LID INT NOT NULL, CID INT NOT NULL, FOREIGN KEY (LID) REFERENCES LOG(ID), FOREIGN KEY (CID) REFERENCES CAT(ID) @@ -296,13 +307,14 @@ sub renumerate { #Renumerate Log! Copy into temp. table. my $sql; selectRecords($db,'CREATE TABLE life_log_temp_table AS SELECT * FROM LOG;'); + my $CI = 'rowid'; $CI = 'ID' if $IS_PG_DB; #update notes table with new log id only for reference sake. - my $st = selectRecords($db, 'SELECT ID, DATE FROM LOG WHERE ID_RTF > 0 ORDER BY DATE;'); + my $st = selectRecords($db, "SELECT $CI, DATE FROM LOG WHERE ID_RTF > 0 ORDER BY DATE;"); while(my @row =$st->fetchrow_array()) { my $sql_date = $row[1]; #$sql_date =~ s/T/ /; $sql_date = DateTime::Format::SQLite->parse_datetime($sql_date); - $sql = "SELECT ID, DATE FROM life_log_temp_table WHERE ID_RTF > 0 AND DATE = '".$sql_date."';"; + $sql = "SELECT $CI, DATE FROM life_log_temp_table WHERE ID_RTF > 0 AND DATE = '".$sql_date."';"; my @new = selectRecords($db, $sql)->fetchrow_array(); if(scalar @new > 0){ try{#can fail here, for various reasons. @@ -317,13 +329,13 @@ sub renumerate { # Delete any possible orphaned Notes records. $st->finish(); - $st = selectRecords($db, "SELECT LID, LOG.ID from NOTES LEFT JOIN LOG ON - NOTES.LID = LOG.ID WHERE LOG.ID is NULL;"); + $st = selectRecords($db, "SELECT LID, LOG.$CI from NOTES LEFT JOIN LOG ON NOTES.LID = LOG.$CI WHERE LOG.$CI is NULL;"); while($st->fetchrow_array()) { $db->do("DELETE FROM NOTES WHERE LID=".$_[0].";") } $st->finish(); - $db->do('DROP TABLE LOG CASCADE;'); + if($IS_PG_DB){$db->do('DROP TABLE LOG CASCADE;');}else{$db->do('DROP TABLE LOG;');} + $db->do(&createLOGStmt); $db->do('INSERT INTO LOG (ID_CAT, ID_RTF, DATE, LOG, AMOUNT,AFLAG,STICKY) SELECT ID_CAT, ID_RTF, DATE, LOG, AMOUNT, AFLAG, STICKY FROM life_log_temp_table ORDER by DATE;');