Example #1
0
 /**
  * @param array  $initialData
  * @param string $serverName
  * @param string $database
  * @param string $username
  * @param string $password
  * @param array  $dependencies
  *
  * @throws AlreadyInitializedException
  */
 public static function initMySQL(array $initialData, $serverName, $database, $username, $password, array $dependencies)
 {
     if (!static::$instance) {
         if (empty($serverName) || !is_string($serverName)) {
             throw new UnexpectedValueException('Invalid server name');
         }
         if (empty($database) || !is_string($database)) {
             throw new UnexpectedValueException('Invalid database name');
         }
         if (empty($username) || !is_string($username)) {
             throw new UnexpectedValueException('Invalid username');
         }
         if (!is_string($password)) {
             throw new UnexpectedValueException('Invalid password');
         }
         if (!SimpleArrayLibrary::isAssociative($initialData) && !empty($initialData)) {
             throw new UnexpectedValueException('Invalid table names');
         }
         static::$initialData = $initialData;
         static::initDependencyHandler($initialData, $dependencies);
         static::$instance->connection = new PDO('mysql:host=' . $serverName . ';dbname=' . $database, $username, $password);
         static::$instance->primaryKeys = [];
         foreach ($initialData as $table => $data) {
             $stmt = static::$instance->connection->prepare("SHOW KEYS FROM {$table} WHERE Key_name = 'PRIMARY'");
             $stmt->execute();
             static::$instance->primaryKeys[$table] = [];
             foreach ($stmt->fetchAll() as $row) {
                 static::$instance->primaryKeys[$table][] = $row['Column_name'];
             }
         }
         foreach (static::$instance->primaryKeys as $table => $keys) {
             foreach ($initialData[$table] as $row) {
                 if (!SimpleArrayLibrary::hasAllKeys($row, $keys)) {
                     throw new UnexpectedValueException('Missing keys in initial data for table: ' . $table);
                 }
             }
         }
         // edit $data array where needed
         static::$instance->update();
     } else {
         throw new AlreadyInitializedException('MySQL library already initialized');
     }
 }
Example #2
0
 /**
  * @param array  $initialData
  * @param string $database
  * @param array  $dependencies
  *
  * @throws AlreadyInitializedException
  */
 public static function initMongo(array $initialData, $database, array $dependencies)
 {
     if (!static::$instance) {
         if (empty($database) || !is_string($database)) {
             throw new UnexpectedValueException('Invalid database name');
         }
         if (!SimpleArrayLibrary::isAssociative($initialData) && !empty($initialData)) {
             throw new UnexpectedValueException('Invalid collection names');
         }
         static::$initialData = $initialData;
         static::initDependencyHandler($initialData, $dependencies);
         $client = new \MongoClient();
         static::$instance->database = $client->selectDB($database);
         // edit $data array where needed
         static::$instance->update();
     } else {
         throw new AlreadyInitializedException('Mongo library already initialized');
     }
 }
 /**
  * @param array $data
  *
  * @return void
  * @dataProvider getData
  */
 public function test_function(array $data)
 {
     // invoke logic & test
     $this->assertEquals($data['expResult'], SimpleArrayLibrary::isAssociative($data['array']));
 }
Example #4
0
 /**
  * @param array        $table
  * @param string       $column
  * @param string       $condition
  * @param array|string $value
  *
  * @return array
  * @throws InvalidArgumentException
  */
 public static function whereCondition(array $table, $column, $condition, $value)
 {
     // input validation
     if (!is_numeric($column) && (empty($column) || !is_string($column))) {
         throw new InvalidArgumentException('Invalid column parameter');
     }
     if (count(SimpleArrayLibrary::getRectangularDimensions($table)) != 2) {
         if (empty($table)) {
             return [];
         } else {
             throw new InvalidArgumentException('Table is not a rectangular 2 dimensional array');
         }
     }
     $validConditions = ['>', '<', '=', '==', '>=', '<=', '<>', 'in', 'notin'];
     $condition = strtolower($condition);
     if (!in_array($condition, $validConditions)) {
         throw new InvalidArgumentException('Invalid condition parameter');
     }
     if (in_array($condition, ['in', 'notin']) && !is_array($value)) {
         throw new InvalidArgumentException('In case of "in" & "notin" conditions, value must be an array');
     } elseif (!in_array($condition, ['in', 'notin']) && !is_numeric($value) && !is_string($value) && !is_null($value)) {
         throw new InvalidArgumentException('Invalid value');
     }
     $return = [];
     $tableNumeric = !SimpleArrayLibrary::isAssociative($table);
     foreach ($table as $index => $row) {
         if (!isset($row[$column])) {
             throw new InvalidArgumentException('Column missing from row: ' . $index);
         }
         $keep = true;
         switch ($condition) {
             case '>':
                 $keep = $row[$column] > $value;
                 break;
             case '<':
                 $keep = $row[$column] < $value;
                 break;
             case '>=':
                 $keep = $row[$column] >= $value;
                 break;
             case '<=':
                 $keep = $row[$column] <= $value;
                 break;
             case '=':
             case '==':
                 $keep = $row[$column] == $value;
                 break;
             case '<>':
                 $keep = $row[$column] != $value;
                 break;
             case 'in':
                 $keep = in_array($row[$column], $value);
                 break;
             case 'notin':
                 $keep = !in_array($row[$column], $value);
                 break;
         }
         if ($keep) {
             if ($tableNumeric) {
                 $return[] = $row;
             } else {
                 $return[$index] = $row;
             }
         }
     }
     return $return;
 }