11    abstract public static function evaluate($database, $field, $criteria);
 
   28    protected static function fieldExtract(array $database, $field): ?int
 
   35        $fieldNames = array_map(
'strtoupper', array_shift($database));
 
   36        if (is_numeric($field)) {
 
   37            return ((
int) $field) - 1;
 
   39        $key = array_search($field, array_values($fieldNames), 
true);
 
   41        return (
$key !== 
false) ? (int) 
$key : 
null;
 
   62    protected static function filter(array $database, array $criteria): array
 
   64        $fieldNames = array_shift($database);
 
   65        $criteriaNames = array_shift($criteria);
 
   74    protected static function getFilteredColumn(array $database, ?
int $field, array $criteria): array
 
   78        $defaultReturnColumnValue = ($field === 
null) ? 1 : 
null;
 
   82        foreach ($database as $rowKey => 
$row) {
 
   85            $columnKey = 
$key ?? 
'A';
 
   86            $columnData[$rowKey][$columnKey] = 
$row[
$key] ?? $defaultReturnColumnValue;
 
   92    private static function buildQuery(array $criteriaNames, array $criteria): string
 
   95        foreach ($criteria as 
$key => $criterion) {
 
   96            foreach ($criterion as $field => $value) {
 
   97                $criterionName = $criteriaNames[$field];
 
   98                if ($value !== 
null && $value !== 
'') {
 
  100                    $baseQuery[
$key][] = $condition;
 
  105        $rowQuery = array_map(
 
  106            function ($rowValue) {
 
  107                return (count($rowValue) > 1) ? 
'AND(' . implode(
',', $rowValue) . 
')' : $rowValue[0];
 
  112        return (count($rowQuery) > 1) ? 
'OR(' . implode(
',', $rowQuery) . 
')' : $rowQuery[0];
 
  115    private static function buildCondition($criterion, 
string $criterionName): string
 
  120        $result = preg_match(
'/(?<operator>[^"]*)(?<operand>".*[*?].*")/ui', $ifCondition, $matches);
 
  122            return "[:{$criterionName}]{$ifCondition}";
 
  125        $trueFalse = ($matches[
'operator'] !== 
'<>');
 
  127        $condition = 
"WILDCARDMATCH([:{$criterionName}],{$wildcard})";
 
  128        if ($trueFalse === 
false) {
 
  129            $condition = 
"NOT({$condition})";
 
  135    private static function executeQuery(array $database, 
string $query, array $criteria, array $fields): array
 
  137        foreach ($database as $dataRow => $dataValues) {
 
  140            foreach ($criteria as $criterion) {
 
  149                unset($database[$dataRow]);
 
  156    private static function processCondition(
string $criterion, array $fields, array $dataValues, 
string $conditions)
 
  158        $key = array_search($criterion, $fields, 
true);
 
  161        if (is_bool($dataValues[
$key])) {
 
  162            $dataValue = ($dataValues[
$key]) ? 
'TRUE' : 
'FALSE';
 
  163        } elseif ($dataValues[
$key] !== 
null) {
 
  164            $dataValue = $dataValues[
$key];
 
  166            if (is_string($dataValue) && strpos($dataValue, 
'"') !== 
false) {
 
  167                $dataValue = str_replace(
'"', 
'""', $dataValue);
 
  172        return str_replace(
'[:' . $criterion . 
']', $dataValue, $conditions);
 
An exception for terminatinating execution or to throw for unit testing.
static wrapResult($value)
Wrap string values in quotes.
static getInstance(?Spreadsheet $spreadsheet=null)
Get an instance of this class.
static buildQuery(array $criteriaNames, array $criteria)
static processCondition(string $criterion, array $fields, array $dataValues, string $conditions)
static evaluate($database, $field, $criteria)
static buildCondition($criterion, string $criterionName)
static executeQuery(array $database, string $query, array $criteria, array $fields)
static getFilteredColumn(array $database, ?int $field, array $criteria)
static filter(array $database, array $criteria)
filter.
static fieldExtract(array $database, $field)
fieldExtract.
static flattenSingleValue($value='')
Convert an array to a single scalar value by extracting the first element.
static ifCondition($condition)
static wildcard(string $wildcard)