Login   Register  
PHP Classes
elePHPant
Icontem

File: SlimDb/Driver_Sqlite.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of marcelo entraigas  >  SlimDb  >  SlimDb/Driver_Sqlite.php  >  Download  
File: SlimDb/Driver_Sqlite.php
Role: Auxiliary script
Content type: text/plain
Description: Driver for Sqlite
Class: SlimDb
Access different database types using PDO
Author: By
Last change:
Date: 4 months ago
Size: 3,138 bytes
 

Contents

Class file image Download
<?php 
/**
 * SlimDb
 *
 * Provides a database wrapper around the PDO and PDO statement that 
 * help to reduce the effort to interact with a database.
 *
 * @author         Marcelo Entraigas <entraigas@gmail.com>
 * @license        MIT
 * @filesource
 *
 */


/**
 * Custom methods for Sqlite databases
 */

return array(
    
// Initialize default driver settings after Database contructor
    
'init' => function($index){
        
self::wrapper($index'[%s]');
    },
    
    
// Function to setup default charset
    
'connect' => function ($index$config){
    },
    
    
// List all tables.
    
'schemaDb' => function ($index){
        
$tables self::query($index"SELECT * FROM sqlite_master WHERE type='table'")->getAll();
        
$data = array();
        foreach(
$tables as $item){
            
$data[] = (string) $item['name'];
        }
        return 
$data;
    },
    
    
// Describe table structure.
    
'schemaTable' => function ($index$table){
        
$retval = array();
        
$table self::quote($index$table);
        
$raw_data self::query($index"PRAGMA table_info({$table})")->getAll();
        foreach(
$raw_data as $item)
        {
            
$row = array();
            
$row['TABLE'] = trim($table,'[]');
            
$row['FIELD'] = $item['name'];
            
$row['TYPE'] = $item['type'];
            if(
stristr ($item['type'],'INT')){
                
$row['TYPE'] = 'integer';
            } elseif(
preg_match('[FLOA|DOUB|REAL|NUME|DECI]',$item['type'])){
                
$row['TYPE'] = 'float';
            } elseif(
preg_match('[CLOB|CHAR|TEXT]',$item['type'])){
                
$row['TYPE'] = 'string';
                if( 
preg_match('@\((.+)\)@',$item['type'], $tmp) )
                    
$row['LENGTH'] = isset($tmp[1])? $tmp[1] : NULL;
            }
            
$row['DEFAULT'] = $item['dflt_value'];
            
$row['PRIMARY'] = ($item['pk']=='1')? true false;
            
$row['NULLABLE'] = ($item['notnull']=='1')? true false;
            
//$row['IDENTITY'] = false; //todo...
            
$retval[] = $row;
        }
        return 
$retval;
    },
    
    
// Build a limit clause
    
'limit' => function( $index$offset 0$limit ){
        
$offset = (int) $offset;
        
$limit = (int) $limit;
        if( 
$offset==&& $limit==)
            throw new \
Exception("Database Error: invalid parameters in query (offset={$offset} - limit= {$limit} - driver {$db->type}).");
        if( 
$offset<)
            throw new \
Exception("Database Error: invalid <offset> parameter in query (offset={$offset} - driver {$db->type}).");
        if( 
$limit<)
            throw new \
Exception("Database Error: missing <limit> parameter in query (limit= {$limit} - driver {$db->type}).");
        if( 
$offset>&& $limit>)
            return 
" LIMIT {$offset}{$limit}";
        if( 
$offset==&& $limit>)
            return 
" LIMIT {$limit}";        
    },
    
    
//return query num rows
    
'numRows' => function ($index$sql$params){
        
$sql_count "SELECT count(*) FROM ({$sql}) AS tmp";
        return (int) 
self::query($index$sql_count$params)->getVal();
    }
);