note 96605 added to sqlite3.open
| From: | kbrobst at surveyresearchpartners dot com | Date: | Sun, 07 Mar 2010 20:44:50 +0000 |
| Subject: | note 96605 added to sqlite3.open | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-166764@lists.php.net to get a copy of this message | ||
If you are trying to use the open() method to open multiple database files within the same SQLite3
object (which I could not get to work), here is an alternative way to do so using special SQLite3
syntax additions to the SQL language. This took some investigation on my part, so hopefully the
solution I found will help you too.
These are the nice features within SQLite3 that are leveraged:
* The create statement query for a table is stored within a table called "sqlite_master"
within the parent database file.
* SQLite3 supports the "insert into...select * from" SQL syntax for doing bulkload-speed
inserts into a table - but what if the source and target tables are in separate database files?
* SQLite3 has an "attach [filename] as [reference database name]" which will allow
multiple database files to be opened and accessible to the same SQLite3 object.
Assume you have a table called "my_template" in the SQLite3 database file
"source.db". You want to make a copy of this table into the database file
"target.db" and call the table "working_table".
//attach the source database file to the bulkload connection object;
$bulkload_connection = new SQLite3("c:/sqlite3_database_files/source.db");
//retrieve the create statement query for the source table;
$sourcetbl_create_statement = $bulkload_connection->querySingle("select sql from
sqlite_master where type='table' and name='my_template'");
if ($sourcetbl_create_statement===false) exit($bulkload_connection->lastErrorMsg());
//build the create statement query for the target table;
$targettbl_create_statement = str_replace('CREATE TABLE my_template', 'CREATE TABLE
bulkload.working_table', $sourcetbl_create_statement);
//attach the target database file to the bulkload connection object - and reference it as the
database called [bulkload];
$result=$bulkload_connection->exec("attach 'c:/sqlite3_database_files/target.db'
as bulkload");
if ($result===false) exit($bulkload_connection->lastErrorMsg());
//issue the query to create the target table within the target database file;
$result=$bulkload_connection->exec($targettbl_create_statement);
if ($result===false) exit($bulkload_connection->lastErrorMsg());
//copy the rows from the source table to the target table as quickly as possible;
$result=$bulkload_connection->exec("insert into bulkload.working_table select * from
my_template");
if ($result===false) exit($bulkload_connection->lastErrorMsg());
//release the OS file locks on the attached database files;
$bulkload_connection->close();
unset($bulkload_connection);
----
Server IP: 208.69.120.55
Probable Submitter: 216.150.207.36
----
Manual Page -- http://www.php.net/manual/en/sqlite3.open.php
Edit -- https://master.php.net/note/edit/96605
Del: integrated -- https://master.php.net/note/delete/96605/integrated
Del: useless -- https://master.php.net/note/delete/96605/useless
Del: bad code -- https://master.php.net/note/delete/96605/bad+code
Del: spam -- https://master.php.net/note/delete/96605/spam
Del: non-english -- https://master.php.net/note/delete/96605/non-english
Del: in docs -- https://master.php.net/note/delete/96605/in+docs
Del: other reasons-- https://master.php.net/note/delete/96605
Reject -- https://master.php.net/note/reject/96605
Search -- https://master.php.net/manage/user-notes.php