extend compatibility for SQLite3
This commit is contained in:
@ -21,8 +21,9 @@ class Creator {
|
||||
|
||||
public function interact() {
|
||||
$name = $this->readline('New model name: ');
|
||||
$table = $this->readline('Table name: ');
|
||||
$entity = $this->readline('Entity name: ');
|
||||
$table = strtolower($name);
|
||||
$table = $this->readline('Table name ['.$table.']: ', $table);
|
||||
$entity = $this->readline('Entity name ['.$table.']: ', $table);
|
||||
$namespace = $this->readline('Namespace [App\Models]: ', 'App\Models');
|
||||
if (strlen($entity) <= 0) {
|
||||
$entity = $table;
|
||||
|
@ -154,6 +154,11 @@ class DBmodel
|
||||
return $where;
|
||||
}
|
||||
|
||||
public function getDBtype()
|
||||
{
|
||||
return $this->dbh->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
||||
}
|
||||
|
||||
public function existTable($table_id)
|
||||
{
|
||||
$query = sprintf(
|
||||
@ -269,11 +274,14 @@ class DBmodel
|
||||
return false;
|
||||
}
|
||||
if (count($primary_key_names) > 1) return true;
|
||||
$last_id = $this->getLastInsertID();
|
||||
/*
|
||||
if (method_exists($this->dbh, 'getLastInsertID')) {
|
||||
$last_id = $this->getLastInsertID();
|
||||
} else {
|
||||
$last_id = $this->getOne('SELECT last_insert_id()');
|
||||
}
|
||||
*/
|
||||
return $last_id;
|
||||
}
|
||||
|
||||
@ -304,12 +312,14 @@ class DBmodel
|
||||
$query = sprintf(
|
||||
'UPDATE %s'
|
||||
. ' SET %s'
|
||||
. ' WHERE %s'
|
||||
. ' LIMIT 1',
|
||||
. ' WHERE %s',
|
||||
$table,
|
||||
$set,
|
||||
$this->buildWherePrimaryKey($table_id, $primary_key)
|
||||
);
|
||||
if ($this->getDBtype() == 'mysql') {
|
||||
$query .= ' LIMIT 1';
|
||||
}
|
||||
$this->_debug('[DBmodel][record][UPDATE]: ' . $query);
|
||||
$ret = $this->query($query);
|
||||
if ($ret === false) {
|
||||
@ -331,11 +341,13 @@ class DBmodel
|
||||
}
|
||||
$query = sprintf(
|
||||
'DELETE FROM %s'
|
||||
. ' WHERE %s'
|
||||
. ' LIMIT 1',
|
||||
. ' WHERE %s',
|
||||
$table,
|
||||
$this->buildWherePrimaryKey($table_id, $primary_key)
|
||||
);
|
||||
if ($this->getDBtype() == 'mysql') {
|
||||
$query .= ' LIMIT 1';
|
||||
}
|
||||
$this->_debug('[DBmodel][record][DELETE]: ' . $query);
|
||||
$ret = $this->query($query);
|
||||
if ($ret === false) {
|
||||
@ -548,6 +560,15 @@ class DBmodel
|
||||
}
|
||||
|
||||
public function getTableColumns($table_name) {
|
||||
$db_type = $this->getDBtype();
|
||||
switch ($db_type) {
|
||||
case 'mysql': return $this->getTableColumnsMYSQL($table_name);
|
||||
case 'sqlite': return $this->getTableColumnsSQLITE($table_name);
|
||||
default: new \Exception('Unknown DB type: ' . $db_type);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTableColumnsMYSQL($table_name) {
|
||||
$desc = $this->getAll(sprintf('DESC %s', $table_name));
|
||||
$desc = $this->arrayKeysToLowerCase($desc);
|
||||
$pks = array();
|
||||
@ -567,6 +588,26 @@ class DBmodel
|
||||
return array('pks' => $pks, 'columns' => $columns, 'types' => $types);
|
||||
}
|
||||
|
||||
public function getTableColumnsSQLITE($table_name) {
|
||||
$desc = $this->getAll(sprintf('PRAGMA table_info(%s)', $table_name));
|
||||
$desc = $this->arrayKeysToLowerCase($desc);
|
||||
$pks = array();
|
||||
$columns = array();
|
||||
foreach ($desc as $d) {
|
||||
$colname = $d['name'];
|
||||
$types[$colname] = $d['type'];
|
||||
if ($d['pk'] == 1) {
|
||||
$pks[] = $colname;
|
||||
if (strtoupper($d['type']) != 'INTEGER') {
|
||||
$columns[] = $colname;
|
||||
}
|
||||
} else {
|
||||
$columns[] = $colname;
|
||||
}
|
||||
}
|
||||
return array('pks' => $pks, 'columns' => $columns, 'types' => $types);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------
|
||||
* HELPER METHODS
|
||||
*/
|
||||
|
Reference in New Issue
Block a user