Example #1
0
 public function drop_table_sql(\org\rhaco\store\db\Dao $dao)
 {
     $quote = function ($name) {
         return '`' . $name . '`';
     };
     $sql = 'drop table ' . $quote($dao->table());
     return $sql;
 }
Example #2
0
 public function exists_table_sql(\org\rhaco\store\db\Dao $dao)
 {
     return sprintf('select count(*) from sqlite_master where type=\'table\' and name=\'%s\'', $dao->table());
 }
Example #3
0
 /**
  * create table
  * @module org.rhaco.store.db.Dbc
  * @param org.rhaco.store.db.Dao $dao
  */
 public function create_table_sql(\org\rhaco\store\db\Dao $dao)
 {
     $quote = function ($name) {
         return '`' . $name . '`';
     };
     $to_column_type = function ($dao, $type, $name) use($quote) {
         switch ($type) {
             case '':
             case 'mixed':
             case 'string':
                 return $quote($name) . ' varchar(' . $dao->prop_anon($name, 'max', 255) . ')';
             case 'alnum':
             case 'text':
                 return $quote($name) . ($dao->prop_anon($name, 'max') !== null ? ' varchar(' . $dao->prop_anon($name, 'max') . ')' : ' text');
             case 'number':
                 return $quote($name) . ' ' . ($dao->prop_anon($name, 'decimal_places') !== null ? sprintf('numeric(%d,%d)', 26 - $dao->prop_anon($name, 'decimal_places'), $dao->prop_anon($name, 'decimal_places')) : 'double');
             case 'serial':
                 return $quote($name) . ' int auto_increment';
             case 'boolean':
                 return $quote($name) . ' int(1)';
             case 'timestamp':
                 return $quote($name) . ' timestamp';
             case 'date':
                 return $quote($name) . ' date';
             case 'time':
                 return $quote($name) . ' int';
             case 'intdate':
             case 'integer':
                 return $quote($name) . ' int';
             case 'email':
                 return $quote($name) . ' varchar(255)';
             case 'choice':
                 return $quote($name) . ' varchar(255)';
             default:
                 throw new \InvalidArgumentException('undefined type `' . $type . '`');
         }
     };
     $columndef = $primary = array();
     $sql = 'create table ' . $quote($dao->table()) . '(' . PHP_EOL;
     foreach ($dao->props(false) as $prop_name => $v) {
         if ($this->create_table_prop_cond($dao, $prop_name)) {
             $column_str = '  ' . $to_column_type($dao, $dao->prop_anon($prop_name, 'type'), $prop_name) . ' null ';
             $columndef[] = $column_str;
             if ($dao->prop_anon($prop_name, 'primary') === true || $dao->prop_anon($prop_name, 'type') == 'serial') {
                 $primary[] = $quote($prop_name);
             }
         }
     }
     $sql .= implode(',' . PHP_EOL, $columndef) . PHP_EOL;
     if (!empty($primary)) {
         $sql .= ' ,primary key ( ' . implode(',', $primary) . ' ) ' . PHP_EOL;
     }
     $sql .= ' ) engine = InnoDB character set utf8 collate utf8_general_ci;' . PHP_EOL;
     return $sql;
 }