]> lifelog.hopto.org Git - PerlCNF.git/commitdiff
Enabled easier access to schema provided by db server, from init.
authorWill Budic <redacted>
Thu, 18 Sep 2025 02:00:01 +0000 (12:00 +1000)
committerWill Budic <redacted>
Thu, 18 Sep 2025 02:00:01 +0000 (12:00 +1000)
system/modules/CNFSQL.pm

index 19cd223160a35c3af35e247c0617592a5466687b..efc9307fb0cb429b172230552632f46d603c74ea 100644 (file)
@@ -18,8 +18,8 @@ our %views  = ();
 our %mig    = ();
 our @sql    = ();
 our @statements;
-our %schema_tables;
 
+my %schema_tables;
 my $isPostgreSQL = 0;
 my $TZ;
 my %relationships;
@@ -37,7 +37,7 @@ sub new {
 sub tables_data_map{
     return $tables_data_map{shift}
 }
-
+sub schema{shift; return %schema_tables}
 sub isPostgreSQL{shift; return $isPostgreSQL}
 
 ##
@@ -245,7 +245,8 @@ try{
             $fld_where   = ${$header[$MHDR{F_WHERE}]};
             $prime_key   = ${$header[$MHDR{ID_PRIMARY}]};
             $id_type     = ${$header[$MHDR{ID_TYPE}]};
-            $auto_increment=0;
+            $auto_increment=0; #$auto_increment=1 if $prime_key eq 'ID';
+            $prime_key = "\"$prime_key\"," if $prime_key;
             for my $i(0 .. $#header_cols){
                 my $h = $header_cols[$i];
                 $hdr[@hdr]={'_'=>$h,'i'=>$i, 't'=>$header_types[$i]}
@@ -257,6 +258,7 @@ try{
 
         if($tbl_mapping){
            $fld_names = $fld_values = ""; my $qa = $tbl_id_type eq 'CNF_INDEX';
+           $prime_key = "";
            foreach(@tbl_spec_info){
                 my @r= @$_;
                 if($qa || $tbl_id_type eq 'NONE' ||$r[0] ne 'ID') {
@@ -269,7 +271,7 @@ try{
         }
 
         my ($s_sqlSEL, $s_sqlINS, $s_sqlUPD)=(
-            "SELECT $prime_key, $fld_names FROM $tbl_stm_name WHERE $fld_where",
+            "SELECT $prime_key $fld_names FROM $tbl_stm_name WHERE $fld_where",
             "INSERT INTO $tbl_stm_name ($fld_names) VALUES ($fld_values);",
             "UPDATE $tbl_stm_name SET $fld_updates WHERE $fld_where;"
         );
@@ -282,6 +284,8 @@ try{
         $self->{parser}->log("sql_upd -> $s_sqlUPD");
 
 
+transaction:{
+
         $db->begin_work();
 
             my ($cnf_id, @ins,  @upd);
@@ -291,6 +295,7 @@ try{
             else{
                 $cnf_id = 1
             }
+
             for my $row_idx (0 .. $#rows){
                 my $isUpdate = 0; my $ptr = $rows[$row_idx];
                 my @col;
@@ -310,7 +315,7 @@ try{
                                     if($col[$hi]){
                                         $trans[@trans] = $col[$hi];
                                     }else{
-                                        $trans[@trans] = $row_idx; # The row index is ID as default on auto-numbered ID columns.
+                                        $trans[@trans] = ++$cnf_id;
                                     }
                                     last
                                 }elsif($name =~ m/$hn/i){
@@ -333,11 +338,11 @@ try{
                         TBL_INFO: for my $i ( 0 .. $#tbl_spec_info ) {
                             if ( $tbl_spec_info[$i][0] =~ m/$hn/i ) {
                                 if ( $ht == $CNFMeta::CNF_DATA_TYPES{CNFID} ) {
-                                     $ins[$i] = ++$cnf_id;
+                                     $ins[$i] = $col[$hi];                                     
                                 }
                                 elsif (  $tbl_spec_info[$i][0] =~ /ID/i ) {
                                     if ( $col[$hi] ) {
-                                         $ins[$i] = $col[$hi];
+                                        $ins[$i] = $col[$hi];
                                     }
                                     else {
                                         # The row index is ID as the default on auto-numbered ID columns.
@@ -401,7 +406,8 @@ try{
                         undef  @ins
                 }
             }
-            $db->commit()
+        $db->commit()
+        }
 
     }
 
@@ -487,18 +493,18 @@ sub migrate { my ($self, $name, $value) = @_;
         $mig{$name} = [@m];
 }
 sub addStatement { my ($self, $name, $value) = @_;
-    $self->{$name}=$value;
+    $self->{uc $name}=$value;
 }
-sub getStatement { my ($self, $name) = @_;
-   return $self->{$name} if exists $self->{$name};
+sub getStatement { my ($self, $name) = @_; my $n = uc $name;
+   return $self->{$n} if exists $self->{$n};
    return;
 }
 sub hasEntry{  my ($sqlSEL, $uid) = @_;
     if(ref($uid) eq 'ARRAY'){
-           $sqlSEL -> execute(@$uid+1)
+           $sqlSEL -> execute(@$uid)
     }else{
            $uid=~s/^["']|['"]$//g;
-           $sqlSEL -> execute($uid+1)
+           $sqlSEL -> execute($uid)
     }
     my @r=$sqlSEL->fetchrow_array();
     return scalar(@r);