add support for case-insensitive matches w/o re
This commit is contained in:
parent
71fdbb13e2
commit
bf4507f341
|
@ -102,6 +102,7 @@ typedef enum {
|
||||||
#define PTQL_OP_FLAG_REF 2
|
#define PTQL_OP_FLAG_REF 2
|
||||||
#define PTQL_OP_FLAG_GLOB 4
|
#define PTQL_OP_FLAG_GLOB 4
|
||||||
#define PTQL_OP_FLAG_PID 8
|
#define PTQL_OP_FLAG_PID 8
|
||||||
|
#define PTQL_OP_FLAG_ICASE 16
|
||||||
|
|
||||||
struct ptql_parse_branch_t {
|
struct ptql_parse_branch_t {
|
||||||
char *name;
|
char *name;
|
||||||
|
@ -123,6 +124,21 @@ typedef struct {
|
||||||
#define DATA_PTR(branch) \
|
#define DATA_PTR(branch) \
|
||||||
((char *)branch->data.ptr + branch->lookup->offset)
|
((char *)branch->data.ptr + branch->lookup->offset)
|
||||||
|
|
||||||
|
#define IS_ICASE(branch) \
|
||||||
|
(branch->op_flags & PTQL_OP_FLAG_ICASE)
|
||||||
|
|
||||||
|
#define branch_strcmp(branch, s1, s2) \
|
||||||
|
(IS_ICASE(branch) ? strcasecmp(s1, s2) : strcmp(s1, s2))
|
||||||
|
|
||||||
|
#define branch_strncmp(branch, s1, s2, n) \
|
||||||
|
(IS_ICASE(branch) ? strncasecmp(s1, s2, n) : strncmp(s1, s2, n))
|
||||||
|
|
||||||
|
#define branch_strEQ(branch, s1, s2) \
|
||||||
|
(branch_strcmp(branch, s1, s2) == 0)
|
||||||
|
|
||||||
|
#define branch_strnEQ(branch, s1, s2, n) \
|
||||||
|
(branch_strncmp(branch, s1, s2, n) == 0)
|
||||||
|
|
||||||
static void data_free(void *data)
|
static void data_free(void *data)
|
||||||
{
|
{
|
||||||
free(data);
|
free(data);
|
||||||
|
@ -351,37 +367,37 @@ static ptql_op_dbl_t ptql_op_dbl[] = {
|
||||||
static int ptql_op_str_eq(ptql_branch_t *branch,
|
static int ptql_op_str_eq(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return strEQ(haystack, needle);
|
return branch_strEQ(branch, haystack, needle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_ne(ptql_branch_t *branch,
|
static int ptql_op_str_ne(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return !strEQ(haystack, needle);
|
return !branch_strEQ(branch, haystack, needle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_gt(ptql_branch_t *branch,
|
static int ptql_op_str_gt(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return strcmp(haystack, needle) > 0;
|
return branch_strcmp(branch, haystack, needle) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_ge(ptql_branch_t *branch,
|
static int ptql_op_str_ge(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return strcmp(haystack, needle) >= 0;
|
return branch_strcmp(branch, haystack, needle) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_lt(ptql_branch_t *branch,
|
static int ptql_op_str_lt(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return strcmp(haystack, needle) < 0;
|
return branch_strcmp(branch, haystack, needle) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_le(ptql_branch_t *branch,
|
static int ptql_op_str_le(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return strcmp(haystack, needle) <= 0;
|
return branch_strcmp(branch, haystack, needle) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_ew(ptql_branch_t *branch,
|
static int ptql_op_str_ew(ptql_branch_t *branch,
|
||||||
|
@ -393,13 +409,13 @@ static int ptql_op_str_ew(ptql_branch_t *branch,
|
||||||
if (diff < 0) {
|
if (diff < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return strnEQ(haystack + diff, needle, nlen);
|
return branch_strnEQ(branch, haystack + diff, needle, nlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_sw(ptql_branch_t *branch,
|
static int ptql_op_str_sw(ptql_branch_t *branch,
|
||||||
char *haystack, char *needle)
|
char *haystack, char *needle)
|
||||||
{
|
{
|
||||||
return strnEQ(haystack, needle, strlen(needle));
|
return branch_strnEQ(branch, haystack, needle, strlen(needle));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ptql_op_str_re(ptql_branch_t *branch,
|
static int ptql_op_str_re(ptql_branch_t *branch,
|
||||||
|
@ -1286,6 +1302,9 @@ static int ptql_branch_parse(char *query, ptql_parse_branch_t *branch,
|
||||||
case 'P':
|
case 'P':
|
||||||
branch->op_flags |= PTQL_OP_FLAG_PARENT;
|
branch->op_flags |= PTQL_OP_FLAG_PARENT;
|
||||||
break;
|
break;
|
||||||
|
case 'I':
|
||||||
|
branch->op_flags |= PTQL_OP_FLAG_ICASE;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return ptql_error(error, "Unsupported modifier: %c", flag);
|
return ptql_error(error, "Unsupported modifier: %c", flag);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue