_pdo = $pdo; $this->_databaseName = $pdo->getDatabaseName(); $this->_zasob_id = $pdo->getZasobId(); } public function fetchAllAssoc($sql) { if (empty($sql)) { throw new Exception("Empty query"); } $stmt = $this->_pdo->query($sql); return $stmt->fetchAll(PDO::FETCH_ASSOC); } public function query($query) { throw new Exception("Storage " . __FUNCTION__ . " not defined"); $res = mysql_query($query, $this->_conn); if (!$res) { $this->_set_error('SQL QUERY FAILED: '.mysql_error($this->_conn)); return $null; } } public function getTableStruct($tblName) { $sql = " -- show fields from {$tblName} select cols.COLUMN_NAME as name , cols.DATA_TYPE as type , if('YES' = cols.IS_NULLABLE, 1, 0) as is_nullable , cols.COLUMN_DEFAULT as default_value , if(cols.COLUMN_DEFAULT is null, 1, 0) as default_is_null , cols.CHARACTER_MAXIMUM_LENGTH as max_length , cols.NUMERIC_PRECISION as num_precision , cols.NUMERIC_SCALE as num_scale , cols.CHARACTER_SET_NAME as char_encoding -- latin2 , cols.COLLATION_NAME as char_collation -- latin2_general_ci , cols.EXTRA as extra , cols.COLUMN_TYPE as raw_storage_type -- , cols.* from INFORMATION_SCHEMA.COLUMNS cols where cols.TABLE_SCHEMA like :db_name and cols.TABLE_NAME like :tbl_name "; $sth = $this->_pdo->prepare($sql); $sth->bindValue(':db_name', $this->_pdo->getDatabaseName(), PDO::PARAM_STR); $sth->bindValue(':tbl_name', $tblName, PDO::PARAM_STR); $sth->execute(); $structRaw = $sth->fetchAll(); if (empty($structRaw)) throw new Exception("Empty struct for table '{$tblName}'", 404); foreach ($structRaw as $field) { $struct[$field['name']] = $field; } return $struct; } protected function _getTableStruct($tblName) { throw new Exception("Turned OFF C." . __CLASS__ . " F." . __FUNCTION__); $tblStructRaw = $this->getTableStructRaw($tblName); $tblStruct = array(); foreach ($tblStructRaw as $fieldStruct) { $fldName = $fieldStruct['COLUMN_NAME']; $storageType = ''; /* BOOLEAN xsd: {true, false, 1, 0} SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE SET */ if ('varchar' == $fieldStruct['DATA_TYPE'] || 'char' == $fieldStruct['DATA_TYPE'] ) { $storageType = Core_StorageFactory::getType('String'); if ($fieldStruct['CHARACTER_MAXIMUM_LENGTH'] > 0) { $storageType->setMaxLength($fieldStruct['CHARACTER_MAXIMUM_LENGTH']); } } else if ('text' == $fieldStruct['DATA_TYPE'] || 'longtext' == $fieldStruct['DATA_TYPE'] || 'mediumtext' == $fieldStruct['DATA_TYPE'] || 'tinytext' == $fieldStruct['DATA_TYPE'] ) { $storageType = Core_StorageFactory::getType('Text'); } else if ('int' == $fieldStruct['DATA_TYPE'] || 'tinyint' == $fieldStruct['DATA_TYPE'] || 'smallint' == $fieldStruct['DATA_TYPE'] || 'mediumint' == $fieldStruct['DATA_TYPE'] || 'bigint' == $fieldStruct['DATA_TYPE'] || 'bit' == $fieldStruct['DATA_TYPE'] ) { $storageType = Core_StorageFactory::getType('Integer'); $storageType->setTotalDigits($fieldStruct['NUMERIC_PRECISION']); } else if ('decimal' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Decimal'); if ($fieldStruct['NUMERIC_SCALE'] > 0) { $storageType->setFractionDigits($fieldStruct['NUMERIC_SCALE']); } if ($fieldStruct['NUMERIC_PRECISION'] > 0) { $storageType->setTotalDigits($fieldStruct['NUMERIC_PRECISION']); } } else if ('double' == $fieldStruct['DATA_TYPE'] || 'real' == $fieldStruct['DATA_TYPE'] || 'float' == $fieldStruct['DATA_TYPE'] ) { $storageType = Core_StorageFactory::getType('Double'); } else if ('binary' == $fieldStruct['DATA_TYPE'] || 'varbinary' == $fieldStruct['DATA_TYPE'] || 'blob' == $fieldStruct['DATA_TYPE'] || 'tinyblob' == $fieldStruct['DATA_TYPE'] || 'longblob' == $fieldStruct['DATA_TYPE'] || 'mediumblob' == $fieldStruct['DATA_TYPE'] ) { $storageType = Core_StorageFactory::getType('Binary'); $storageType->setRestriction('maxExclusive', $fieldStruct['CHARACTER_MAXIMUM_LENGTH']); } else if ('enum' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Enumeration'); $enumValues = explode(',', str_replace(array('(',')',"'",'"'), '', substr($fieldStruct['COLUMN_TYPE'], 5))); $enumList = array(); foreach ($enumValues as $value) { $enumList[] = $value; } $storageType->setEnumeration($enumList); } else if ('timestamp' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('DateTime'); $storageType->setFormat('yyyy-MM-dd hh:mm:ss'); } else if ('datetime' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('DateTime'); $storageType->setFormat('yyyy-MM-dd hh:mm'); } else if ('date' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Date'); $storageType->setFormat('yyyy-MM-dd'); } else if ('time' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Time'); $storageType->setFormat('hh:mm:ss'); } else if ('year' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Year'); $storageType->setFormat('yyyy'); } else if ('point' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Point'); } else if ('linestring' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Linestring'); } else if ('polygon' == $fieldStruct['DATA_TYPE']) { $storageType = Core_StorageFactory::getType('Polygon'); } else if ('geometry' == $fieldStruct['DATA_TYPE'] || 'multipoint' == $fieldStruct['DATA_TYPE'] || 'multilinestring' == $fieldStruct['DATA_TYPE'] || 'multipolygon' == $fieldStruct['DATA_TYPE'] || 'geometrycollection' == $fieldStruct['DATA_TYPE'] ) { $storageType = Core_StorageFactory::getType('Geometry'); $storageType->setSpatialType($fieldStruct['COLUMN_TYPE']); } else { $storageType = Core_StorageFactory::getType('Unknown'); $storageType->setRawType($fieldStruct['COLUMN_TYPE']); } if (!$storageType) { echo "