my @head = @{$table_spec -> {header}};
my @data = @{$table_spec -> {data}};
foreach my $next(@data){
- my $transition = join '`', @$next;
- if(!$cnf_tagged){
- $cnf_tagged = 1;
- my $header = join '`', @{ $head[$CNFMeta::TABLE_HEADER{COL_NAMES}] };
- $fh->print(
-qq(<<$key<DATA> __HAS_HEADER__
+ my $transition = join '`', CNFMeta::_deRefArray($next);
+if(!$cnf_tagged){
+my $header = join '`', @{ $head[$CNFMeta::TABLE_HEADER{COL_NAMES}] };
+my $meta_tag = '__HAS_HEADER__';
+$meta_tag.= ' __AUTO_NUMBERED__' if ${$head[$CNFMeta::TABLE_HEADER{ID_TYPE}]} eq 'AUTOINCREMENT';
+$cnf_tagged = 1;
+$fh->print(
+qq(<<$key<DATA> $meta_tag
$header~
))
- }
- $fh->print ($transition, "~\n");
+}
+ $fh->print ($transition, "~\n");
}
- print $fh->print(">>\n") if($cnf_tagged)
+ $fh->print(">>\n") if($cnf_tagged)
}
}catch($e){
CNFParserException->throw(error=>$e);
our %REL_IDX;
###
BEGIN {
-my $cnt =0; foreach(qw{BOOL INT CNFID NUMBER DATE TEXT}){$CNF_DATA_TYPES{$_}=++$cnt} lock_hash(%CNF_DATA_TYPES);
+my $cnt =0; foreach(qw{BOOL INT CNFID NUMBER DATE TEXT UNIQUE}){$CNF_DATA_TYPES{$_}=++$cnt} lock_hash(%CNF_DATA_TYPES);
$cnt =0; foreach(qw{COL_NAMES COL_TYPES RELATIONS TABLE_META ID_TYPE ID_PRIMARY T_BODY F_NAMES F_VALUES F_UPDATES F_WHERE DB META_V})
{$TABLE_HEADER{$_}=$cnt++} lock_hash(%TABLE_HEADER);
$cnt =0; foreach(qw{IDX TABLE COLNAME}) {$REL_IDX{$_}=$cnt++} lock_hash(%REL_IDX);
###
# Data base conversion types supported from the CNF side.
###
- our ($INT,$NUM,$BOOL,$TEXT,$DATE,$ID, $CNF_ID, $INDEX, $AUTO, $REL) = (
- _meta('INT'),_meta('NUM'),_meta('BOOL'),_meta('TEXT'),_meta('DATE'),
- _meta('ID'),_meta('CNF_ID'),_meta('CNF_INDEX'),_meta('AUTO'),_meta('REL')
+ our ($INT, $NUM, $BOOL, $TEXT, $DATE, $UNIQUE, $ID, $CNF_ID, $INDEX, $AUTO, $REL) = (
+ _meta('INT'),_meta('NUM'),_meta('BOOL'),_meta('TEXT'),_meta('DATE'),_meta('UNIQUE'),
+ _meta('ID'),_meta('CNF_ID'),_meta('CNF_INDEX'),_meta('AUTO'),_meta('REL'),
);
###
$body .= "\"$hdr\" TIMESTAMP with time zone NOT NULL,\n";
}
$spec[$i] = $CNF_DATA_TYPES{DATE};
+ }elsif($hdr =~ s/$UNIQUE/""/ei){
+ $body .= "\"$hdr\" TEXT UNIQUE NOT NULL,\n";
+ $spec[$i] = $CNF_DATA_TYPES{UNIQUE};
}else{
$body .= "\"$hdr\" TEXT NOT NULL,\n";
$spec[$i] = $CNF_DATA_TYPES{TEXT};
return $ret
}
-sub _obtainColumnMap {
- my $table = shift;
- my @header = CNFMeta::_deRefArray($$table->{header});
- my @names = CNFMeta::_deRefArray($header[$TABLE_HEADER{COL_NAMES}]);
- my %ret;
- foreach my $i(0..$#names){ $ret{$names[$i]}=$i }
- return \%ret
-}
+
use feature qw(signatures);
use Scalar::Util qw(looks_like_number);
sub _matchType($type, $val, @rows) {
}
}
+sub _obtainColumnMap($table) {
+ my @header = _deRefArray($$table->{header});
+ my @names = _deRefArray($header[$TABLE_HEADER{COL_NAMES}]);
+ my %ret;
+ foreach my $i(0..$#names){ $ret{$names[$i]}=$i }
+ return \%ret
+}
+sub _getColumnIndex($table, $name){
+ my @header = _deRefArray($$table->{header});
+ my @col_names = _deRefArray($header[0]);
+ for my $index(0..$#col_names){
+ return $index if $name eq $col_names[$index];
+ }
+ warn "Not found column name:$name";
+}
+
+
+
1;
=begin copyright
*{"${caller}::const"} = defined($parent)?sub{return const($parent,shift)}:\&const;
*{"${caller}::CNFProperty"} = \&property;
*{"${caller}::TRUE"} = 1;
- *{"${caller}::FALSE"} = 0;
+ *{"${caller}::FALSE"} = 0;
+ *{"${caller}::isTrue"} = \&CNF::_isTrue;
}
return 1;
}
}elsif(scalar @a > 0){
$isHeader = 0; #autocorrect if _HAS_HEADER_ header was accidentally set.
- push @rows, [@a] if not $hasPreRunRefs; $hasPreRunRefs=0;
+ push @rows,\@a if not $hasPreRunRefs; $hasPreRunRefs=0;
}
}
my $ret = {name=>$e,header=>\@hdr,data=>\@rows,auto=>$autonumber};