24 require_once
CORE_PATH .
'libs/db/adapters/pdo.php';
97 $table = addslashes(
"$table");
98 $num = $this->
fetch_one(
"SELECT COUNT(*) FROM sysobjects WHERE type = 'U' AND name = '$table'");
112 if(!isset($params[
'offset']) && isset($params[
'limit'])){
113 return str_ireplace(
"SELECT ",
"SELECT TOP $params[limit] ", $sql);
115 $orderby = stristr($sql,
'ORDER BY');
116 if ($orderby !==
false) {
117 $sort = (stripos($orderby,
'desc') !==
false) ?
'desc' :
'asc';
118 $order = str_ireplace(
'ORDER BY',
'', $orderby);
119 $order = trim(preg_replace(
'/ASC|DESC/i',
'', $order));
121 $sql = preg_replace(
'/^SELECT\s/i',
'SELECT TOP ' . $params[offset] .
' ', $sql);
122 $sql =
'SELECT * FROM (SELECT TOP ' . $params[
limit] .
' * FROM (' . $sql .
') AS itable';
123 if ($orderby !==
false) {
124 $sql.=
' ORDER BY ' . $order .
' ';
125 $sql.= ( stripos($sort,
'asc') !==
false) ?
'DESC' :
'ASC';
127 $sql.=
') AS otable';
128 if ($orderby !==
false) {
129 $sql.=
' ORDER BY ' . $order .
' ' . $sort;
144 return $this->
query(
"DROP TABLE $table");
149 return $this->
query(
"DROP TABLE $table");
168 $create_sql =
"CREATE TABLE $table (";
169 if (!is_array($definition)) {
170 new KumbiaException(
"Definición invalida para crear la tabla '$table'");
173 $create_lines = array();
175 $unique_index = array();
179 foreach ($definition as $field => $field_def) {
180 if (isset($field_def[
'not_null'])) {
181 $not_null = $field_def[
'not_null'] ?
'NOT NULL' :
'';
185 if (isset($field_def[
'size'])) {
186 $size = $field_def[
'size'] ?
'(' . $field_def[
'size'] .
')' :
'';
190 if (isset($field_def[
'index'])) {
191 if ($field_def[
'index']) {
192 $index[] =
"INDEX($field)";
195 if (isset($field_def[
'unique_index'])) {
196 if ($field_def[
'unique_index']) {
197 $index[] =
"UNIQUE($field)";
200 if (isset($field_def[
'primary'])) {
201 if ($field_def[
'primary']) {
202 $primary[] =
"$field";
205 if (isset($field_def[
'auto'])) {
206 if ($field_def[
'auto']) {
207 $field_def[
'extra'] = isset($field_def[
'extra']) ? $field_def[
'extra'] .
" IDENTITY" :
"IDENTITY";
210 if (isset($field_def[
'extra'])) {
211 $extra = $field_def[
'extra'];
215 $create_lines[] =
"$field " . $field_def[
'type'] . $size .
' ' . $not_null .
' ' . $extra;
217 $create_sql.= join(
',', $create_lines);
218 $last_lines = array();
219 if (count($primary)) {
220 $last_lines[] =
'PRIMARY KEY(' . join(
",", $primary) .
')';
223 $last_lines[] = join(
',', $index);
225 if (count($unique_index)) {
226 $last_lines[] = join(
',', $unique_index);
228 if (count($last_lines)) {
229 $create_sql.=
',' . join(
',', $last_lines) .
')';
231 return $this->
query($create_sql);
241 return $this->
fetch_all(
"SELECT name FROM sysobjects WHERE type = 'U' ORDER BY name");
252 $describe_table = $this->
fetch_all(
"exec sp_columns @table_name = '$table'");
253 $final_describe = array();
254 foreach ($describe_table as $field) {
255 $final_describe[] = array(
256 "Field" => $field[
"COLUMN_NAME"],
257 "Type" => $field[
'LENGTH'] ? $field[
"TYPE_NAME"] : $field[
"TYPE_NAME"] .
"(" . $field[
'LENGTH'] .
")",
258 "Null" => $field[
'NULLABLE'] == 1 ?
"YES" :
"NO"
261 $describe_keys = $this->
fetch_all(
"exec sp_pkeys @table_name = '$table'");
262 foreach ($describe_keys as $field) {
263 for ($i = 0; $i <= count($final_describe) - 1; $i++) {
264 if ($final_describe[$i][
'Field'] == $field[
'COLUMN_NAME']) {
265 $final_describe[$i][
'Key'] =
'PRI';
267 $final_describe[$i][
'Key'] =
"";
271 return $final_describe;
284 $num = $this->
fetch_one(
"SELECT MAX($primary_key) FROM $table");
285 return (
int) $num[0];