+ return self::prepare(func_get_args());
+ }
+
+ // Produce the SQL statement for setting/unsetting a flag
+ public static function changeFlag($fieldname, $flagname, $state)
+ {
+ if ($state) {
+ return XDB::format($fieldname . ' = CONCAT({?}, \',\', ' . $fieldname . ')', $flagname);
+ } else {
+ return XDB::format($fieldname . ' = REPLACE(' . $fieldname . ', {?}, \'\')', $flagname);
+ }
+ }
+
+ // Produce the SQL statement representing an array
+ public static function formatArray(array $array)
+ {
+ return self::escape($array);
+ }
+
+ const WILDCARD_EXACT = 0x00;
+ const WILDCARD_PREFIX = 0x01;
+ const WILDCARD_SUFFIX = 0x02;
+ const WILDCARD_CONTAINS = 0x03; // WILDCARD_PREFIX | WILDCARD_SUFFIX
+
+ // Produce a valid XDB argument that get formatted as a wildcard
+ // according to the given mode.
+ //
+ // Example:
+ // XDB::query("SELECT * FROM table WHERE field {?}", XDB::wildcard($text, WILDCARD_EXACT));
+ public static function wildcard($mode, $value)
+ {
+ return new XDBWildcard($value, $mode);
+ }
+
+ // Returns the SQL statement for a wildcard search.
+ public static function formatWildcards($mode, $text)
+ {
+ return XDB::wildcard($mode, $text)->format();
+ }
+
+ // Returns a FIELD(blah, 3, 1, 2) for use in an order with custom orders
+ public static function formatCustomOrder($field, $values)
+ {
+ return 'FIELD( ' . $field . ', ' . implode(', ', array_map(array('XDB', 'escape'), $values)) . ')';