Initial Commit
This commit is contained in:
131
dependencies/berlindb/core/src/Database/Queries/Compare.php
vendored
Normal file
131
dependencies/berlindb/core/src/Database/Queries/Compare.php
vendored
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Base Custom Database Table Compare Query Class.
|
||||
*
|
||||
* @package Database
|
||||
* @subpackage Compare
|
||||
* @copyright Copyright (c) 2021
|
||||
* @license https://opensource.org/licenses/MIT MIT
|
||||
* @since 1.0.0
|
||||
*/
|
||||
namespace WP_Ultimo\Dependencies\BerlinDB\Database\Queries;
|
||||
|
||||
// Exit if accessed directly
|
||||
\defined('ABSPATH') || exit;
|
||||
/**
|
||||
* Class used for generating SQL for compare clauses.
|
||||
*
|
||||
* This class is used to generate the SQL when a `compare` argument is passed to
|
||||
* the `Base` query class. It extends `Meta` so the `compare` key accepts
|
||||
* the same parameters as the ones passed to `Meta`.
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class Compare extends Meta
|
||||
{
|
||||
// All supported SQL comparisons
|
||||
const ALL_COMPARES = array('=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP', 'RLIKE');
|
||||
// IN and BETWEEN
|
||||
const IN_BETWEEN_COMPARES = array('IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN');
|
||||
/**
|
||||
* Generate SQL WHERE clauses for a first-order query clause.
|
||||
*
|
||||
* "First-order" means that it's an array with a 'key' or 'value'.
|
||||
*
|
||||
* @since 1.0.0
|
||||
*
|
||||
* @param array $clause Query clause (passed by reference).
|
||||
* @param array $parent_query Parent query array.
|
||||
* @param string $clause_key Optional. The array key used to name the clause in the original `$meta_query`
|
||||
* parameters. If not provided, a key will be generated automatically.
|
||||
* @return array {
|
||||
* Array containing WHERE SQL clauses to append to a first-order query.
|
||||
*
|
||||
* @type string $where SQL fragment to append to the main WHERE clause.
|
||||
* }
|
||||
*/
|
||||
public function get_sql_for_clause(&$clause, $parent_query, $clause_key = '')
|
||||
{
|
||||
global $wpdb;
|
||||
// Default chunks
|
||||
$sql_chunks = array('where' => array(), 'join' => array());
|
||||
// Maybe format compare clause
|
||||
if (isset($clause['compare'])) {
|
||||
$clause['compare'] = \strtoupper($clause['compare']);
|
||||
// Or set compare clause based on value
|
||||
} else {
|
||||
$clause['compare'] = isset($clause['value']) && \is_array($clause['value']) ? 'IN' : '=';
|
||||
}
|
||||
// Fallback to equals
|
||||
if (!\in_array($clause['compare'], self::ALL_COMPARES, \true)) {
|
||||
$clause['compare'] = '=';
|
||||
}
|
||||
// Uppercase or equals
|
||||
if (isset($clause['compare_key']) && 'LIKE' === \strtoupper($clause['compare_key'])) {
|
||||
$clause['compare_key'] = \strtoupper($clause['compare_key']);
|
||||
} else {
|
||||
$clause['compare_key'] = '=';
|
||||
}
|
||||
// Get comparison from clause
|
||||
$compare = $clause['compare'];
|
||||
/** Build the WHERE clause ********************************************/
|
||||
// Column name and value.
|
||||
if (\array_key_exists('key', $clause) && \array_key_exists('value', $clause)) {
|
||||
$column = sanitize_key($clause['key']);
|
||||
$value = $clause['value'];
|
||||
// IN or BETWEEN
|
||||
if (\in_array($compare, self::IN_BETWEEN_COMPARES, \true)) {
|
||||
if (!\is_array($value)) {
|
||||
$value = \preg_split('/[,\\s]+/', $value);
|
||||
}
|
||||
// Anything else
|
||||
} else {
|
||||
$value = \trim($value);
|
||||
}
|
||||
// Format WHERE from compare value(s)
|
||||
switch ($compare) {
|
||||
case 'IN':
|
||||
case 'NOT IN':
|
||||
$compare_string = '(' . \substr(\str_repeat(',%s', \count($value)), 1) . ')';
|
||||
$where = $wpdb->prepare($compare_string, $value);
|
||||
break;
|
||||
case 'BETWEEN':
|
||||
case 'NOT BETWEEN':
|
||||
$value = \array_slice($value, 0, 2);
|
||||
$where = $wpdb->prepare('%s AND %s', $value);
|
||||
break;
|
||||
case 'LIKE':
|
||||
case 'NOT LIKE':
|
||||
$value = '%' . $wpdb->esc_like($value) . '%';
|
||||
$where = $wpdb->prepare('%s', $value);
|
||||
break;
|
||||
// EXISTS with a value is interpreted as '='.
|
||||
case 'EXISTS':
|
||||
$compare = '=';
|
||||
$where = $wpdb->prepare('%s', $value);
|
||||
break;
|
||||
// 'value' is ignored for NOT EXISTS.
|
||||
case 'NOT EXISTS':
|
||||
$where = '';
|
||||
break;
|
||||
default:
|
||||
$where = $wpdb->prepare('%s', $value);
|
||||
break;
|
||||
}
|
||||
// Maybe add column, compare, & where to chunks
|
||||
if (!empty($where)) {
|
||||
$sql_chunks['where'][] = "{$column} {$compare} {$where}";
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Multiple WHERE clauses (for meta_key and meta_value) should
|
||||
* be joined in parentheses.
|
||||
*/
|
||||
if (1 < \count($sql_chunks['where'])) {
|
||||
$sql_chunks['where'] = array('( ' . \implode(' AND ', $sql_chunks['where']) . ' )');
|
||||
}
|
||||
// Return
|
||||
return $sql_chunks;
|
||||
}
|
||||
}
|
1017
dependencies/berlindb/core/src/Database/Queries/Date.php
vendored
Normal file
1017
dependencies/berlindb/core/src/Database/Queries/Date.php
vendored
Normal file
File diff suppressed because it is too large
Load Diff
28
dependencies/berlindb/core/src/Database/Queries/Meta.php
vendored
Normal file
28
dependencies/berlindb/core/src/Database/Queries/Meta.php
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Base Custom Database Table Meta Query Class.
|
||||
*
|
||||
* @package Database
|
||||
* @subpackage Meta
|
||||
* @copyright Copyright (c) 2021
|
||||
* @license https://opensource.org/licenses/MIT MIT
|
||||
* @since 1.1.0
|
||||
*/
|
||||
namespace WP_Ultimo\Dependencies\BerlinDB\Database\Queries;
|
||||
|
||||
// Exit if accessed directly
|
||||
\defined('ABSPATH') || exit;
|
||||
// @todo Remove the need for this dependency
|
||||
use \WP_Meta_Query;
|
||||
/**
|
||||
* Class for generating SQL clauses that filter a primary query according to meta.
|
||||
*
|
||||
* It currently extends the WP_Meta_Query class in WordPress, but in the future
|
||||
* will be derived completely from other registered tables.
|
||||
*
|
||||
* @since 1.1.0
|
||||
*/
|
||||
class Meta extends WP_Meta_Query
|
||||
{
|
||||
}
|
Reference in New Issue
Block a user