Edición de «Adapter MsSQL»
De KumbiaPHP Framework Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.
Revisión actual | Tu texto | ||
Línea 370: | Línea 370: | ||
} | } | ||
} | } | ||
+ | |||
+ | /** | ||
+ | * Crea una tabla utilizando SQL nativo del RDBM | ||
+ | * | ||
+ | * TODO: | ||
+ | * - Falta que el parametro index funcione. Este debe listar indices compuestos multipes y unicos | ||
+ | * - Agregar el tipo de tabla que debe usarse (MsSQL) | ||
+ | * - Soporte para campos autonumericos | ||
+ | * - Soporte para llaves foraneas | ||
+ | * | ||
+ | * @param string $table | ||
+ | * @param array $definition | ||
+ | * @return boolean | ||
+ | */ | ||
+ | public function create_table($table, $definition, $index=array()){ | ||
+ | $create_sql = "CREATE TABLE $table ("; | ||
+ | if(!is_array($definition)){ | ||
+ | throw new KumbiaException("Definición invalida para crear la tabla '$table'"); | ||
+ | } | ||
+ | $create_lines = array(); | ||
+ | $index = array(); | ||
+ | $unique_index = array(); | ||
+ | $primary = array(); | ||
+ | $not_null = ""; | ||
+ | $size = ""; | ||
+ | foreach($definition as $field => $field_def){ | ||
+ | if(isset($field_def['not_null'])){ | ||
+ | $not_null = $field_def['not_null'] ? 'NOT NULL' : ''; | ||
+ | } else { | ||
+ | $not_null = ""; | ||
+ | } | ||
+ | if(isset($field_def['size'])){ | ||
+ | $size = $field_def['size'] ? '('.$field_def['size'].')' : ''; | ||
+ | } else { | ||
+ | $size = ""; | ||
+ | } | ||
+ | if(isset($field_def['index'])){ | ||
+ | if($field_def['index']){ | ||
+ | $index[] = "INDEX(`$field`)"; | ||
+ | } | ||
+ | } | ||
+ | if(isset($field_def['unique_index'])){ | ||
+ | if($field_def['unique_index']){ | ||
+ | $index[] = "UNIQUE(`$field`)"; | ||
+ | } | ||
+ | } | ||
+ | if(isset($field_def['primary'])){ | ||
+ | if($field_def['primary']){ | ||
+ | $primary[] = "`$field`"; | ||
+ | } | ||
+ | } | ||
+ | if(isset($field_def['auto'])){ | ||
+ | if($field_def['auto']){ | ||
+ | $field_def['extra'] = isset($field_def['extra']) ? $field_def['extra']." AUTO_INCREMENT" : "AUTO_INCREMENT"; | ||
+ | } | ||
+ | } | ||
+ | if(isset($field_def['extra'])){ | ||
+ | $extra = $field_def['extra']; | ||
+ | } else { | ||
+ | $extra = ""; | ||
+ | } | ||
+ | $create_lines[] = "`$field` ".$field_def['type'].$size.' '.$not_null.' '.$extra; | ||
+ | } | ||
+ | $create_sql.= join(',', $create_lines); | ||
+ | $last_lines = array(); | ||
+ | if(count($primary)){ | ||
+ | $last_lines[] = 'PRIMARY KEY('.join(",", $primary).')'; | ||
+ | } | ||
+ | if(count($index)){ | ||
+ | $last_lines[] = join(',', $index); | ||
+ | } | ||
+ | if(count($unique_index)){ | ||
+ | $last_lines[] = join(',', $unique_index); | ||
+ | } | ||
+ | if(count($last_lines)){ | ||
+ | $create_sql.= ','.join(',', $last_lines).')'; | ||
+ | } | ||
+ | return $this->query($create_sql); | ||
+ | |||
+ | } | ||
+ | |||
/** | /** | ||
* Listar las tablas en la base de datos | * Listar las tablas en la base de datos | ||
Línea 386: | Línea 467: | ||
*/ | */ | ||
public function describe_table($table, $schema=''){ | public function describe_table($table, $schema=''){ | ||
− | $sql = "SELECT A.name as Field, | + | $describe_table = $this->fetch_all("exec sp_columns @table_name = '$table'"); |
− | + | $final_describe = array(); | |
− | + | foreach($describe_table as $field){ | |
− | + | if($field["TYPE_NAME"]=='int identity'){ | |
− | + | $final_describe[] = array( | |
− | + | "Field" => $field["COLUMN_NAME"], | |
− | + | "Type" => "int(".$field['LENGTH'].")", | |
− | + | "Null" => $field['NULLABLE'] == 1 ? "YES" : "NO", | |
− | + | "Key" => 'PRI', | |
− | return $this->fetch_all($sql); | + | 'Default' => $field['COLUMN_DEF'] |
+ | ); | ||
+ | }else{ | ||
+ | $final_describe[] = array( | ||
+ | "Field" => $field["COLUMN_NAME"], | ||
+ | "Type" => $field['LENGTH'] ? $field["TYPE_NAME"] : $field["TYPE_NAME"]."(".$field['LENGTH'].")", | ||
+ | "Null" => $field['NULLABLE'] == 1 ? "YES" : "NO", | ||
+ | "Key" => '', | ||
+ | 'Default' => $field['COLUMN_DEF'] | ||
+ | ); | ||
+ | } | ||
+ | } | ||
+ | return $final_describe; | ||
+ | //$sql = "SELECT A.name as Field, | ||
+ | // (case when A.isnullable=0 then 'NO' when A.isnullable=1 then 'YES' end) as 'Null', | ||
+ | // (case when A.colstat=1 then 'PRI' when A.colstat='' then '' end) as 'Key', | ||
+ | // (case when A.cdefault=0 then 'NULL' when A.cdefault<>0 then '0' end) as 'Default' | ||
+ | // FROM syscolumns A, sysobjects B WHERE A.ID = B.ID AND B.name = '$table'"; | ||
+ | //return $this->fetch_all($sql); | ||
} | } | ||