mirror of
https://github.com/DBD-SQLite/DBD-SQLite
synced 2025-06-07 14:19:10 -04:00
135 lines
2.9 KiB
Perl
135 lines
2.9 KiB
Perl
# Hej, Emacs, give us -*- perl -*- mode here!
|
|
#
|
|
# $Id: CSV.dbtest,v 1.1.1.1 1999/06/13 12:59:35 joe Exp $
|
|
#
|
|
# database specific definitions for a 'CSV' database
|
|
|
|
use strict;
|
|
|
|
# This function generates a mapping of ANSI type names to
|
|
# database specific type names; it is called by TableDefinition().
|
|
#
|
|
sub AnsiTypeToDb ($;$) {
|
|
my ($type, $size) = @_;
|
|
my ($ret);
|
|
|
|
if ((lc $type) eq 'char' || (lc $type) eq 'varchar') {
|
|
$size ||= 1;
|
|
return (uc $type) . " ($size)";
|
|
} elsif ((lc $type) eq 'blob' || (lc $type) eq 'real' ||
|
|
(lc $type) eq 'integer') {
|
|
return uc $type;
|
|
} elsif ((lc $type) eq 'int') {
|
|
return 'INTEGER';
|
|
} else {
|
|
warn "Unknown type $type\n";
|
|
$ret = $type;
|
|
}
|
|
$ret;
|
|
}
|
|
|
|
|
|
#
|
|
# This function generates a table definition based on an
|
|
# input list. The input list consists of references, each
|
|
# reference referring to a single column. The column
|
|
# reference consists of column name, type, size and a bitmask of
|
|
# certain flags, namely
|
|
#
|
|
# $COL_NULLABLE - true, if this column may contain NULL's
|
|
# $COL_KEY - true, if this column is part of the table's
|
|
# primary key
|
|
#
|
|
# Hopefully there's no big need for you to modify this function,
|
|
# if your database conforms to ANSI specifications.
|
|
#
|
|
|
|
sub TableDefinition ($@) {
|
|
my($tablename, @cols) = @_;
|
|
my($def);
|
|
|
|
#
|
|
# Should be acceptable for most ANSI conformant databases;
|
|
#
|
|
# msql 1 uses a non-ANSI definition of the primary key: A
|
|
# column definition has the attribute "PRIMARY KEY". On
|
|
# the other hand, msql 2 uses the ANSI fashion ...
|
|
#
|
|
my($col, @keys, @colDefs, $keyDef);
|
|
|
|
#
|
|
# Count number of keys
|
|
#
|
|
@keys = ();
|
|
foreach $col (@cols) {
|
|
if ($$col[2] & $::COL_KEY) {
|
|
push(@keys, $$col[0]);
|
|
}
|
|
}
|
|
|
|
foreach $col (@cols) {
|
|
my $colDef = $$col[0] . " " . AnsiTypeToDb($$col[1], $$col[2]);
|
|
if (!($$col[3] & $::COL_NULLABLE)) {
|
|
$colDef .= " NOT NULL";
|
|
}
|
|
push(@colDefs, $colDef);
|
|
}
|
|
if (@keys) {
|
|
$keyDef = ", PRIMARY KEY (" . join(", ", @keys) . ")";
|
|
} else {
|
|
$keyDef = "";
|
|
}
|
|
$def = sprintf("CREATE TABLE %s (%s%s)", $tablename,
|
|
join(", ", @colDefs), $keyDef);
|
|
}
|
|
|
|
|
|
#
|
|
# This function generates a list of tables associated to a
|
|
# given DSN.
|
|
#
|
|
sub ListTables(@) {
|
|
my($dbh) = shift;
|
|
my(@tables);
|
|
|
|
@tables = $dbh->func('list_tables');
|
|
if ($dbh->errstr) {
|
|
die "Cannot create table list: " . $dbh->errstr;
|
|
}
|
|
@tables;
|
|
}
|
|
|
|
|
|
#
|
|
# This function is called by DBD::pNET; given a hostname and a
|
|
# dsn without hostname, return a dsn for connecting to dsn at
|
|
# host.
|
|
sub HostDsn ($$) {
|
|
my($hostname, $dsn) = @_;
|
|
"$dsn:$hostname";
|
|
}
|
|
|
|
|
|
#
|
|
# Return a string for checking, whether a given column is NULL.
|
|
#
|
|
sub IsNull($) {
|
|
my($var) = @_;
|
|
|
|
"$var IS NULL";
|
|
}
|
|
|
|
|
|
#
|
|
# Return TRUE, if database supports transactions
|
|
#
|
|
sub HaveTransactions () {
|
|
1;
|
|
}
|
|
|
|
|
|
if (! -d "output") {
|
|
mkdir "output", 0755;
|
|
}
|
|
|
|
1;
|