Файл: crons/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;
    }
}
?>