1
0
Fork 0
mirror of https://github.com/DBD-SQLite/DBD-SQLite synced 2025-06-08 06:38:12 -04:00

Added documentation and an Escape attribute for $sth->table_info

This commit is contained in:
Vernon Lyon 2009-09-29 15:35:46 +00:00
parent cc6743a3bc
commit a31981fa77
2 changed files with 31 additions and 6 deletions

View file

@ -11,6 +11,8 @@ Changes for Perl extension DBD-SQLite
(ISHIGAKI) (ISHIGAKI)
- Resolved #49716: Fixed $dbh->column_info to work according to - Resolved #49716: Fixed $dbh->column_info to work according to
the spec in DBI and added support for attached databases. (VLYON) the spec in DBI and added support for attached databases. (VLYON)
- Added documentation and an 'Escape' attribute for $sth->table_info.
(VLYON)
1.26_03 Wed 12 Aug 2009 1.26_03 Wed 12 Aug 2009
- Updated to SQLite 3.6.17 (ISHIGAKI) - Updated to SQLite 3.6.17 (ISHIGAKI)

View file

@ -202,7 +202,7 @@ sub _attached_database_list {
# Based on DBD::Oracle's # Based on DBD::Oracle's
# See also http://www.ch-werner.de/sqliteodbc/html/sqlite3odbc_8c.html#a213 # See also http://www.ch-werner.de/sqliteodbc/html/sqlite3odbc_8c.html#a213
sub table_info { sub table_info {
my ($dbh, $cat_val, $sch_val, $tbl_val, $typ_val) = @_; my ($dbh, $cat_val, $sch_val, $tbl_val, $typ_val, $attr) = @_;
my @where = (); my @where = ();
my $sql; my $sql;
@ -267,11 +267,9 @@ SELECT NULL TABLE_CAT
FROM ( FROM (
SELECT 'main' TABLE_SCHEM, tbl_name, upper(type) TABLE_TYPE, sql SELECT 'main' TABLE_SCHEM, tbl_name, upper(type) TABLE_TYPE, sql
FROM sqlite_master FROM sqlite_master
WHERE type IN ('table','view')
UNION ALL UNION ALL
SELECT 'temp' TABLE_SCHEM, tbl_name, 'LOCAL TEMPORARY' TABLE_TYPE, sql SELECT 'temp' TABLE_SCHEM, tbl_name, 'LOCAL TEMPORARY' TABLE_TYPE, sql
FROM sqlite_temp_master FROM sqlite_temp_master
WHERE type IN ('table','view')
END_SQL END_SQL
for my $db_name (_attached_database_list($dbh)) { for my $db_name (_attached_database_list($dbh)) {
@ -279,7 +277,6 @@ END_SQL
UNION ALL UNION ALL
SELECT '$db_name' TABLE_SCHEM, tbl_name, upper(type) TABLE_TYPE, sql SELECT '$db_name' TABLE_SCHEM, tbl_name, upper(type) TABLE_TYPE, sql
FROM "$db_name".sqlite_master FROM "$db_name".sqlite_master
WHERE type IN ('table','view')
END_SQL END_SQL
} }
@ -291,11 +288,13 @@ UNION ALL
) )
) )
END_SQL END_SQL
$attr = {} unless ref $attr eq 'HASH';
my $escape = defined $attr->{Escape} ? " ESCAPE '$attr->{Escape}'" : '';
if ( defined $sch_val ) { if ( defined $sch_val ) {
push @where, "TABLE_SCHEM LIKE '$sch_val'"; push @where, "TABLE_SCHEM LIKE '$sch_val'$escape";
} }
if ( defined $tbl_val ) { if ( defined $tbl_val ) {
push @where, "TABLE_NAME LIKE '$tbl_val'"; push @where, "TABLE_NAME LIKE '$tbl_val'$escape";
} }
if ( defined $typ_val ) { if ( defined $typ_val ) {
my $table_type_list; my $table_type_list;
@ -620,6 +619,30 @@ details about core features.
Currently many statement attributes are not implemented or are Currently many statement attributes are not implemented or are
limited by the typeless nature of the SQLite database. limited by the typeless nature of the SQLite database.
=head3 B<table_info>
$sth = $dbh->table_info(undef, $schema, $table, $type, \%attr);
Returns all tables and schemas (databases) as specified in L<DBI/table_info>.
The schema and table arguments will do a C<LIKE> search. You can specify an
ESCAPE character by including an 'Escape' attribute in \%attr. The C<$type>
argument accepts a comma seperated list of the following types 'TABLE',
'VIEW', 'LOCAL TEMPORARY' and 'SYSTEM TABLE' (by default all are returned).
Note that a statement handle is returned, and not a direct list of tables.
The following fields are returned:
B<TABLE_CAT>: Always NULL, as SQLite does not have the concept of catalogs.
B<TABLE_SCHEM>: The name of the schema (database) that the table or view is
in. The default schema is 'main', temporary tables are in 'temp' and other
databases will be in the name given when the database was attached.
B<TABLE_NAME>: The name of the table or view.
B<TABLE_TYPE>: The type of object returned. Will be one of 'TABLE', 'VIEW',
'LOCAL TEMPORARY' or 'SYSTEM TABLE'.
=head1 CONNECTING =head1 CONNECTING
The name of the database file is passed in the the DBI connection The name of the database file is passed in the the DBI connection