Вход Регистрация
Файл: controllers/flatfile_utils.php
Строк: 180
<?php

// Utilities for flatfile functions

/** Constant to indicating a column holding floating point numbers */
define('FLOAT_COL''float');
/** Constant to indicating a column holding integers */
define('INT_COL''int');
/** Constant to indicating a column holding strings */
define('STRING_COL''string');
/** Constant to indicating a column holding unix timestamps */
define('DATE_COL''date');


/** EXPERIMENTAL: Encapsulates info about a column in a flatfile DB */
class Column
{
    
/**
     * Create a new column object
     */
    
function Column($index$type)
    {
        
$this->index $index;
        
$this->type $type;
    }
}

/** EXPERIMENTAL: Represent a column that is a foreign key.  Used for temporarily building tables array */
class JoinColumn
{
    function 
JoinColumn($index$tablename$columnname)
    {
        
$this->index $index;
        
$this->tablename $tablename;
        
$this->columnname $columnname;
    }
}

/**
 * EXPERIMENTAL: Utilities for handling definitions of tables.
 */
class TableUtils
{
    
/** 
     * Finds JoinColumns in an array of tables, and adds 'type' fields by looking up the columns
     *
     * @param tables This should be an associative array containing 'tablename' => tabledefinition
     * tabledefinition is itself an associativive array of 'COLUMN_NAME_CONSTANT' => columndefintion
     * COLUMN_NAME_CONSTANT should be a unique constant within the table, and 
     * column definition should be a Column object or JoinColumn object
     */
    
function resolveJoins(&$tables)
    {
        foreach (
$tables as $tablename => $discard)
        {
            
// PHP4 compatible: can't do :  foreach ($tables as $tablename => &$tabledef)
            // and strangely, if we do 
            // foreach ($tables as $tablename => &$tabledef)
            //     $tabledef =& $tables[$tablename];
            // then we get bugs
            
$tabledef =& $tables[$tablename]; 
            foreach (
$tabledef as $colname => $discard)
            {
                
$coldef =& $tabledef[$colname]; // PHP4 compatible
                
if (is_a($coldef'JoinColumn') or is_subclass_of($coldef'JoinColumn'))
                {
                    
TableUtils::resolveColumnJoin($coldef$tables);
                }
            }
        }    
    }

    
/** @access private */
    
function resolveColumnJoin(&$columndef, &$tables)
    {
        
// Doesn't work if the column it is joined to is also
        // a JoinColumn, but I can't think of ever wanting to do that
        
$columndef->type $tables[$columndef->tablename][$columndef->columnname]->type;
    }

    
/** Uses 'define' to create global constants for all the column names */
    
function createDefines(&$tables)
    {
        foreach (
$tables as $tablename => $discard)
        {
            
$tabledef = &$tables[$tablename]; // PHP4 compatible
            
foreach ($tabledef as $colname => $discard)
            {
                
$coldef = &$tabledef[$colname];
                
define(strtoupper($tablename) . '_' $colname$coldef->index);
            }
        }
    }

    
/** 
     * Creates a 'row schema' for a given table definition. 
     *
     * A row schema is just an array of the column types for a table,
     * using the constants defined above.
     */
    
function createRowSchema(&$tabledef)
    {
        
$row_schema = array();
        foreach (
$tabledef as $colname => $coldef)
        {
            
$row_schema[$coldef->index] = $coldef->type;
        }
        return 
$row_schema;
    }
}

?>
Онлайн: 0
Реклама