Exemplo n.º 1
0
 public static function run()
 {
     self::init();
     self::writeLine("micro-muffin v" . LIB_VERSION_NUMBER . " generator");
     self::writeLine("Emptying t_model directory");
     self::emptyDirectory(self::$relativeTModelSaveDir);
     self::writeLine("Emptying sp_model directory");
     self::emptyDirectory(self::$relativeSPModelSaveDir);
     self::writeLine("Connecting to " . DBNAME . " on " . DBHOST . "...");
     try {
         $pdo = PDOS::getInstance();
         $driver = MicroMuffin::getDBDriver();
         self::writeLine("Success !", 'green');
         self::writeLine("Retrieving database " . DBSCHEMA . " schema...");
         $schema = $driver->getAbstractSchema();
         self::writeLine(count($schema->getTables()) . " tables founds");
         self::writeLine("Writing models...");
         $schema->writeFiles();
         self::writeLine("Done !");
         self::writeLine("Enjoy ! ;)");
     } catch (\Exception $e) {
         self::writeLine("Error ! Connection to database failed.", 'red');
         self::writeLine("Error returned : " . $e->getMessage(), 'red');
         die;
     }
 }
Exemplo n.º 2
0
 /**
  * Delete the models from the database
  * @return void
  */
 public function delete()
 {
     $class = strtolower(get_called_class());
     $table = self::$_table_name != null ? self::$_table_name : $class . 's';
     $pdo = PDOS::getInstance();
     $whereClause = '';
     foreach (static::$_primary_keys as $pk) {
         $whereClause .= $pk . ' = :' . $pk . ' AND ';
     }
     $whereClause = substr($whereClause, 0, -4);
     $sql = 'DELETE FROM ' . $table . ' WHERE ' . $whereClause;
     $query = $pdo->prepare($sql);
     $attributes = $this->getAttributes(new \ReflectionClass($this));
     foreach ($attributes as $k => $v) {
         if (in_array($k, static::$_primary_keys)) {
             $query->bindValue(':' . $k, $v);
         }
     }
     $query->execute();
 }
Exemplo n.º 3
0
 /**
  * @param $number
  * @param int $offset
  * @param array|string $order
  * @return static[]
  */
 public static function take($number, $offset = 0, $order = null)
 {
     $class = strtolower(get_called_class());
     $proc = self::$_procstock_take != null ? self::$_procstock_count : 'take' . $class . 's';
     $pdo = PDOS::getInstance();
     $order = self::handleOrder($order);
     $query = $pdo->prepare('SELECT * FROM ' . $proc . '(:start, :number, :order)');
     $query->bindValue(':start', $offset, \PDO::PARAM_INT);
     $query->bindValue(':number', $number, \PDO::PARAM_INT);
     $query->bindValue(':order', is_null($order) ? 'null' : $order);
     $query->execute();
     $datas = $query->fetchAll();
     $outputs = array();
     foreach ($datas as $d) {
         $object = new $class();
         self::hydrate($object, $d);
         $outputs[] = $object;
     }
     return $outputs;
 }
Exemplo n.º 4
0
 private function add()
 {
     $aAttributes = $this->getAttributes(new \ReflectionClass($this));
     //Detection of attributes to insert : non sequence holder and sequence holder that are null
     $aAttributesToInsert = array();
     $aSequencedAttributes = array();
     foreach ($aAttributes as $att => $val) {
         if (!array_key_exists($att, static::$_sequences) || !is_null($aAttributes[$att])) {
             $aAttributesToInsert[$att] = $val;
         } else {
             $aSequencedAttributes[] = $att;
         }
     }
     //Request building
     $sFields = '';
     $sPlaceholders = '';
     foreach ($aAttributesToInsert as $att => $val) {
         $sFields .= $att . ', ';
         $sPlaceholders .= ':' . $att . ', ';
     }
     $sFields = substr($sFields, 0, -2);
     $sPlaceholders = substr($sPlaceholders, 0, -2);
     $pdo = PDOS::getInstance();
     $driver = MicroMuffin::getDBDriver();
     $query = $pdo->prepare('INSERT INTO ' . static::getTableName() . ' (' . $sFields . ') VALUES(' . $sPlaceholders . ')');
     foreach ($aAttributesToInsert as $att => $val) {
         $driver::bindPDOValue($query, ':' . $att, $val);
     }
     $query->execute();
     //Retrieving sequence values for concerned attributes
     foreach ($aSequencedAttributes as $att) {
         $attributeName = '_' . $att;
         $this->{$attributeName} = $pdo->lastInsertId(static::$_sequences[$att]);
     }
     $this->_MM_notInserted = false;
 }
Exemplo n.º 5
0
 /**
  * @param Table[] $tables
  * @return StoredProcedure[]
  */
 private function readCustomStoredProcedures($tables)
 {
     $pdo = PDOS::getInstance();
     $query = $pdo->prepare("\n        SELECT\n          r.routine_name,\n          r.type_udt_name AS routine_return_type,\n          p.ordinal_position AS parameter_position,\n          p.parameter_name,\n          p.data_type AS parameter_type,\n          p.parameter_mode\n        FROM\n          information_schema.routines r\n          LEFT JOIN information_schema.parameters p ON p.specific_name = r.specific_name\n        WHERE\n          r.specific_schema = '" . DBSCHEMA . "' AND\n          r.routine_type = 'FUNCTION' AND\n          r.routine_name LIKE 'sp_%'\n        ORDER BY\n          r.routine_name, parameter_position\n        ");
     $query->execute();
     $aRawStoredProcedures = array();
     foreach ($query->fetchAll() as $param) {
         if (!array_key_exists($param['routine_name'], $aRawStoredProcedures)) {
             $aRawStoredProcedures[$param['routine_name']] = array('name' => $param['routine_name'], 'return_type' => $param['routine_return_type'], 'parameters' => array());
         }
         if (!is_null($param['parameter_position'])) {
             $aRawStoredProcedures[$param['routine_name']]['parameters'][] = new SPParameter($param['parameter_name'], $param['parameter_type'], $param['parameter_mode'], $param['parameter_position']);
         }
     }
     /** @var StoredProcedure[] $aRawStoredProcedures */
     $aStoredProcedures = array();
     $SPFactory = new StoredProcedureFactory($tables);
     foreach ($aRawStoredProcedures as $rawSP) {
         $aStoredProcedures[] = $SPFactory->getStoredProcedure($rawSP['name'], $rawSP['return_type'], $rawSP['parameters']);
     }
     return $aStoredProcedures;
 }