]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/backend/ADODB_sqlite.php
sqlite autoincrement fix
[SourceForge/phpwiki.git] / lib / WikiDB / backend / ADODB_sqlite.php
1 <?php // -*-php-*-
2 rcs_id('$Id: ADODB_sqlite.php,v 1.2 2004-07-05 13:56:23 rurban Exp $');
3
4 require_once('lib/WikiDB/backend/ADODB.php');
5
6 /**
7  * WikiDB layer for ADODB-sqlite, called by lib/WikiDB/ADODB.php.
8  * Just to create a not existing database.
9  * 
10  * @author: Reini Urban
11  */
12 class WikiDB_backend_ADODB_sqlite
13 extends WikiDB_backend_ADODB
14 {
15     /**
16      * Constructor.
17      */
18     function WikiDB_backend_ADODB_sqlite($dbparams) {
19         $parsed = parseDSN($dbparams['dsn']);
20         if (! file_exists($parsed['database'])) {
21             // creating the empty database
22             $db = $parsed['database'];
23             $schema = FindFile("schemas/sqlite.sql");
24             `sqlite $db < $schema`;
25         }
26         $this->WikiDB_backend_ADODB($dbparams);
27     }
28     
29     function _get_pageid($pagename, $create_if_missing = false) {
30         $dbh = &$this->_dbh;
31         $page_tbl = $this->_table_names['page_tbl'];
32         $query = sprintf("SELECT id FROM $page_tbl WHERE pagename=%s",
33                          $dbh->qstr($pagename));
34         if (! $create_if_missing ) {
35             $row = $dbh->GetRow($query);
36             return $row ? $row[0] : false;
37         }
38         $row = $dbh->GetRow($query);
39         if (! $row ) {
40             // atomic version   
41             // TODO: we have auto-increment since sqlite-2.3.4
42             //   http://www.sqlite.org/faq.html#q1
43             $rs = $dbh->Execute(sprintf("INSERT INTO $page_tbl"
44                                         . " (id,pagename)"
45                                         . " VALUES((SELECT max(id) FROM $page_tbl)+1, %s)",
46                                         $dbh->qstr($pagename)));
47             $id = $dbh->_insertid();
48         } else {
49             $id = $row[0];
50         }
51         return $id;
52     }
53 };
54
55 // (c-file-style: "gnu")
56 // Local Variables:
57 // mode: php
58 // tab-width: 8
59 // c-basic-offset: 4
60 // c-hanging-comment-ender-p: nil
61 // indent-tabs-mode: nil
62 // End:   
63 ?>