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