示例#1
0
 /**
  * Construct the argument list
  *
  * @param  string  $table  name of the database table we need to create the list for
  * @return array
  */
 protected static function arguments($table)
 {
     // get the list of columns from the table
     try {
         $columns = \DB::list_columns(trim($table), null, \Cli::option('db', null));
     } catch (\Exception $e) {
         \Cli::write($e->getMessage(), 'red');
         exit;
     }
     // construct the arguments list, starting with the table name
     $arguments = array($table);
     // set some switches
     $include_timestamps = false;
     $timestamp_is_int = true;
     // process the columns found
     foreach ($columns as $column) {
         // do we have a data_type defined? If not, use the generic type
         isset($column['data_type']) or $column['data_type'] = $column['type'];
         // skip the 'id' column, it will be added automatically
         if ($column['name'] == 'id') {
             continue;
         }
         // detect timestamp columns
         if (in_array($column['name'], array('created_at', 'updated_at'))) {
             $include_timestamps = true;
             $timestamp_is_int = $column['data_type'] == 'int';
             continue;
         }
         // do we need to add constraints?
         $constraint = '';
         foreach (array('length', 'character_maximum_length', 'display') as $idx) {
             // check if we have such a column, and filter out some default values
             if (isset($column[$idx]) and !in_array($column[$idx], array('65535', '4294967295'))) {
                 $constraint = '[' . $column[$idx] . ']';
                 break;
             }
         }
         // if it's an enum column, list the available options
         if (in_array($column['data_type'], array('set', 'enum'))) {
             $constraint = '[' . implode(',', $column['options']) . ']';
         }
         // store the column in the argument list
         $arguments[] = $column['name'] . ':' . $column['data_type'] . $constraint;
     }
     // set the switches for the code generation
     \Cli::set_option('no-timestamp', $include_timestamps === false);
     \Cli::set_option('mysql-timestamp', $timestamp_is_int === false);
     // return the generated argument list
     return $arguments;
 }
示例#2
0
 /**
  * Generate documentation from config
  *
  * Usage (from command line):
  * 
  * php oil r dbdocs:fromconfig
  * 
  * @param  $dir Documentation directory
  * @param  $name Name of config
  */
 public static function fromconfig($dir = null, $name = null)
 {
     if ($dir === null) {
         static::help();
         exit;
     }
     \Config::load('dbdocsconnections', true);
     $connections = \Config::get('dbdocsconnections', array());
     if (empty($connections)) {
         \Cli::write('Configuration is empty.', 'red');
     } else {
         if ($name === null) {
             $name = trim(\Cli::prompt("Enter a name.\n", array_keys($connections)));
         } else {
             if (!isset($connections[$name])) {
                 \Cli::write("Not Found configuration \"{$name}\"", 'red');
                 exit;
             }
         }
         \Cli::set_option('n', true);
         foreach ($connections[$name] as $k => $v) {
             if (!empty($k) and $k != 'driver') {
                 \Cli::set_option($k, $v);
             }
         }
         switch ($connections[$name]['driver']) {
             case 'pdo_mysql':
                 static::mysql($dir);
                 break;
             case 'pdo_pgsql':
                 static::pgsql($dir);
                 break;
             case 'pdo_sqlite':
                 static::sqlite($dir);
                 break;
             case 'pdo_sqlsrv':
                 static::mssql($dir);
                 break;
         }
     }
 }