/* local vars */
static gchar *ssp_result;
static char sparqlvar;
+ static char *result_limit;
/* Line 371 of yacc.c */
-#line 106 "slmod_sparql_parser.c"
+#line 107 "slmod_sparql_parser.c"
# ifndef YY_NULL
# if defined __cplusplus && 201103L <= __cplusplus
/* In a future release of Bison, this section will be replaced
by #include "y.tab.h". */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
+#ifndef YY_YY_SLMOD_SPARQL_PARSER_H_INCLUDED
+# define YY_YY_SLMOD_SPARQL_PARSER_H_INCLUDED
/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
typedef union YYSTYPE
{
/* Line 387 of yacc.c */
-#line 45 "slmod_sparql_parser.y"
+#line 46 "slmod_sparql_parser.y"
int ival;
const char *sval;
/* Line 387 of yacc.c */
-#line 189 "slmod_sparql_parser.c"
+#line 190 "slmod_sparql_parser.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
#endif /* ! YYPARSE_PARAM */
/* "%code provides" blocks. */
/* Line 387 of yacc.c */
-#line 39 "slmod_sparql_parser.y"
+#line 40 "slmod_sparql_parser.y"
#define SPRAW_TIME_OFFSET 978307200
extern int map_spotlight_to_sparql_query(slq_t *slq, gchar **sparql_result);
/* Line 387 of yacc.c */
-#line 221 "slmod_sparql_parser.c"
+#line 222 "slmod_sparql_parser.c"
-#endif /* !YY_YY_Y_TAB_H_INCLUDED */
+#endif /* !YY_YY_SLMOD_SPARQL_PARSER_H_INCLUDED */
/* Copy the second part of user declarations. */
/* Line 390 of yacc.c */
-#line 228 "slmod_sparql_parser.c"
+#line 229 "slmod_sparql_parser.c"
#ifdef short
# undef short
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 67, 67, 69, 73, 83, 89, 95, 96, 97,
- 98, 99, 108, 109, 110, 111, 112, 113, 114, 115,
- 119, 123, 124
+ 0, 68, 68, 70, 74, 88, 94, 102, 103, 104,
+ 105, 112, 125, 126, 127, 128, 129, 130, 131, 132,
+ 136, 140, 141
};
#endif
{
case 4:
/* Line 1792 of yacc.c */
-#line 73 "slmod_sparql_parser.y"
+#line 74 "slmod_sparql_parser.y"
{
+ if (ssp_slq->slq_result_limit)
+ result_limit = talloc_asprintf(ssp_slq, "LIMIT %ld", ssp_slq->slq_result_limit);
+ else
+ result_limit = "";
ssp_result = talloc_asprintf(ssp_slq,
- "SELECT DISTINCT ?url WHERE "
- "{ ?obj nie:url ?url FILTER(regex(?url, '^file://%s/')) . %s}",
- ssp_slq->slq_vol->v_path, (yyvsp[(1) - (1)].sval));
+ "SELECT ?url WHERE "
+ "{ %s . ?obj nie:url ?url . FILTER(tracker:uri-is-descendant('file://%s/', ?url)) } %s",
+ (yyvsp[(1) - (1)].sval), ssp_slq->slq_vol->v_path, result_limit);
(yyval.sval) = ssp_result;
}
break;
case 5:
/* Line 1792 of yacc.c */
-#line 83 "slmod_sparql_parser.y"
+#line 88 "slmod_sparql_parser.y"
{
if ((yyvsp[(1) - (1)].bval) == false)
YYACCEPT;
case 6:
/* Line 1792 of yacc.c */
-#line 89 "slmod_sparql_parser.y"
+#line 94 "slmod_sparql_parser.y"
{
+ if ((yyvsp[(1) - (3)].sval) == NULL || (yyvsp[(3) - (3)].sval) == NULL)
+ YYABORT;
if (strcmp((yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval)) != 0)
(yyval.sval) = talloc_asprintf(ssp_slq, "{ %s } UNION { %s }", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval));
else
case 7:
/* Line 1792 of yacc.c */
-#line 95 "slmod_sparql_parser.y"
+#line 102 "slmod_sparql_parser.y"
{(yyval.sval) = (yyvsp[(1) - (1)].sval); if ((yyval.sval) == NULL) YYABORT;}
break;
case 8:
/* Line 1792 of yacc.c */
-#line 96 "slmod_sparql_parser.y"
+#line 103 "slmod_sparql_parser.y"
{(yyval.sval) = (yyvsp[(1) - (1)].sval);}
break;
case 9:
/* Line 1792 of yacc.c */
-#line 97 "slmod_sparql_parser.y"
+#line 104 "slmod_sparql_parser.y"
{(yyval.sval) = talloc_asprintf(ssp_slq, "%s", (yyvsp[(2) - (3)].sval));}
break;
case 10:
/* Line 1792 of yacc.c */
-#line 98 "slmod_sparql_parser.y"
- {(yyval.sval) = talloc_asprintf(ssp_slq, "%s . %s", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval));}
+#line 105 "slmod_sparql_parser.y"
+ {
+ if (!ssp_slq->slq_allow_expr) {
+ yyerror("Spotlight queries with logic expressions are disabled");
+ YYABORT;
+ }
+ (yyval.sval) = talloc_asprintf(ssp_slq, "%s . %s", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval));
+}
break;
case 11:
/* Line 1792 of yacc.c */
-#line 99 "slmod_sparql_parser.y"
+#line 112 "slmod_sparql_parser.y"
{
+ if (!ssp_slq->slq_allow_expr) {
+ yyerror("Spotlight queries with logic expressions are disabled");
+ YYABORT;
+ }
if (strcmp((yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval)) != 0)
(yyval.sval) = talloc_asprintf(ssp_slq, "{ %s } UNION { %s }", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].sval));
else
case 12:
/* Line 1792 of yacc.c */
-#line 108 "slmod_sparql_parser.y"
+#line 125 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (5)].sval), '=', (yyvsp[(4) - (5)].sval));}
break;
case 13:
/* Line 1792 of yacc.c */
-#line 109 "slmod_sparql_parser.y"
+#line 126 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (5)].sval), '!', (yyvsp[(4) - (5)].sval));}
break;
case 14:
/* Line 1792 of yacc.c */
-#line 110 "slmod_sparql_parser.y"
+#line 127 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (5)].sval), '<', (yyvsp[(4) - (5)].sval));}
break;
case 15:
/* Line 1792 of yacc.c */
-#line 111 "slmod_sparql_parser.y"
+#line 128 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (5)].sval), '>', (yyvsp[(4) - (5)].sval));}
break;
case 16:
/* Line 1792 of yacc.c */
-#line 112 "slmod_sparql_parser.y"
+#line 129 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (6)].sval), '=', (yyvsp[(4) - (6)].sval));}
break;
case 17:
/* Line 1792 of yacc.c */
-#line 113 "slmod_sparql_parser.y"
+#line 130 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (6)].sval), '!', (yyvsp[(4) - (6)].sval));}
break;
case 18:
/* Line 1792 of yacc.c */
-#line 114 "slmod_sparql_parser.y"
+#line 131 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (6)].sval), '<', (yyvsp[(4) - (6)].sval));}
break;
case 19:
/* Line 1792 of yacc.c */
-#line 115 "slmod_sparql_parser.y"
+#line 132 "slmod_sparql_parser.y"
{(yyval.sval) = map_expr((yyvsp[(1) - (6)].sval), '>', (yyvsp[(4) - (6)].sval));}
break;
case 20:
/* Line 1792 of yacc.c */
-#line 119 "slmod_sparql_parser.y"
+#line 136 "slmod_sparql_parser.y"
{(yyval.sval) = map_daterange((yyvsp[(3) - (8)].sval), (yyvsp[(5) - (8)].tval), (yyvsp[(7) - (8)].tval));}
break;
case 21:
/* Line 1792 of yacc.c */
-#line 123 "slmod_sparql_parser.y"
+#line 140 "slmod_sparql_parser.y"
{(yyval.tval) = isodate2unix((yyvsp[(3) - (4)].sval));}
break;
case 22:
/* Line 1792 of yacc.c */
-#line 124 "slmod_sparql_parser.y"
+#line 141 "slmod_sparql_parser.y"
{(yyval.tval) = atoi((yyvsp[(1) - (1)].sval)) + SPRAW_TIME_OFFSET;}
break;
/* Line 1792 of yacc.c */
-#line 1585 "slmod_sparql_parser.c"
+#line 1602 "slmod_sparql_parser.c"
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
/* Line 2055 of yacc.c */
-#line 127 "slmod_sparql_parser.y"
+#line 144 "slmod_sparql_parser.y"
static time_t isodate2unix(const char *s)
bstring q = NULL, search = NULL, replace = NULL;
for (p = spotlight_sparql_map; p->ssm_spotlight_attr; p++) {
- if (strcmp(p->ssm_spotlight_attr, attr) == 0) {
+ if (p->ssm_enabled && (strcmp(p->ssm_spotlight_attr, attr) == 0)) {
if (p->ssm_type != ssmt_type && p->ssm_sparql_attr == NULL) {
yyerror("unsupported Spotlight attribute");
EC_FAIL;
struct vol *vol = talloc_zero(ssp_slq, struct vol);
vol->v_path = "/Volumes/test";
ssp_slq->slq_vol = vol;
+ ssp_slq->slq_allow_expr = true;
sparqlvar = 'a';
s = yy_scan_string(argv[1]);