static function _buildWhere($group, $groupOperator='AND', $escape=true) { //"Bitch I'll pick the world up and I'ma drop it on your f*ckin' head" - Lil Wayne. $keys = array_keys($group); if(is_int(f_last($keys)) && is_string(f_last($group))) { $operator = f_last($group); $group = f_chop($group); } else { $operator = '='; } if(is_int(f_first($keys)) && is_string(f_first($group))) { $groupOperator = f_first($group); $group = f_rest($group); } $builtArray = f_keyMap( function($value, $key) use($groupOperator, $operator, $escape) { if(is_int($key) && is_array($value)) { $bWhere = Query::_buildWhere($value, $groupOperator, $escape); if(!empty($bWhere)) { return '(' . "\n\t" . $bWhere . "\n" .')'; } else { return null; } } if(is_string($key)) { static $escapeFunc = array('Query' , 'nullEscape'); if(!$escape) { $escapeFunc = 'nothing'; } else { $escapeFunc = f_callable($escapeFunc); } if(is_array($value)) { $key = $escapeFunc($key, ''); if(f_first(array_keys($value)) !== 0) { return join(' ' . $groupOperator . ' ', f_keyMap(function($v, $k) use($key, $escapeFunc) { return $key . ' BETWEEN ' . $escapeFunc($k) . ' AND ' . $escapeFunc($v); }, $value)); } return $key . ' IN (' . join(', ', array_map($escapeFunc, $value)) . ')'; } else { $value = call_user_func($escapeFunc, $value); if($value === 'null') { if($operator == '=') { $operator = 'IS'; } else { $operator = 'IS NOT'; } } return Query::escape($key) . ' ' . $operator . ' ' . $value; } } }, $group ); if(!empty($builtArray)) { return join(' ' . $groupOperator . ' ', array_filter($builtArray)); } }
static function _buildWhere($group, $groupOperator='AND', $escape=true) { //"Bitch I'll pick the world up and I'ma drop it on your f*ckin' head" - Lil Wayne. $keys = array_keys($group); if(is_int(f_last($keys)) && is_string(f_last($group))) { $operator = f_last($group); $group = f_chop($group); } else { $operator = '='; } if(is_int(f_first($keys)) && is_string(f_first($group))) { $groupOperator = f_first($group); $group = f_rest($group); } $builtArray = f_keyMap( function($value, $key) use($groupOperator, $operator, $escape) { if(is_int($key) && is_array($value)) { //Group? @todo double check to make sure OR is working $bWhere = Query::_buildWhere($value, $groupOperator, $escape); if(!empty($bWhere)) { return '(' . "\n" . $bWhere . ')'; } else { return null; } } if(is_string($key)) { static $escapeFunc = 'Query::nullEscape'; if(!$escape) { $escapeFunc = 'nothing'; } //column if(is_array($value)) { //IN or group return Query::escape($key) . ' IN (' . join(', ', array_map($escapeFunc, $value)) . ')'; } else { $value = call_user_func($escapeFunc, $value); if($value === 'null') { if($operator == '=') { $operator = 'IS'; } else { $operator = 'IS NOT'; } } return Query::escape($key) . ' ' . $operator . ' ' . $value; } } }, $group ); // D::log($builtArray, 'built array'); if(!empty($builtArray)) { return join(' ' . $groupOperator . ' ', array_filter($builtArray)); } }