Changeset 69

Show
Ignore:
Timestamp:
09/05/07 17:42:54 (1 year ago)
Author:
stonecobra
Message:

added db registration to sqlite, along with lastinsertid and tango logging

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dbi/sqlite/SqliteDatabase.d

    r59 r69  
    1313} else { 
    1414    private import tango.stdc.stringz : toDString = fromUtf8z, toCString = toUtf8z; 
    15 
    16 private import dbi.Database, dbi.DBIException, dbi.Result, dbi.Row, dbi.Statement; 
     15    private import tango.util.log.Log; 
     16
     17private import dbi.Database, dbi.DBIException, dbi.Result, dbi.Row, dbi.Statement, dbi.Registry; 
    1718private import dbi.sqlite.imp, dbi.sqlite.SqliteError, dbi.sqlite.SqliteResult; 
    1819 
     
    2425 */ 
    2526class SqliteDatabase : Database { 
     27     
     28    private Logger logger; 
    2629    public: 
    2730 
     
    3033     */ 
    3134    this () { 
     35        logger = Log.getLogger("dbi.sqlite.Database"); 
    3236    } 
    3337 
     
    3943     */ 
    4044    this (char[] dbFile) { 
     45        logger = Log.getLogger("dbi.sqlite.Database"); 
    4146        connect(dbFile); 
    4247    } 
     
    6065     */ 
    6166    override void connect (char[] params, char[] username = null, char[] password = null) { 
     67        logger.trace("connecting: " ~ params); 
    6268        if ((errorCode = sqlite3_open(toCString(params), &database)) != SQLITE_OK) { 
    6369            throw new DBIException("Could not open or create " ~ params, errorCode, specificToGeneral(errorCode)); 
     
    6975     */ 
    7076    override void close () { 
     77        logger.trace("closing database now"); 
    7178        if (database !is null) { 
    7279            if ((errorCode = sqlite3_close(database)) != SQLITE_OK) { 
     
    8794     */ 
    8895    override void execute (char[] sql) { 
     96        logger.trace("executing: " ~ sql); 
    8997        char** errorMessage; 
    9098        if ((errorCode = sqlite3_exec(database, sql.dup.ptr, null, null, errorMessage)) != SQLITE_OK) { 
     
    106114     */ 
    107115    override SqliteResult query (char[] sql) { 
     116        logger.trace("querying: " ~ sql); 
    108117        char** errorMessage; 
    109118        sqlite3_stmt* stmt; 
     
    142151    } 
    143152 
     153    /** 
     154     * Get the integer id of the last row to be inserted. 
     155     * 
     156     * Returns: 
     157     *  The id of the last row inserted into the database. 
     158     */ 
     159    override long getLastInsertID() { 
     160        return sqlite3_last_insert_rowid(database); 
     161    } 
     162 
    144163    /* 
    145164     * Note: The following are not in the DBI API. 
    146165     */ 
    147166 
    148     /** 
    149      * Get the rowid of the last insert. 
    150      * 
    151      * Returns: 
    152      *  The row of the last insert or 0 if no inserts have been done. 
    153      */ 
    154     long getLastInsertRowId () { 
    155         return sqlite3_last_insert_rowid(database); 
    156     } 
    157167 
    158168    /** 
     
    262272        return false; 
    263273    } 
     274} 
     275 
     276private class SqliteRegister : Registerable { 
     277     
     278    private Logger logger; 
     279     
     280    this() { 
     281        logger = Log.getLogger("dbi.sqlite"); 
     282    } 
     283     
     284    public char[] getPrefix() { 
     285        return "sqlite"; 
     286    } 
     287     
     288    public Database getInstance(char[] url) { 
     289        logger.trace("creating Sqlite database: " ~ url); 
     290        return new SqliteDatabase(url); 
     291    } 
     292} 
     293 
     294static this() { 
     295    auto logger = Log.getLogger("dbi.sqlite"); 
     296    logger.trace("Attempting to register SqliteDatabase in Registry"); 
     297    registerDatabase(new SqliteRegister()); 
    264298} 
    265299