From: Will Budic Date: Thu, 18 Sep 2025 02:00:01 +0000 (+1000) Subject: Enabled easier access to schema provided by db server, from init. X-Git-Url: https://lifelog.hopto.org/gitweb/?a=commitdiff_plain;h=0615d3ebcc1b97d38a80f48c371a5517ca672543;p=PerlCNF.git Enabled easier access to schema provided by db server, from init. --- diff --git a/system/modules/CNFSQL.pm b/system/modules/CNFSQL.pm index 19cd223..efc9307 100644 --- a/system/modules/CNFSQL.pm +++ b/system/modules/CNFSQL.pm @@ -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);