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; } }
/** * 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(); }
/** * @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; }
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; }
/** * @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; }