/** * Transform a model descriptor to a table descriptor. * * @param ModelDescriptor $descriptor * @return RecessTableDescriptor */ function modelToTableDescriptor(ModelDescriptor $descriptor) { Library::import('recess.database.pdo.RecessTableDescriptor'); Library::import('recess.database.pdo.RecessColumnDescriptor'); $tableDescriptor = new RecessTableDescriptor(); $tableDescriptor->name = $descriptor->getTable(); foreach ($descriptor->properties as $property) { $tableDescriptor->addColumn($property->name, $property->type, true, $property->isPrimaryKey, array(), $property->isAutoIncrement ? array('autoincrement' => true) : array()); } return $tableDescriptor; }
/** * Retrieve the a table's RecessTableDescriptor. * * @param string $table Name of table. * @return RecessTableDescriptor */ function getTableDescriptor($table) { $results = $this->pdo->query('PRAGMA table_info("' . $table . '");'); $tableSql = $this->pdo->query('SELECT sql FROM sqlite_master WHERE type="table" AND name = "' . addslashes($table) . '"')->fetch(); $tableSql = $tableSql['sql']; $columns = array(); $tableDescriptor = new RecessTableDescriptor(); foreach ($results as $result) { $tableDescriptor->addColumn($result['name'], SqliteDataSourceProvider::getRecessType($result['type']), $result['notnull'] == 0 ? true : false, $result['pk'] == 1 ? true : false, $result['dflt_value'] == null ? '' : $result['dflt_value'], strpos($tableSql, $result['name'] . ' INTEGER PRIMARY KEY AUTOINCREMENT') !== false ? array('autoincrement' => true) : array()); } return $tableDescriptor; }
/** * Retrieve the a table's RecessTableDescriptor. * * @param string $table Name of table. * @return RecessTableDescriptor */ function getTableDescriptor($table) { Library::import('recess.database.pdo.RecessTableDescriptor'); $tableDescriptor = new RecessTableDescriptor(); $tableDescriptor->name = $table; try { $results = $this->pdo->query('SHOW COLUMNS FROM ' . $table . ';'); $tableDescriptor->tableExists = true; } catch (PDOException $e) { $tableDescriptor->tableExists = false; return $tableDescriptor; } foreach ($results as $result) { $tableDescriptor->addColumn($result['Field'], $this->getRecessType($result['Type']), $result['Null'] == 'NO' ? false : true, $result['Key'] == 'PRI' ? true : false, $result['Default'] == null ? '' : $result['Default'], $result['Extra'] == 'auto_increment' ? array('autoincrement' => true) : array()); } return $tableDescriptor; }
/** * Retrieve the a table's RecessTableDescriptor. * * @param string $table Name of table. * @return RecessTableDescriptor */ function getTableDescriptor($table) { Library::import('recess.database.pdo.RecessTableDescriptor'); $tableDescriptor = new RecessTableDescriptor(); $tableDescriptor->name = $table; try { $results = $this->pdo->query('SELECT keys.column_name as pri, cols.column_name as Field, data_type as Type, column_default as default, is_nullable as null FROM information_schema.columns cols LEFT JOIN information_schema.key_column_usage keys ON keys.table_name=cols.table_name AND keys.contraint_name = \'' . $table . '_pkey\' WHERE cols.table_name = \'' . $table . '\''); $tableDescriptor->tableExists = true; } catch (PDOException $e) { $tableDescriptor->tableExists = false; return $tableDescriptor; } foreach ($results as $result) { $tableDescriptor->addColumn($result['field'], $this->getRecessType($result['type']), $result['null'] == 'NO' ? false : true, $result['pri'] == $result['field'] ? true : false, $result['default'] == null ? '' : $result['default'], substr($result['default'], 7) == "nextval" ? array('autoincrement' => true) : array()); } return $tableDescriptor; }