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'");
(case when A.isnullable=0 then 'NO' when A.isnullable=1 then 'YES' end) as 'Null',
+
$final_describe = array();
(case when A.colorder=1 then 'PRI' when A.colorder>1 then '' end ) as 'Key',
+
foreach($describe_table as $field){
convert(varchar, C.name) + '(' + convert(varchar, (A.length))  + ')' as 'Type',
+
if($field["TYPE_NAME"]=='int identity'){
(case when A.cdefault=0 then 'NULL' when A.cdefault<>0 then '0' end) as 'Default'
+
$final_describe[] = array(
FROM syscolumns A
+
"Field" => $field["COLUMN_NAME"],
left join  sysobjects B on A.id = B.id
+
"Type" => "int(".$field['LENGTH'].")",
left join systypes C on C.xtype = A.xtype
+
"Null" => $field['NULLABLE'] == 1 ? "YES" : "NO",
WHERE  B.name = '$table'";
+
"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);
 
}
 
}
 
      
 
      

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)