• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

realm / realm-core / nicola.cabiddu_1040

26 Sep 2023 05:08PM UTC coverage: 91.056% (-1.9%) from 92.915%
nicola.cabiddu_1040

Pull #6766

Evergreen

nicola-cab
several fixes and final client reset algo for collection in mixed
Pull Request #6766: Client Reset for collections in mixed / nested collections

97128 of 178458 branches covered (0.0%)

1524 of 1603 new or added lines in 5 files covered. (95.07%)

4511 existing lines in 109 files now uncovered.

236619 of 259862 relevant lines covered (91.06%)

7169640.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

61.75
/src/realm/parser/generated/query_bison.cpp
1
// A Bison parser, made by GNU Bison 3.8.2.
2

3
// Skeleton implementation for Bison LALR(1) parsers in C++
4

5
// Copyright (C) 2002-2015, 2018-2021 Free Software Foundation, Inc.
6

7
// This program is free software: you can redistribute it and/or modify
8
// it under the terms of the GNU General Public License as published by
9
// the Free Software Foundation, either version 3 of the License, or
10
// (at your option) any later version.
11

12
// This program is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16

17
// You should have received a copy of the GNU General Public License
18
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
19

20
// As a special exception, you may create a larger work that contains
21
// part or all of the Bison parser skeleton and distribute that work
22
// under terms of your choice, so long as that work isn't itself a
23
// parser generator using the skeleton or a modified version thereof
24
// as a parser skeleton.  Alternatively, if you modify or redistribute
25
// the parser skeleton itself, you may (at your option) remove this
26
// special exception, which will cause the skeleton and the resulting
27
// Bison output files to be licensed under the GNU General Public
28
// License without this special exception.
29

30
// This special exception was added by the Free Software Foundation in
31
// version 2.2 of Bison.
32

33
// DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
34
// especially those whose name start with YY_ or yy_.  They are
35
// private implementation details that can be changed or removed.
36

37

38

39

40

41
#include "query_bison.hpp"
42

43

44
// Unqualified %code blocks.
45

46
#include <realm/parser/driver.hpp>
47
#include <realm/table.hpp>
48
using namespace realm;
49
using namespace realm::query_parser;
50

51
#ifdef _MSC_VER
52
// ignore msvc warnings in this file (poped at end)
53
// do this by setting the warning level to 1 (permissive)
54
#pragma warning( push, 1 )
55
#endif
56

57

58

59
#ifndef YY_
60
# if defined YYENABLE_NLS && YYENABLE_NLS
61
#  if ENABLE_NLS
62
#   include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE.
63
#   define YY_(msgid) dgettext ("bison-runtime", msgid)
64
#  endif
65
# endif
66
# ifndef YY_
67
#  define YY_(msgid) msgid
68
# endif
69
#endif
70

71

72
// Whether we are compiled with exception support.
73
#ifndef YY_EXCEPTIONS
74
# if defined __GNUC__ && !defined __EXCEPTIONS
75
#  define YY_EXCEPTIONS 0
76
# else
77
#  define YY_EXCEPTIONS 1
78
# endif
79
#endif
80

81

82

83
// Enable debugging if requested.
84
#if YYDEBUG
85

86
// A pseudo ostream that takes yydebug_ into account.
87
# define YYCDEBUG if (yydebug_) (*yycdebug_)
10,355,052✔
88

89
# define YY_SYMBOL_PRINT(Title, Symbol)         \
90
  do {                                          \
23,420,434✔
91
    if (yydebug_)                               \
12,748,144✔
92
    {                                           \
6,373,184✔
93
      *yycdebug_ << Title << ' ';               \
×
94
      yy_print_ (*yycdebug_, Symbol);           \
×
95
      *yycdebug_ << '\n';                       \
×
96
    }                                           \
×
97
  } while (false)
12,748,144✔
98

99
# define YY_REDUCE_PRINT(Rule)          \
100
  do {                                  \
12,581,088✔
101
    if (yydebug_)                       \
6,290,544✔
102
      yy_reduce_print_ (Rule);          \
3,144,978✔
103
  } while (false)
6,290,544✔
104

105
# define YY_STACK_PRINT()               \
106
  do {                                  \
8,365,920✔
107
    if (yydebug_)                       \
8,365,920✔
108
      yy_stack_print_ ();                \
4,182,646✔
109
  } while (false)
8,365,920✔
110

111
#else // !YYDEBUG
112

113
# define YYCDEBUG if (false) std::cerr
114
# define YY_SYMBOL_PRINT(Title, Symbol)  YY_USE (Symbol)
115
# define YY_REDUCE_PRINT(Rule)           static_cast<void> (0)
116
# define YY_STACK_PRINT()                static_cast<void> (0)
117

118
#endif // !YYDEBUG
119

120
#define yyerrok         (yyerrstatus_ = 0)
121
#define yyclearin       (yyla.clear ())
122

123
#define YYACCEPT        goto yyacceptlab
41,914✔
124
#define YYABORT         goto yyabortlab
716✔
125
#define YYERROR         goto yyerrorlab
×
126
#define YYRECOVERING()  (!!yyerrstatus_)
127

128
namespace yy {
129

130
  /// Build a parser object.
131
  parser::parser (ParserDriver& drv_yyarg, void* scanner_yyarg)
132
#if YYDEBUG
133
    : yydebug_ (false),
134
      yycdebug_ (&std::cerr),
135
#else
136
    :
137
#endif
138
      drv (drv_yyarg),
139
      scanner (scanner_yyarg)
140
  {}
42,644✔
141

142
  parser::~parser ()
143
  {}
42,646✔
144

145
  parser::syntax_error::~syntax_error () YY_NOEXCEPT YY_NOTHROW
146
  {}
116✔
147

148
  /*---------.
149
  | symbol.  |
150
  `---------*/
151

152

153

154
  // by_state.
155
  parser::by_state::by_state () YY_NOEXCEPT
156
    : state (empty_state)
157
  {}
23,067,680✔
158

159
  parser::by_state::by_state (const by_state& that) YY_NOEXCEPT
160
    : state (that.state)
161
  {}
×
162

163
  void
164
  parser::by_state::clear () YY_NOEXCEPT
165
  {
41,646,726✔
166
    state = empty_state;
41,646,726✔
167
  }
41,646,726✔
168

169
  void
170
  parser::by_state::move (by_state& that)
171
  {
8,320,958✔
172
    state = that.state;
8,320,958✔
173
    that.clear ();
8,320,958✔
174
  }
8,320,958✔
175

176
  parser::by_state::by_state (state_type s) YY_NOEXCEPT
177
    : state (s)
178
  {}
10,353,152✔
179

180
  parser::symbol_kind_type
181
  parser::by_state::kind () const YY_NOEXCEPT
182
  {
49,937,420✔
183
    if (state == empty_state)
49,937,420✔
184
      return symbol_kind::SYM_YYEMPTY;
33,468,854✔
185
    else
16,468,566✔
186
      return YY_CAST (symbol_kind_type, yystos_[+state]);
16,468,566✔
187
  }
49,937,420✔
188

189
  parser::stack_symbol_type::stack_symbol_type ()
190
  {}
23,070,032✔
191

192
  parser::stack_symbol_type::stack_symbol_type (YY_RVREF (stack_symbol_type) that)
193
    : super_type (YY_MOVE (that.state))
194
  {
8,322,810✔
195
    switch (that.kind ())
8,322,810✔
196
    {
8,322,810✔
197
      case symbol_kind::SYM_aggregate: // aggregate
✔
198
        value.YY_MOVE_OR_COPY< AggrNode* > (YY_MOVE (that.value));
×
199
        break;
×
200

201
      case symbol_kind::SYM_equality: // equality
✔
202
      case symbol_kind::SYM_relational: // relational
✔
203
      case symbol_kind::SYM_stringop: // stringop
✔
204
        value.YY_MOVE_OR_COPY< CompareType > (YY_MOVE (that.value));
×
205
        break;
×
206

207
      case symbol_kind::SYM_constant: // constant
✔
208
      case symbol_kind::SYM_primary_key: // primary_key
✔
209
        value.YY_MOVE_OR_COPY< ConstantNode* > (YY_MOVE (that.value));
×
210
        break;
×
211

212
      case symbol_kind::SYM_distinct: // distinct
✔
213
      case symbol_kind::SYM_distinct_param: // distinct_param
✔
214
      case symbol_kind::SYM_sort: // sort
✔
215
      case symbol_kind::SYM_sort_param: // sort_param
✔
216
      case symbol_kind::SYM_limit: // limit
✔
217
        value.YY_MOVE_OR_COPY< DescriptorNode* > (YY_MOVE (that.value));
×
218
        break;
×
219

220
      case symbol_kind::SYM_post_query: // post_query
✔
221
        value.YY_MOVE_OR_COPY< DescriptorOrderingNode* > (YY_MOVE (that.value));
×
222
        break;
×
223

224
      case symbol_kind::SYM_expr: // expr
✔
225
        value.YY_MOVE_OR_COPY< ExpressionNode* > (YY_MOVE (that.value));
×
226
        break;
×
227

228
      case symbol_kind::SYM_geoloop_content: // geoloop_content
✔
229
      case symbol_kind::SYM_geoloop: // geoloop
✔
230
      case symbol_kind::SYM_geopoly_content: // geopoly_content
✔
231
      case symbol_kind::SYM_geospatial: // geospatial
✔
232
        value.YY_MOVE_OR_COPY< GeospatialNode* > (YY_MOVE (that.value));
×
233
        break;
×
234

235
      case symbol_kind::SYM_list: // list
✔
236
      case symbol_kind::SYM_list_content: // list_content
✔
237
        value.YY_MOVE_OR_COPY< ListNode* > (YY_MOVE (that.value));
×
238
        break;
×
239

240
      case symbol_kind::SYM_path: // path
✔
241
        value.YY_MOVE_OR_COPY< PathNode* > (YY_MOVE (that.value));
×
242
        break;
×
243

244
      case symbol_kind::SYM_post_op: // post_op
✔
245
        value.YY_MOVE_OR_COPY< PostOpNode* > (YY_MOVE (that.value));
×
246
        break;
×
247

248
      case symbol_kind::SYM_prop: // prop
✔
249
      case symbol_kind::SYM_simple_prop: // simple_prop
✔
250
        value.YY_MOVE_OR_COPY< PropertyNode* > (YY_MOVE (that.value));
×
251
        break;
×
252

253
      case symbol_kind::SYM_query: // query
✔
254
      case symbol_kind::SYM_compare: // compare
✔
255
        value.YY_MOVE_OR_COPY< QueryNode* > (YY_MOVE (that.value));
×
256
        break;
×
257

258
      case symbol_kind::SYM_subquery: // subquery
✔
259
        value.YY_MOVE_OR_COPY< SubqueryNode* > (YY_MOVE (that.value));
×
260
        break;
×
261

262
      case symbol_kind::SYM_boolexpr: // boolexpr
✔
263
        value.YY_MOVE_OR_COPY< TrueOrFalseNode* > (YY_MOVE (that.value));
×
264
        break;
×
265

266
      case symbol_kind::SYM_value: // value
✔
267
        value.YY_MOVE_OR_COPY< ValueNode* > (YY_MOVE (that.value));
×
268
        break;
×
269

270
      case symbol_kind::SYM_direction: // direction
✔
271
        value.YY_MOVE_OR_COPY< bool > (YY_MOVE (that.value));
×
272
        break;
×
273

274
      case symbol_kind::SYM_coordinate: // coordinate
✔
275
        value.YY_MOVE_OR_COPY< double > (YY_MOVE (that.value));
×
276
        break;
×
277

278
      case symbol_kind::SYM_comp_type: // comp_type
✔
279
      case symbol_kind::SYM_aggr_op: // aggr_op
✔
280
        value.YY_MOVE_OR_COPY< int > (YY_MOVE (that.value));
×
281
        break;
×
282

283
      case symbol_kind::SYM_geopoint: // geopoint
✔
284
        value.YY_MOVE_OR_COPY< std::optional<GeoPoint> > (YY_MOVE (that.value));
×
285
        break;
×
286

287
      case symbol_kind::SYM_ID: // "identifier"
✔
288
      case symbol_kind::SYM_STRING: // "string"
✔
289
      case symbol_kind::SYM_BASE64: // "base64"
✔
290
      case symbol_kind::SYM_INFINITY: // "infinity"
✔
291
      case symbol_kind::SYM_NAN: // "NaN"
✔
292
      case symbol_kind::SYM_NATURAL0: // "natural0"
✔
293
      case symbol_kind::SYM_NUMBER: // "number"
✔
294
      case symbol_kind::SYM_FLOAT: // "float"
✔
295
      case symbol_kind::SYM_TIMESTAMP: // "date"
✔
296
      case symbol_kind::SYM_UUID: // "UUID"
✔
297
      case symbol_kind::SYM_OID: // "ObjectId"
✔
298
      case symbol_kind::SYM_LINK: // "link"
✔
299
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
✔
300
      case symbol_kind::SYM_ARG: // "argument"
✔
301
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
✔
302
      case symbol_kind::SYM_ENDSWITH: // "endswith"
✔
303
      case symbol_kind::SYM_CONTAINS: // "contains"
✔
304
      case symbol_kind::SYM_TEXT: // "fulltext"
✔
305
      case symbol_kind::SYM_LIKE: // "like"
✔
306
      case symbol_kind::SYM_BETWEEN: // "between"
✔
307
      case symbol_kind::SYM_IN: // "in"
✔
308
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
✔
309
      case symbol_kind::SYM_OBJ: // "obj"
✔
310
      case symbol_kind::SYM_SORT: // "sort"
✔
311
      case symbol_kind::SYM_DISTINCT: // "distinct"
✔
312
      case symbol_kind::SYM_LIMIT: // "limit"
✔
313
      case symbol_kind::SYM_BINARY: // "binary"
✔
314
      case symbol_kind::SYM_ASCENDING: // "ascending"
✔
315
      case symbol_kind::SYM_DESCENDING: // "descending"
✔
316
      case symbol_kind::SYM_INDEX_FIRST: // "FIRST"
✔
317
      case symbol_kind::SYM_INDEX_LAST: // "LAST"
✔
318
      case symbol_kind::SYM_INDEX_SIZE: // "SIZE"
✔
319
      case symbol_kind::SYM_SIZE: // "@size"
✔
320
      case symbol_kind::SYM_TYPE: // "@type"
✔
321
      case symbol_kind::SYM_KEY_VAL: // "key or value"
✔
322
      case symbol_kind::SYM_BACKLINK: // "@links"
✔
323
      case symbol_kind::SYM_id: // id
✔
324
        value.YY_MOVE_OR_COPY< std::string > (YY_MOVE (that.value));
×
325
        break;
×
326

327
      default:
8,321,984✔
328
        break;
8,321,984✔
329
    }
8,321,700✔
330

4,160,456✔
331
#if 201103L <= YY_CPLUSPLUS
8,321,700✔
332
    // that is emptied.
4,160,456✔
333
    that.state = empty_state;
8,321,700✔
334
#endif
8,321,700✔
335
  }
8,321,700✔
336

337
  parser::stack_symbol_type::stack_symbol_type (state_type s, YY_MOVE_REF (symbol_type) that)
338
    : super_type (s)
339
  {
2,032,456✔
340
    switch (that.kind ())
2,032,456✔
341
    {
2,032,456✔
342
      case symbol_kind::SYM_aggregate: // aggregate
✔
343
        value.move< AggrNode* > (YY_MOVE (that.value));
×
344
        break;
×
345

346
      case symbol_kind::SYM_equality: // equality
✔
347
      case symbol_kind::SYM_relational: // relational
✔
348
      case symbol_kind::SYM_stringop: // stringop
✔
349
        value.move< CompareType > (YY_MOVE (that.value));
×
350
        break;
×
351

352
      case symbol_kind::SYM_constant: // constant
✔
353
      case symbol_kind::SYM_primary_key: // primary_key
✔
354
        value.move< ConstantNode* > (YY_MOVE (that.value));
×
355
        break;
×
356

357
      case symbol_kind::SYM_distinct: // distinct
✔
358
      case symbol_kind::SYM_distinct_param: // distinct_param
✔
359
      case symbol_kind::SYM_sort: // sort
✔
360
      case symbol_kind::SYM_sort_param: // sort_param
✔
361
      case symbol_kind::SYM_limit: // limit
✔
362
        value.move< DescriptorNode* > (YY_MOVE (that.value));
×
363
        break;
×
364

365
      case symbol_kind::SYM_post_query: // post_query
✔
366
        value.move< DescriptorOrderingNode* > (YY_MOVE (that.value));
×
367
        break;
×
368

369
      case symbol_kind::SYM_expr: // expr
✔
370
        value.move< ExpressionNode* > (YY_MOVE (that.value));
×
371
        break;
×
372

373
      case symbol_kind::SYM_geoloop_content: // geoloop_content
✔
374
      case symbol_kind::SYM_geoloop: // geoloop
✔
375
      case symbol_kind::SYM_geopoly_content: // geopoly_content
✔
376
      case symbol_kind::SYM_geospatial: // geospatial
✔
377
        value.move< GeospatialNode* > (YY_MOVE (that.value));
×
378
        break;
×
379

380
      case symbol_kind::SYM_list: // list
✔
381
      case symbol_kind::SYM_list_content: // list_content
✔
382
        value.move< ListNode* > (YY_MOVE (that.value));
×
383
        break;
×
384

385
      case symbol_kind::SYM_path: // path
✔
386
        value.move< PathNode* > (YY_MOVE (that.value));
×
387
        break;
×
388

389
      case symbol_kind::SYM_post_op: // post_op
✔
390
        value.move< PostOpNode* > (YY_MOVE (that.value));
×
391
        break;
×
392

393
      case symbol_kind::SYM_prop: // prop
✔
394
      case symbol_kind::SYM_simple_prop: // simple_prop
✔
395
        value.move< PropertyNode* > (YY_MOVE (that.value));
×
396
        break;
×
397

398
      case symbol_kind::SYM_query: // query
✔
399
      case symbol_kind::SYM_compare: // compare
✔
400
        value.move< QueryNode* > (YY_MOVE (that.value));
×
401
        break;
×
402

403
      case symbol_kind::SYM_subquery: // subquery
✔
404
        value.move< SubqueryNode* > (YY_MOVE (that.value));
×
405
        break;
×
406

407
      case symbol_kind::SYM_boolexpr: // boolexpr
✔
408
        value.move< TrueOrFalseNode* > (YY_MOVE (that.value));
×
409
        break;
×
410

411
      case symbol_kind::SYM_value: // value
✔
412
        value.move< ValueNode* > (YY_MOVE (that.value));
×
413
        break;
×
414

415
      case symbol_kind::SYM_direction: // direction
✔
416
        value.move< bool > (YY_MOVE (that.value));
×
417
        break;
×
418

419
      case symbol_kind::SYM_coordinate: // coordinate
✔
420
        value.move< double > (YY_MOVE (that.value));
×
421
        break;
×
422

423
      case symbol_kind::SYM_comp_type: // comp_type
✔
424
      case symbol_kind::SYM_aggr_op: // aggr_op
✔
425
        value.move< int > (YY_MOVE (that.value));
×
426
        break;
×
427

428
      case symbol_kind::SYM_geopoint: // geopoint
✔
429
        value.move< std::optional<GeoPoint> > (YY_MOVE (that.value));
×
430
        break;
×
431

432
      case symbol_kind::SYM_ID: // "identifier"
736,866✔
433
      case symbol_kind::SYM_STRING: // "string"
740,764✔
434
      case symbol_kind::SYM_BASE64: // "base64"
741,480✔
435
      case symbol_kind::SYM_INFINITY: // "infinity"
741,556✔
436
      case symbol_kind::SYM_NAN: // "NaN"
741,588✔
437
      case symbol_kind::SYM_NATURAL0: // "natural0"
753,784✔
438
      case symbol_kind::SYM_NUMBER: // "number"
753,968✔
439
      case symbol_kind::SYM_FLOAT: // "float"
755,342✔
440
      case symbol_kind::SYM_TIMESTAMP: // "date"
755,672✔
441
      case symbol_kind::SYM_UUID: // "UUID"
756,008✔
442
      case symbol_kind::SYM_OID: // "ObjectId"
756,394✔
443
      case symbol_kind::SYM_LINK: // "link"
756,398✔
444
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
756,422✔
445
      case symbol_kind::SYM_ARG: // "argument"
973,032✔
446
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
973,302✔
447
      case symbol_kind::SYM_ENDSWITH: // "endswith"
973,570✔
448
      case symbol_kind::SYM_CONTAINS: // "contains"
974,020✔
449
      case symbol_kind::SYM_TEXT: // "fulltext"
974,048✔
450
      case symbol_kind::SYM_LIKE: // "like"
974,292✔
451
      case symbol_kind::SYM_BETWEEN: // "between"
974,356✔
452
      case symbol_kind::SYM_IN: // "in"
974,736✔
453
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
974,852✔
454
      case symbol_kind::SYM_OBJ: // "obj"
974,904✔
455
      case symbol_kind::SYM_SORT: // "sort"
975,258✔
456
      case symbol_kind::SYM_DISTINCT: // "distinct"
975,456✔
457
      case symbol_kind::SYM_LIMIT: // "limit"
975,698✔
458
      case symbol_kind::SYM_BINARY: // "binary"
976,630✔
459
      case symbol_kind::SYM_ASCENDING: // "ascending"
976,920✔
460
      case symbol_kind::SYM_DESCENDING: // "descending"
976,994✔
461
      case symbol_kind::SYM_INDEX_FIRST: // "FIRST"
977,282✔
462
      case symbol_kind::SYM_INDEX_LAST: // "LAST"
977,500✔
463
      case symbol_kind::SYM_INDEX_SIZE: // "SIZE"
977,504✔
464
      case symbol_kind::SYM_SIZE: // "@size"
979,524✔
465
      case symbol_kind::SYM_TYPE: // "@type"
979,816✔
466
      case symbol_kind::SYM_KEY_VAL: // "key or value"
979,852✔
467
      case symbol_kind::SYM_BACKLINK: // "@links"
980,246✔
468
      case symbol_kind::SYM_id: // id
980,246✔
469
        value.move< std::string > (YY_MOVE (that.value));
980,246✔
470
        break;
980,246✔
471

490,106✔
472
      default:
1,052,394✔
473
        break;
1,052,394✔
474
    }
2,032,488✔
475

1,016,204✔
476
    // that is emptied.
1,016,204✔
477
    that.kind_ = symbol_kind::SYM_YYEMPTY;
2,032,488✔
478
  }
2,032,488✔
479

480
#if YY_CPLUSPLUS < 201103L
481
  parser::stack_symbol_type&
482
  parser::stack_symbol_type::operator= (const stack_symbol_type& that)
483
  {
484
    state = that.state;
485
    switch (that.kind ())
486
    {
487
      case symbol_kind::SYM_aggregate: // aggregate
488
        value.copy< AggrNode* > (that.value);
489
        break;
490

491
      case symbol_kind::SYM_equality: // equality
492
      case symbol_kind::SYM_relational: // relational
493
      case symbol_kind::SYM_stringop: // stringop
494
        value.copy< CompareType > (that.value);
495
        break;
496

497
      case symbol_kind::SYM_constant: // constant
498
      case symbol_kind::SYM_primary_key: // primary_key
499
        value.copy< ConstantNode* > (that.value);
500
        break;
501

502
      case symbol_kind::SYM_distinct: // distinct
503
      case symbol_kind::SYM_distinct_param: // distinct_param
504
      case symbol_kind::SYM_sort: // sort
505
      case symbol_kind::SYM_sort_param: // sort_param
506
      case symbol_kind::SYM_limit: // limit
507
        value.copy< DescriptorNode* > (that.value);
508
        break;
509

510
      case symbol_kind::SYM_post_query: // post_query
511
        value.copy< DescriptorOrderingNode* > (that.value);
512
        break;
513

514
      case symbol_kind::SYM_expr: // expr
515
        value.copy< ExpressionNode* > (that.value);
516
        break;
517

518
      case symbol_kind::SYM_geoloop_content: // geoloop_content
519
      case symbol_kind::SYM_geoloop: // geoloop
520
      case symbol_kind::SYM_geopoly_content: // geopoly_content
521
      case symbol_kind::SYM_geospatial: // geospatial
522
        value.copy< GeospatialNode* > (that.value);
523
        break;
524

525
      case symbol_kind::SYM_list: // list
526
      case symbol_kind::SYM_list_content: // list_content
527
        value.copy< ListNode* > (that.value);
528
        break;
529

530
      case symbol_kind::SYM_path: // path
531
        value.copy< PathNode* > (that.value);
532
        break;
533

534
      case symbol_kind::SYM_post_op: // post_op
535
        value.copy< PostOpNode* > (that.value);
536
        break;
537

538
      case symbol_kind::SYM_prop: // prop
539
      case symbol_kind::SYM_simple_prop: // simple_prop
540
        value.copy< PropertyNode* > (that.value);
541
        break;
542

543
      case symbol_kind::SYM_query: // query
544
      case symbol_kind::SYM_compare: // compare
545
        value.copy< QueryNode* > (that.value);
546
        break;
547

548
      case symbol_kind::SYM_subquery: // subquery
549
        value.copy< SubqueryNode* > (that.value);
550
        break;
551

552
      case symbol_kind::SYM_boolexpr: // boolexpr
553
        value.copy< TrueOrFalseNode* > (that.value);
554
        break;
555

556
      case symbol_kind::SYM_value: // value
557
        value.copy< ValueNode* > (that.value);
558
        break;
559

560
      case symbol_kind::SYM_direction: // direction
561
        value.copy< bool > (that.value);
562
        break;
563

564
      case symbol_kind::SYM_coordinate: // coordinate
565
        value.copy< double > (that.value);
566
        break;
567

568
      case symbol_kind::SYM_comp_type: // comp_type
569
      case symbol_kind::SYM_aggr_op: // aggr_op
570
        value.copy< int > (that.value);
571
        break;
572

573
      case symbol_kind::SYM_geopoint: // geopoint
574
        value.copy< std::optional<GeoPoint> > (that.value);
575
        break;
576

577
      case symbol_kind::SYM_ID: // "identifier"
578
      case symbol_kind::SYM_STRING: // "string"
579
      case symbol_kind::SYM_BASE64: // "base64"
580
      case symbol_kind::SYM_INFINITY: // "infinity"
581
      case symbol_kind::SYM_NAN: // "NaN"
582
      case symbol_kind::SYM_NATURAL0: // "natural0"
583
      case symbol_kind::SYM_NUMBER: // "number"
584
      case symbol_kind::SYM_FLOAT: // "float"
585
      case symbol_kind::SYM_TIMESTAMP: // "date"
586
      case symbol_kind::SYM_UUID: // "UUID"
587
      case symbol_kind::SYM_OID: // "ObjectId"
588
      case symbol_kind::SYM_LINK: // "link"
589
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
590
      case symbol_kind::SYM_ARG: // "argument"
591
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
592
      case symbol_kind::SYM_ENDSWITH: // "endswith"
593
      case symbol_kind::SYM_CONTAINS: // "contains"
594
      case symbol_kind::SYM_TEXT: // "fulltext"
595
      case symbol_kind::SYM_LIKE: // "like"
596
      case symbol_kind::SYM_BETWEEN: // "between"
597
      case symbol_kind::SYM_IN: // "in"
598
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
599
      case symbol_kind::SYM_OBJ: // "obj"
600
      case symbol_kind::SYM_SORT: // "sort"
601
      case symbol_kind::SYM_DISTINCT: // "distinct"
602
      case symbol_kind::SYM_LIMIT: // "limit"
603
      case symbol_kind::SYM_BINARY: // "binary"
604
      case symbol_kind::SYM_ASCENDING: // "ascending"
605
      case symbol_kind::SYM_DESCENDING: // "descending"
606
      case symbol_kind::SYM_INDEX_FIRST: // "FIRST"
607
      case symbol_kind::SYM_INDEX_LAST: // "LAST"
608
      case symbol_kind::SYM_INDEX_SIZE: // "SIZE"
609
      case symbol_kind::SYM_SIZE: // "@size"
610
      case symbol_kind::SYM_TYPE: // "@type"
611
      case symbol_kind::SYM_KEY_VAL: // "key or value"
612
      case symbol_kind::SYM_BACKLINK: // "@links"
613
      case symbol_kind::SYM_id: // id
614
        value.copy< std::string > (that.value);
615
        break;
616

617
      default:
618
        break;
619
    }
620

621
    return *this;
622
  }
623

624
  parser::stack_symbol_type&
625
  parser::stack_symbol_type::operator= (stack_symbol_type& that)
626
  {
627
    state = that.state;
628
    switch (that.kind ())
629
    {
630
      case symbol_kind::SYM_aggregate: // aggregate
631
        value.move< AggrNode* > (that.value);
632
        break;
633

634
      case symbol_kind::SYM_equality: // equality
635
      case symbol_kind::SYM_relational: // relational
636
      case symbol_kind::SYM_stringop: // stringop
637
        value.move< CompareType > (that.value);
638
        break;
639

640
      case symbol_kind::SYM_constant: // constant
641
      case symbol_kind::SYM_primary_key: // primary_key
642
        value.move< ConstantNode* > (that.value);
643
        break;
644

645
      case symbol_kind::SYM_distinct: // distinct
646
      case symbol_kind::SYM_distinct_param: // distinct_param
647
      case symbol_kind::SYM_sort: // sort
648
      case symbol_kind::SYM_sort_param: // sort_param
649
      case symbol_kind::SYM_limit: // limit
650
        value.move< DescriptorNode* > (that.value);
651
        break;
652

653
      case symbol_kind::SYM_post_query: // post_query
654
        value.move< DescriptorOrderingNode* > (that.value);
655
        break;
656

657
      case symbol_kind::SYM_expr: // expr
658
        value.move< ExpressionNode* > (that.value);
659
        break;
660

661
      case symbol_kind::SYM_geoloop_content: // geoloop_content
662
      case symbol_kind::SYM_geoloop: // geoloop
663
      case symbol_kind::SYM_geopoly_content: // geopoly_content
664
      case symbol_kind::SYM_geospatial: // geospatial
665
        value.move< GeospatialNode* > (that.value);
666
        break;
667

668
      case symbol_kind::SYM_list: // list
669
      case symbol_kind::SYM_list_content: // list_content
670
        value.move< ListNode* > (that.value);
671
        break;
672

673
      case symbol_kind::SYM_path: // path
674
        value.move< PathNode* > (that.value);
675
        break;
676

677
      case symbol_kind::SYM_post_op: // post_op
678
        value.move< PostOpNode* > (that.value);
679
        break;
680

681
      case symbol_kind::SYM_prop: // prop
682
      case symbol_kind::SYM_simple_prop: // simple_prop
683
        value.move< PropertyNode* > (that.value);
684
        break;
685

686
      case symbol_kind::SYM_query: // query
687
      case symbol_kind::SYM_compare: // compare
688
        value.move< QueryNode* > (that.value);
689
        break;
690

691
      case symbol_kind::SYM_subquery: // subquery
692
        value.move< SubqueryNode* > (that.value);
693
        break;
694

695
      case symbol_kind::SYM_boolexpr: // boolexpr
696
        value.move< TrueOrFalseNode* > (that.value);
697
        break;
698

699
      case symbol_kind::SYM_value: // value
700
        value.move< ValueNode* > (that.value);
701
        break;
702

703
      case symbol_kind::SYM_direction: // direction
704
        value.move< bool > (that.value);
705
        break;
706

707
      case symbol_kind::SYM_coordinate: // coordinate
708
        value.move< double > (that.value);
709
        break;
710

711
      case symbol_kind::SYM_comp_type: // comp_type
712
      case symbol_kind::SYM_aggr_op: // aggr_op
713
        value.move< int > (that.value);
714
        break;
715

716
      case symbol_kind::SYM_geopoint: // geopoint
717
        value.move< std::optional<GeoPoint> > (that.value);
718
        break;
719

720
      case symbol_kind::SYM_ID: // "identifier"
721
      case symbol_kind::SYM_STRING: // "string"
722
      case symbol_kind::SYM_BASE64: // "base64"
723
      case symbol_kind::SYM_INFINITY: // "infinity"
724
      case symbol_kind::SYM_NAN: // "NaN"
725
      case symbol_kind::SYM_NATURAL0: // "natural0"
726
      case symbol_kind::SYM_NUMBER: // "number"
727
      case symbol_kind::SYM_FLOAT: // "float"
728
      case symbol_kind::SYM_TIMESTAMP: // "date"
729
      case symbol_kind::SYM_UUID: // "UUID"
730
      case symbol_kind::SYM_OID: // "ObjectId"
731
      case symbol_kind::SYM_LINK: // "link"
732
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
733
      case symbol_kind::SYM_ARG: // "argument"
734
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
735
      case symbol_kind::SYM_ENDSWITH: // "endswith"
736
      case symbol_kind::SYM_CONTAINS: // "contains"
737
      case symbol_kind::SYM_TEXT: // "fulltext"
738
      case symbol_kind::SYM_LIKE: // "like"
739
      case symbol_kind::SYM_BETWEEN: // "between"
740
      case symbol_kind::SYM_IN: // "in"
741
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
742
      case symbol_kind::SYM_OBJ: // "obj"
743
      case symbol_kind::SYM_SORT: // "sort"
744
      case symbol_kind::SYM_DISTINCT: // "distinct"
745
      case symbol_kind::SYM_LIMIT: // "limit"
746
      case symbol_kind::SYM_BINARY: // "binary"
747
      case symbol_kind::SYM_ASCENDING: // "ascending"
748
      case symbol_kind::SYM_DESCENDING: // "descending"
749
      case symbol_kind::SYM_INDEX_FIRST: // "FIRST"
750
      case symbol_kind::SYM_INDEX_LAST: // "LAST"
751
      case symbol_kind::SYM_INDEX_SIZE: // "SIZE"
752
      case symbol_kind::SYM_SIZE: // "@size"
753
      case symbol_kind::SYM_TYPE: // "@type"
754
      case symbol_kind::SYM_KEY_VAL: // "key or value"
755
      case symbol_kind::SYM_BACKLINK: // "@links"
756
      case symbol_kind::SYM_id: // id
757
        value.move< std::string > (that.value);
758
        break;
759

760
      default:
761
        break;
762
    }
763

764
    // that is emptied.
765
    that.state = empty_state;
766
    return *this;
767
  }
768
#endif
769

770
  template <typename Base>
771
  void
772
  parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const
773
  {
86,046✔
774
    if (yymsg)
86,046✔
775
      YY_SYMBOL_PRINT (yymsg, yysym);
86,010✔
776
  }
86,046✔
777

778
#if YYDEBUG
779
  template <typename Base>
780
  void
781
  parser::yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const
782
  {
×
783
    std::ostream& yyoutput = yyo;
×
784
    YY_USE (yyoutput);
×
785
    if (yysym.empty ())
×
786
      yyo << "empty symbol";
×
787
    else
×
788
      {
×
789
        symbol_kind_type yykind = yysym.kind ();
×
790
        yyo << (yykind < YYNTOKENS ? "token" : "nterm")
×
791
            << ' ' << yysym.name () << " (";
×
792
        switch (yykind)
×
793
    {
×
794
      case symbol_kind::SYM_YYEOF: // "end of file"
×
795
                 { yyo << "<>"; }
×
796
        break;
×
797

798
      case symbol_kind::SYM_TRUEPREDICATE: // "truepredicate"
×
799
                 { yyo << "<>"; }
×
800
        break;
×
801

802
      case symbol_kind::SYM_FALSEPREDICATE: // "falsepredicate"
×
803
                 { yyo << "<>"; }
×
804
        break;
×
805

806
      case symbol_kind::SYM_SUBQUERY: // "subquery"
×
807
                 { yyo << "<>"; }
×
808
        break;
×
809

810
      case symbol_kind::SYM_TRUE: // "true"
×
811
                 { yyo << "<>"; }
×
812
        break;
×
813

814
      case symbol_kind::SYM_FALSE: // "false"
×
815
                 { yyo << "<>"; }
×
816
        break;
×
817

818
      case symbol_kind::SYM_NULL_VAL: // "null"
×
819
                 { yyo << "<>"; }
×
820
        break;
×
821

822
      case symbol_kind::SYM_EQUAL: // "=="
×
823
                 { yyo << "<>"; }
×
824
        break;
×
825

826
      case symbol_kind::SYM_NOT_EQUAL: // "!="
×
827
                 { yyo << "<>"; }
×
828
        break;
×
829

830
      case symbol_kind::SYM_LESS: // "<"
×
831
                 { yyo << "<>"; }
×
832
        break;
×
833

834
      case symbol_kind::SYM_GREATER: // ">"
×
835
                 { yyo << "<>"; }
×
836
        break;
×
837

838
      case symbol_kind::SYM_GREATER_EQUAL: // ">="
×
839
                 { yyo << "<>"; }
×
840
        break;
×
841

842
      case symbol_kind::SYM_LESS_EQUAL: // "<="
×
843
                 { yyo << "<>"; }
×
844
        break;
×
845

846
      case symbol_kind::SYM_CASE: // "[c]"
×
847
                 { yyo << "<>"; }
×
848
        break;
×
849

850
      case symbol_kind::SYM_ANY: // "any"
×
851
                 { yyo << "<>"; }
×
852
        break;
×
853

854
      case symbol_kind::SYM_ALL: // "all"
×
855
                 { yyo << "<>"; }
×
856
        break;
×
857

858
      case symbol_kind::SYM_NONE: // "none"
×
859
                 { yyo << "<>"; }
×
860
        break;
×
861

862
      case symbol_kind::SYM_MAX: // "@max"
×
863
                 { yyo << "<>"; }
×
864
        break;
×
865

866
      case symbol_kind::SYM_MIN: // "@min"
×
867
                 { yyo << "<>"; }
×
868
        break;
×
869

870
      case symbol_kind::SYM_SUM: // "@sum"
×
871
                 { yyo << "<>"; }
×
872
        break;
×
873

874
      case symbol_kind::SYM_AVG: // "@average"
×
875
                 { yyo << "<>"; }
×
876
        break;
×
877

878
      case symbol_kind::SYM_AND: // "&&"
×
879
                 { yyo << "<>"; }
×
880
        break;
×
881

882
      case symbol_kind::SYM_OR: // "||"
×
883
                 { yyo << "<>"; }
×
884
        break;
×
885

886
      case symbol_kind::SYM_NOT: // "!"
×
887
                 { yyo << "<>"; }
×
888
        break;
×
889

890
      case symbol_kind::SYM_GEOBOX: // "geobox"
×
891
                 { yyo << "<>"; }
×
892
        break;
×
893

894
      case symbol_kind::SYM_GEOPOLYGON: // "geopolygon"
×
895
                 { yyo << "<>"; }
×
896
        break;
×
897

898
      case symbol_kind::SYM_GEOCIRCLE: // "geocircle"
×
899
                 { yyo << "<>"; }
×
900
        break;
×
901

902
      case symbol_kind::SYM_ID: // "identifier"
×
903
                 { yyo << yysym.value.template as < std::string > (); }
×
904
        break;
×
905

906
      case symbol_kind::SYM_STRING: // "string"
×
907
                 { yyo << yysym.value.template as < std::string > (); }
×
908
        break;
×
909

910
      case symbol_kind::SYM_BASE64: // "base64"
×
911
                 { yyo << yysym.value.template as < std::string > (); }
×
912
        break;
×
913

914
      case symbol_kind::SYM_INFINITY: // "infinity"
×
915
                 { yyo << yysym.value.template as < std::string > (); }
×
916
        break;
×
917

918
      case symbol_kind::SYM_NAN: // "NaN"
×
919
                 { yyo << yysym.value.template as < std::string > (); }
×
920
        break;
×
921

922
      case symbol_kind::SYM_NATURAL0: // "natural0"
×
923
                 { yyo << yysym.value.template as < std::string > (); }
×
924
        break;
×
925

926
      case symbol_kind::SYM_NUMBER: // "number"
×
927
                 { yyo << yysym.value.template as < std::string > (); }
×
928
        break;
×
929

930
      case symbol_kind::SYM_FLOAT: // "float"
×
931
                 { yyo << yysym.value.template as < std::string > (); }
×
932
        break;
×
933

934
      case symbol_kind::SYM_TIMESTAMP: // "date"
×
935
                 { yyo << yysym.value.template as < std::string > (); }
×
936
        break;
×
937

938
      case symbol_kind::SYM_UUID: // "UUID"
×
939
                 { yyo << yysym.value.template as < std::string > (); }
×
940
        break;
×
941

942
      case symbol_kind::SYM_OID: // "ObjectId"
×
943
                 { yyo << yysym.value.template as < std::string > (); }
×
944
        break;
×
945

946
      case symbol_kind::SYM_LINK: // "link"
×
947
                 { yyo << yysym.value.template as < std::string > (); }
×
948
        break;
×
949

950
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
×
951
                 { yyo << yysym.value.template as < std::string > (); }
×
952
        break;
×
953

954
      case symbol_kind::SYM_ARG: // "argument"
×
955
                 { yyo << yysym.value.template as < std::string > (); }
×
956
        break;
×
957

958
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
×
959
                 { yyo << yysym.value.template as < std::string > (); }
×
960
        break;
×
961

962
      case symbol_kind::SYM_ENDSWITH: // "endswith"
×
963
                 { yyo << yysym.value.template as < std::string > (); }
×
964
        break;
×
965

966
      case symbol_kind::SYM_CONTAINS: // "contains"
×
967
                 { yyo << yysym.value.template as < std::string > (); }
×
968
        break;
×
969

970
      case symbol_kind::SYM_TEXT: // "fulltext"
×
971
                 { yyo << yysym.value.template as < std::string > (); }
×
972
        break;
×
973

974
      case symbol_kind::SYM_LIKE: // "like"
×
975
                 { yyo << yysym.value.template as < std::string > (); }
×
976
        break;
×
977

978
      case symbol_kind::SYM_BETWEEN: // "between"
×
979
                 { yyo << yysym.value.template as < std::string > (); }
×
980
        break;
×
981

982
      case symbol_kind::SYM_IN: // "in"
×
983
                 { yyo << yysym.value.template as < std::string > (); }
×
984
        break;
×
985

986
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
×
987
                 { yyo << yysym.value.template as < std::string > (); }
×
988
        break;
×
989

990
      case symbol_kind::SYM_OBJ: // "obj"
×
991
                 { yyo << yysym.value.template as < std::string > (); }
×
992
        break;
×
993

994
      case symbol_kind::SYM_SORT: // "sort"
×
995
                 { yyo << yysym.value.template as < std::string > (); }
×
996
        break;
×
997

998
      case symbol_kind::SYM_DISTINCT: // "distinct"
×
999
                 { yyo << yysym.value.template as < std::string > (); }
×
1000
        break;
×
1001

1002
      case symbol_kind::SYM_LIMIT: // "limit"
×
1003
                 { yyo << yysym.value.template as < std::string > (); }
×
1004
        break;
×
1005

1006
      case symbol_kind::SYM_BINARY: // "binary"
×
1007
                 { yyo << yysym.value.template as < std::string > (); }
×
1008
        break;
×
1009

1010
      case symbol_kind::SYM_ASCENDING: // "ascending"
×
1011
                 { yyo << yysym.value.template as < std::string > (); }
×
1012
        break;
×
1013

1014
      case symbol_kind::SYM_DESCENDING: // "descending"
×
1015
                 { yyo << yysym.value.template as < std::string > (); }
×
1016
        break;
×
1017

1018
      case symbol_kind::SYM_INDEX_FIRST: // "FIRST"
×
1019
                 { yyo << yysym.value.template as < std::string > (); }
×
1020
        break;
×
1021

1022
      case symbol_kind::SYM_INDEX_LAST: // "LAST"
×
1023
                 { yyo << yysym.value.template as < std::string > (); }
×
1024
        break;
×
1025

1026
      case symbol_kind::SYM_INDEX_SIZE: // "SIZE"
×
1027
                 { yyo << yysym.value.template as < std::string > (); }
×
1028
        break;
×
1029

1030
      case symbol_kind::SYM_SIZE: // "@size"
×
1031
                 { yyo << yysym.value.template as < std::string > (); }
×
1032
        break;
×
1033

1034
      case symbol_kind::SYM_TYPE: // "@type"
×
1035
                 { yyo << yysym.value.template as < std::string > (); }
×
1036
        break;
×
1037

1038
      case symbol_kind::SYM_KEY_VAL: // "key or value"
×
1039
                 { yyo << yysym.value.template as < std::string > (); }
×
1040
        break;
×
1041

1042
      case symbol_kind::SYM_BACKLINK: // "@links"
×
1043
                 { yyo << yysym.value.template as < std::string > (); }
×
1044
        break;
×
1045

1046
      case symbol_kind::SYM_65_: // '+'
×
1047
                 { yyo << "<>"; }
×
1048
        break;
×
1049

1050
      case symbol_kind::SYM_66_: // '-'
×
1051
                 { yyo << "<>"; }
×
1052
        break;
×
1053

1054
      case symbol_kind::SYM_67_: // '*'
×
1055
                 { yyo << "<>"; }
×
1056
        break;
×
1057

1058
      case symbol_kind::SYM_68_: // '/'
×
1059
                 { yyo << "<>"; }
×
1060
        break;
×
1061

1062
      case symbol_kind::SYM_69_: // '('
×
1063
                 { yyo << "<>"; }
×
1064
        break;
×
1065

1066
      case symbol_kind::SYM_70_: // ')'
×
1067
                 { yyo << "<>"; }
×
1068
        break;
×
1069

1070
      case symbol_kind::SYM_71_: // '.'
×
1071
                 { yyo << "<>"; }
×
1072
        break;
×
1073

1074
      case symbol_kind::SYM_72_: // ','
×
1075
                 { yyo << "<>"; }
×
1076
        break;
×
1077

1078
      case symbol_kind::SYM_73_: // '['
×
1079
                 { yyo << "<>"; }
×
1080
        break;
×
1081

1082
      case symbol_kind::SYM_74_: // ']'
×
1083
                 { yyo << "<>"; }
×
1084
        break;
×
1085

1086
      case symbol_kind::SYM_75_: // '{'
×
1087
                 { yyo << "<>"; }
×
1088
        break;
×
1089

1090
      case symbol_kind::SYM_76_: // '}'
×
1091
                 { yyo << "<>"; }
×
1092
        break;
×
1093

1094
      case symbol_kind::SYM_final: // final
×
1095
                 { yyo << "<>"; }
×
1096
        break;
×
1097

1098
      case symbol_kind::SYM_query: // query
×
1099
                 { yyo << yysym.value.template as < QueryNode* > (); }
×
1100
        break;
×
1101

1102
      case symbol_kind::SYM_compare: // compare
×
1103
                 { yyo << yysym.value.template as < QueryNode* > (); }
×
1104
        break;
×
1105

1106
      case symbol_kind::SYM_expr: // expr
×
1107
                 { yyo << yysym.value.template as < ExpressionNode* > (); }
×
1108
        break;
×
1109

1110
      case symbol_kind::SYM_value: // value
×
1111
                 { yyo << yysym.value.template as < ValueNode* > (); }
×
1112
        break;
×
1113

1114
      case symbol_kind::SYM_prop: // prop
×
1115
                 { yyo << yysym.value.template as < PropertyNode* > (); }
×
1116
        break;
×
1117

1118
      case symbol_kind::SYM_aggregate: // aggregate
×
1119
                 { yyo << yysym.value.template as < AggrNode* > (); }
×
1120
        break;
×
1121

1122
      case symbol_kind::SYM_simple_prop: // simple_prop
×
1123
                 { yyo << yysym.value.template as < PropertyNode* > (); }
×
1124
        break;
×
1125

1126
      case symbol_kind::SYM_subquery: // subquery
×
1127
                 { yyo << yysym.value.template as < SubqueryNode* > (); }
×
1128
        break;
×
1129

1130
      case symbol_kind::SYM_coordinate: // coordinate
×
1131
                 { yyo << yysym.value.template as < double > (); }
×
1132
        break;
×
1133

1134
      case symbol_kind::SYM_geopoint: // geopoint
×
1135
                 {
×
1136
           if (!yysym.value.template as < std::optional<GeoPoint> > ()) {
×
1137
               yyo << "null";
×
1138
           } else {
×
1139
             yyo << "['" << yysym.value.template as < std::optional<GeoPoint> > ()->longitude << "', '" << yysym.value.template as < std::optional<GeoPoint> > ()->latitude;
×
1140
             if (auto alt = yysym.value.template as < std::optional<GeoPoint> > ()->get_altitude())
×
1141
               yyo << "', '" << *alt; 
×
1142
             yyo << "']"; }}
×
1143
        break;
×
1144

1145
      case symbol_kind::SYM_geoloop_content: // geoloop_content
×
1146
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1147
        break;
×
1148

1149
      case symbol_kind::SYM_geoloop: // geoloop
×
1150
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1151
        break;
×
1152

1153
      case symbol_kind::SYM_geopoly_content: // geopoly_content
×
1154
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1155
        break;
×
1156

1157
      case symbol_kind::SYM_geospatial: // geospatial
×
1158
                 { yyo << yysym.value.template as < GeospatialNode* > (); }
×
1159
        break;
×
1160

1161
      case symbol_kind::SYM_post_query: // post_query
×
1162
                 { yyo << yysym.value.template as < DescriptorOrderingNode* > (); }
×
1163
        break;
×
1164

1165
      case symbol_kind::SYM_distinct: // distinct
×
1166
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1167
        break;
×
1168

1169
      case symbol_kind::SYM_distinct_param: // distinct_param
×
1170
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1171
        break;
×
1172

1173
      case symbol_kind::SYM_sort: // sort
×
1174
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1175
        break;
×
1176

1177
      case symbol_kind::SYM_sort_param: // sort_param
×
1178
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1179
        break;
×
1180

1181
      case symbol_kind::SYM_limit: // limit
×
1182
                 { yyo << yysym.value.template as < DescriptorNode* > (); }
×
1183
        break;
×
1184

1185
      case symbol_kind::SYM_direction: // direction
×
1186
                 { yyo << yysym.value.template as < bool > (); }
×
1187
        break;
×
1188

1189
      case symbol_kind::SYM_list: // list
×
1190
                 { yyo << yysym.value.template as < ListNode* > (); }
×
1191
        break;
×
1192

1193
      case symbol_kind::SYM_list_content: // list_content
×
1194
                 { yyo << yysym.value.template as < ListNode* > (); }
×
1195
        break;
×
1196

1197
      case symbol_kind::SYM_constant: // constant
×
1198
                 { yyo << yysym.value.template as < ConstantNode* > (); }
×
1199
        break;
×
1200

1201
      case symbol_kind::SYM_primary_key: // primary_key
×
1202
                 { yyo << yysym.value.template as < ConstantNode* > (); }
×
1203
        break;
×
1204

1205
      case symbol_kind::SYM_boolexpr: // boolexpr
×
1206
                 { yyo << yysym.value.template as < TrueOrFalseNode* > (); }
×
1207
        break;
×
1208

1209
      case symbol_kind::SYM_comp_type: // comp_type
×
1210
                 { yyo << yysym.value.template as < int > (); }
×
1211
        break;
×
1212

1213
      case symbol_kind::SYM_post_op: // post_op
×
1214
                 { yyo << yysym.value.template as < PostOpNode* > (); }
×
1215
        break;
×
1216

1217
      case symbol_kind::SYM_aggr_op: // aggr_op
×
1218
                 { yyo << yysym.value.template as < int > (); }
×
1219
        break;
×
1220

1221
      case symbol_kind::SYM_equality: // equality
×
1222
                 { yyo << string_for_op(yysym.value.template as < CompareType > ()); }
×
1223
        break;
×
1224

1225
      case symbol_kind::SYM_relational: // relational
×
1226
                 { yyo << string_for_op(yysym.value.template as < CompareType > ()); }
×
1227
        break;
×
1228

1229
      case symbol_kind::SYM_stringop: // stringop
×
1230
                 { yyo << string_for_op(yysym.value.template as < CompareType > ()); }
×
UNCOV
1231
        break;
×
1232

UNCOV
1233
      case symbol_kind::SYM_path: // path
×
UNCOV
1234
                 { yyo << yysym.value.template as < PathNode* > (); }
×
UNCOV
1235
        break;
×
1236

UNCOV
1237
      case symbol_kind::SYM_id: // id
×
UNCOV
1238
                 { yyo << yysym.value.template as < std::string > (); }
×
UNCOV
1239
        break;
×
1240

UNCOV
1241
      default:
×
UNCOV
1242
        break;
×
UNCOV
1243
    }
×
UNCOV
1244
        yyo << ')';
×
UNCOV
1245
      }
×
UNCOV
1246
  }
×
1247
#endif
1248

1249
  void
1250
  parser::yypush_ (const char* m, YY_MOVE_REF (stack_symbol_type) sym)
1251
  {
8,321,580✔
1252
    if (m)
8,321,580✔
1253
      YY_SYMBOL_PRINT (m, sym);
5,154,884✔
1254
    yystack_.push (YY_MOVE (sym));
8,321,580✔
1255
  }
8,321,580✔
1256

1257
  void
1258
  parser::yypush_ (const char* m, state_type s, YY_MOVE_REF (symbol_type) sym)
1259
  {
2,032,492✔
1260
#if 201103L <= YY_CPLUSPLUS
2,032,492✔
1261
    yypush_ (m, stack_symbol_type (s, std::move (sym)));
2,032,492✔
1262
#else
1263
    stack_symbol_type ss (s, sym);
1264
    yypush_ (m, ss);
1265
#endif
1266
  }
2,032,492✔
1267

1268
  void
1269
  parser::yypop_ (int n) YY_NOEXCEPT
1270
  {
6,418,286✔
1271
    yystack_.pop (n);
6,418,286✔
1272
  }
6,418,286✔
1273

1274
#if YYDEBUG
1275
  std::ostream&
1276
  parser::debug_stream () const
UNCOV
1277
  {
×
UNCOV
1278
    return *yycdebug_;
×
UNCOV
1279
  }
×
1280

1281
  void
1282
  parser::set_debug_stream (std::ostream& o)
UNCOV
1283
  {
×
UNCOV
1284
    yycdebug_ = &o;
×
UNCOV
1285
  }
×
1286

1287

1288
  parser::debug_level_type
1289
  parser::debug_level () const
UNCOV
1290
  {
×
UNCOV
1291
    return yydebug_;
×
UNCOV
1292
  }
×
1293

1294
  void
1295
  parser::set_debug_level (debug_level_type l)
1296
  {
42,648✔
1297
    yydebug_ = l;
42,648✔
1298
  }
42,648✔
1299
#endif // YYDEBUG
1300

1301
  parser::state_type
1302
  parser::yy_lr_goto_state_ (state_type yystate, int yysym)
1303
  {
6,290,296✔
1304
    int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
6,290,296✔
1305
    if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
6,290,296✔
1306
      return yytable_[yyr];
1,897,948✔
1307
    else
4,392,348✔
1308
      return yydefgoto_[yysym - YYNTOKENS];
4,392,348✔
1309
  }
6,290,296✔
1310

1311
  bool
1312
  parser::yy_pact_value_is_default_ (int yyvalue) YY_NOEXCEPT
1313
  {
8,281,588✔
1314
    return yyvalue == yypact_ninf_;
8,281,588✔
1315
  }
8,281,588✔
1316

1317
  bool
1318
  parser::yy_table_value_is_error_ (int yyvalue) YY_NOEXCEPT
1319
  {
1,828✔
1320
    return yyvalue == yytable_ninf_;
1,828✔
1321
  }
1,828✔
1322

1323
  int
1324
  parser::operator() ()
1325
  {
42,648✔
1326
    return parse ();
42,648✔
1327
  }
42,648✔
1328

1329
  int
1330
  parser::parse ()
1331
  {
42,648✔
1332
    int yyn;
42,648✔
1333
    /// Length of the RHS of the rule being reduced.
21,324✔
1334
    int yylen = 0;
42,648✔
1335

21,324✔
1336
    // Error handling.
21,324✔
1337
    int yynerrs_ = 0;
42,648✔
1338
    int yyerrstatus_ = 0;
42,648✔
1339

21,324✔
1340
    /// The lookahead symbol.
21,324✔
1341
    symbol_type yyla;
42,648✔
1342

21,324✔
1343
    /// The return value of parse ().
21,324✔
1344
    int yyresult;
42,648✔
1345

21,324✔
1346
#if YY_EXCEPTIONS
42,648✔
1347
    try
42,648✔
1348
#endif // YY_EXCEPTIONS
42,648✔
1349
      {
42,648✔
1350
    YYCDEBUG << "Starting parse\n";
42,648✔
1351

21,324✔
1352

21,324✔
1353
    /* Initialize the stack.  The initial state will be set in
21,324✔
1354
       yynewstate, since the latter expects the semantical and the
21,324✔
1355
       location values to have been already stored, initialize these
21,324✔
1356
       stacks with a primary value.  */
21,324✔
1357
    yystack_.clear ();
42,648✔
1358
    yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
42,648✔
1359

21,324✔
1360
  /*-----------------------------------------------.
21,324✔
1361
  | yynewstate -- push a new symbol on the stack.  |
21,324✔
1362
  `-----------------------------------------------*/
21,324✔
1363
  yynewstate:
8,321,746✔
1364
    YYCDEBUG << "Entering state " << int (yystack_[0].state) << '\n';
8,321,746✔
1365
    YY_STACK_PRINT ();
8,321,746✔
1366

4,160,560✔
1367
    // Accept?
4,160,560✔
1368
    if (yystack_[0].state == yyfinal_)
8,321,746✔
1369
      YYACCEPT;
4,181,518✔
1370

4,160,560✔
1371
    goto yybackup;
8,300,788✔
1372

4,138,946✔
1373

4,138,946✔
1374
  /*-----------.
4,138,946✔
1375
  | yybackup.  |
4,138,946✔
1376
  `-----------*/
4,138,946✔
1377
  yybackup:
8,279,402✔
1378
    // Try to take a decision without lookahead.
4,138,946✔
1379
    yyn = yypact_[+yystack_[0].state];
8,279,402✔
1380
    if (yy_pact_value_is_default_ (yyn))
8,279,402✔
1381
      goto yydefault;
3,897,694✔
1382

2,190,282✔
1383
    // Read a lookahead token.
2,190,282✔
1384
    if (yyla.empty ())
4,381,708✔
1385
      {
1,990,530✔
1386
        YYCDEBUG << "Reading a token\n";
1,990,530✔
1387
#if YY_EXCEPTIONS
1,990,530✔
1388
        try
1,990,530✔
1389
#endif // YY_EXCEPTIONS
1,990,530✔
1390
          {
1,990,530✔
1391
            symbol_type yylookahead (yylex (scanner));
1,990,530✔
1392
            yyla.move (yylookahead);
1,990,530✔
1393
          }
1,990,530✔
1394
#if YY_EXCEPTIONS
1,990,530✔
1395
        catch (const syntax_error& yyexc)
1,990,530✔
1396
          {
995,254✔
1397
            YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
116✔
1398
            error (yyexc);
116✔
1399
            goto yyerrlab1;
116✔
1400
          }
116✔
1401
#endif // YY_EXCEPTIONS
4,381,594✔
1402
      }
4,381,594✔
1403
    YY_SYMBOL_PRINT ("Next token is", yyla);
4,381,594✔
1404

2,190,224✔
1405
    if (yyla.kind () == symbol_kind::SYM_YYerror)
4,381,594✔
UNCOV
1406
    {
×
1407
      // The scanner already issued an error message, process directly
1408
      // to error recovery.  But do not keep the error token as
1409
      // lookahead, it is too special and may lead us to an endless
1410
      // loop in error recovery. */
1411
      yyla.kind_ = symbol_kind::SYM_YYUNDEF;
×
1412
      goto yyerrlab1;
×
1413
    }
×
1414

2,190,224✔
1415
    /* If the proper action on seeing token YYLA.TYPE is to reduce or
2,190,224✔
1416
       to detect an error, take that action.  */
2,190,224✔
1417
    yyn += yyla.kind ();
4,381,594✔
1418
    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.kind ())
4,381,594✔
1419
      {
2,394,018✔
1420
        goto yydefault;
2,394,018✔
1421
      }
2,394,018✔
1422

993,244✔
1423
    // Reduce or error.
993,244✔
1424
    yyn = yytable_[yyn];
1,987,576✔
1425
    if (yyn <= 0)
1,987,576✔
UNCOV
1426
      {
×
UNCOV
1427
        if (yy_table_value_is_error_ (yyn))
×
UNCOV
1428
          goto yyerrlab;
×
UNCOV
1429
        yyn = -yyn;
×
UNCOV
1430
        goto yyreduce;
×
UNCOV
1431
      }
×
1432

993,244✔
1433
    // Count tokens shifted since error; after three, turn off error status.
993,244✔
1434
    if (yyerrstatus_)
1,987,576✔
UNCOV
1435
      --yyerrstatus_;
×
1436

993,244✔
1437
    // Shift the lookahead token.
993,244✔
1438
    yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla));
1,987,576✔
1439
    goto yynewstate;
1,987,576✔
1440

3,145,064✔
1441

3,145,064✔
1442
  /*-----------------------------------------------------------.
3,145,064✔
1443
  | yydefault -- do the default action for the current state.  |
3,145,064✔
1444
  `-----------------------------------------------------------*/
3,145,064✔
1445
  yydefault:
6,290,822✔
1446
    yyn = yydefact_[+yystack_[0].state];
6,290,822✔
1447
    if (yyn == 0)
6,290,822✔
1448
      goto yyerrlab;
600✔
1449
    goto yyreduce;
6,290,222✔
1450

3,144,744✔
1451

3,144,744✔
1452
  /*-----------------------------.
3,144,744✔
1453
  | yyreduce -- do a reduction.  |
3,144,744✔
1454
  `-----------------------------*/
3,144,744✔
1455
  yyreduce:
6,289,990✔
1456
    yylen = yyr2_[yyn];
6,289,990✔
1457
    {
6,289,990✔
1458
      stack_symbol_type yylhs;
6,289,990✔
1459
      yylhs.state = yy_lr_goto_state_ (yystack_[yylen].state, yyr1_[yyn]);
6,289,990✔
1460
      /* Variants are always initialized to an empty instance of the
3,144,744✔
1461
         correct type. The default '$$ = $1' action is NOT applied
3,144,744✔
1462
         when using variants.  */
3,144,744✔
1463
      switch (yyr1_[yyn])
6,289,990✔
1464
    {
6,289,990✔
1465
      case symbol_kind::SYM_aggregate: // aggregate
3,520✔
1466
        yylhs.value.emplace< AggrNode* > ();
3,520✔
1467
        break;
3,520✔
1468

1469
      case symbol_kind::SYM_equality: // equality
468,720✔
1470
      case symbol_kind::SYM_relational: // relational
471,286✔
1471
      case symbol_kind::SYM_stringop: // stringop
472,510✔
1472
        yylhs.value.emplace< CompareType > ();
472,510✔
1473
        break;
472,510✔
1474

236,254✔
1475
      case symbol_kind::SYM_constant: // constant
488,404✔
1476
      case symbol_kind::SYM_primary_key: // primary_key
504,082✔
1477
        yylhs.value.emplace< ConstantNode* > ();
504,082✔
1478
        break;
504,082✔
1479

252,040✔
1480
      case symbol_kind::SYM_distinct: // distinct
252,214✔
1481
      case symbol_kind::SYM_distinct_param: // distinct_param
1,626✔
1482
      case symbol_kind::SYM_sort: // sort
1,944✔
1483
      case symbol_kind::SYM_sort_param: // sort_param
2,302✔
1484
      case symbol_kind::SYM_limit: // limit
2,504✔
1485
        yylhs.value.emplace< DescriptorNode* > ();
2,504✔
1486
        break;
2,504✔
1487

1,252✔
1488
      case symbol_kind::SYM_post_query: // post_query
43,574✔
1489
        yylhs.value.emplace< DescriptorOrderingNode* > ();
43,574✔
1490
        break;
43,574✔
1491

1,252✔
1492
      case symbol_kind::SYM_expr: // expr
942,492✔
1493
        yylhs.value.emplace< ExpressionNode* > ();
942,492✔
1494
        break;
942,492✔
1495

1,252✔
1496
      case symbol_kind::SYM_geoloop_content: // geoloop_content
1,422✔
1497
      case symbol_kind::SYM_geoloop: // geoloop
512✔
1498
      case symbol_kind::SYM_geopoly_content: // geopoly_content
546✔
1499
      case symbol_kind::SYM_geospatial: // geospatial
616✔
1500
        yylhs.value.emplace< GeospatialNode* > ();
616✔
1501
        break;
616✔
1502

308✔
1503
      case symbol_kind::SYM_list: // list
3,244✔
1504
      case symbol_kind::SYM_list_content: // list_content
5,096✔
1505
        yylhs.value.emplace< ListNode* > ();
5,096✔
1506
        break;
5,096✔
1507

2,548✔
1508
      case symbol_kind::SYM_path: // path
495,594✔
1509
        yylhs.value.emplace< PathNode* > ();
495,594✔
1510
        break;
495,594✔
1511

2,548✔
1512
      case symbol_kind::SYM_post_op: // post_op
472,188✔
1513
        yylhs.value.emplace< PostOpNode* > ();
472,188✔
1514
        break;
472,188✔
1515

2,548✔
1516
      case symbol_kind::SYM_prop: // prop
472,374✔
1517
      case symbol_kind::SYM_simple_prop: // simple_prop
472,554✔
1518
        yylhs.value.emplace< PropertyNode* > ();
472,554✔
1519
        break;
472,554✔
1520

236,276✔
1521
      case symbol_kind::SYM_query: // query
1,142,740✔
1522
      case symbol_kind::SYM_compare: // compare
1,379,090✔
1523
        yylhs.value.emplace< QueryNode* > ();
1,379,090✔
1524
        break;
1,379,090✔
1525

689,534✔
1526
      case symbol_kind::SYM_subquery: // subquery
689,696✔
1527
        yylhs.value.emplace< SubqueryNode* > ();
324✔
1528
        break;
324✔
1529

689,534✔
1530
      case symbol_kind::SYM_boolexpr: // boolexpr
689,882✔
1531
        yylhs.value.emplace< TrueOrFalseNode* > ();
696✔
1532
        break;
696✔
1533

689,534✔
1534
      case symbol_kind::SYM_value: // value
1,162,662✔
1535
        yylhs.value.emplace< ValueNode* > ();
946,260✔
1536
        break;
946,260✔
1537

689,534✔
1538
      case symbol_kind::SYM_direction: // direction
689,892✔
1539
        yylhs.value.emplace< bool > ();
716✔
1540
        break;
716✔
1541

689,534✔
1542
      case symbol_kind::SYM_coordinate: // coordinate
690,010✔
1543
        yylhs.value.emplace< double > ();
952✔
1544
        break;
952✔
1545

689,534✔
1546
      case symbol_kind::SYM_comp_type: // comp_type
693,890✔
1547
      case symbol_kind::SYM_aggr_op: // aggr_op
12,232✔
1548
        yylhs.value.emplace< int > ();
12,232✔
1549
        break;
12,232✔
1550

6,116✔
1551
      case symbol_kind::SYM_geopoint: // geopoint
6,336✔
1552
        yylhs.value.emplace< std::optional<GeoPoint> > ();
440✔
1553
        break;
440✔
1554

6,116✔
1555
      case symbol_kind::SYM_ID: // "identifier"
247,370✔
1556
      case symbol_kind::SYM_STRING: // "string"
247,370✔
1557
      case symbol_kind::SYM_BASE64: // "base64"
247,370✔
1558
      case symbol_kind::SYM_INFINITY: // "infinity"
247,370✔
1559
      case symbol_kind::SYM_NAN: // "NaN"
247,370✔
1560
      case symbol_kind::SYM_NATURAL0: // "natural0"
247,370✔
1561
      case symbol_kind::SYM_NUMBER: // "number"
247,370✔
1562
      case symbol_kind::SYM_FLOAT: // "float"
247,370✔
1563
      case symbol_kind::SYM_TIMESTAMP: // "date"
247,370✔
1564
      case symbol_kind::SYM_UUID: // "UUID"
247,370✔
1565
      case symbol_kind::SYM_OID: // "ObjectId"
247,370✔
1566
      case symbol_kind::SYM_LINK: // "link"
247,370✔
1567
      case symbol_kind::SYM_TYPED_LINK: // "typed link"
247,370✔
1568
      case symbol_kind::SYM_ARG: // "argument"
247,370✔
1569
      case symbol_kind::SYM_BEGINSWITH: // "beginswith"
247,370✔
1570
      case symbol_kind::SYM_ENDSWITH: // "endswith"
247,370✔
1571
      case symbol_kind::SYM_CONTAINS: // "contains"
247,370✔
1572
      case symbol_kind::SYM_TEXT: // "fulltext"
247,370✔
1573
      case symbol_kind::SYM_LIKE: // "like"
247,370✔
1574
      case symbol_kind::SYM_BETWEEN: // "between"
247,370✔
1575
      case symbol_kind::SYM_IN: // "in"
247,370✔
1576
      case symbol_kind::SYM_GEOWITHIN: // "geowithin"
247,370✔
1577
      case symbol_kind::SYM_OBJ: // "obj"
247,370✔
1578
      case symbol_kind::SYM_SORT: // "sort"
247,370✔
1579
      case symbol_kind::SYM_DISTINCT: // "distinct"
247,370✔
1580
      case symbol_kind::SYM_LIMIT: // "limit"
247,370✔
1581
      case symbol_kind::SYM_BINARY: // "binary"
247,370✔
1582
      case symbol_kind::SYM_ASCENDING: // "ascending"
247,370✔
1583
      case symbol_kind::SYM_DESCENDING: // "descending"
247,370✔
1584
      case symbol_kind::SYM_INDEX_FIRST: // "FIRST"
247,370✔
1585
      case symbol_kind::SYM_INDEX_LAST: // "LAST"
247,370✔
1586
      case symbol_kind::SYM_INDEX_SIZE: // "SIZE"
247,370✔
1587
      case symbol_kind::SYM_SIZE: // "@size"
247,370✔
1588
      case symbol_kind::SYM_TYPE: // "@type"
247,370✔
1589
      case symbol_kind::SYM_KEY_VAL: // "key or value"
247,370✔
1590
      case symbol_kind::SYM_BACKLINK: // "@links"
247,370✔
1591
      case symbol_kind::SYM_id: // id
494,748✔
1592
        yylhs.value.emplace< std::string > ();
494,748✔
1593
        break;
494,748✔
1594

247,370✔
1595
      default:
268,412✔
1596
        break;
42,084✔
1597
    }
6,290,544✔
1598

3,144,978✔
1599

3,144,978✔
1600

3,144,978✔
1601
      // Perform the reduction.
3,144,978✔
1602
      YY_REDUCE_PRINT (yyn);
6,290,544✔
1603
#if YY_EXCEPTIONS
6,290,544✔
1604
      try
6,290,544✔
1605
#endif // YY_EXCEPTIONS
6,290,544✔
1606
        {
6,290,544✔
1607
          switch (yyn)
6,290,544✔
1608
            {
6,290,544✔
1609
  case 2: // final: query post_query
42,084✔
1610
                       { drv.result = yystack_[1].value.as < QueryNode* > (); drv.ordering = yystack_[0].value.as < DescriptorOrderingNode* > (); }
42,084✔
1611
    break;
42,084✔
1612

1613
  case 3: // query: compare
472,690✔
1614
                                { yylhs.value.as < QueryNode* > () = yystack_[0].value.as < QueryNode* > (); }
472,690✔
1615
    break;
472,690✔
1616

1617
  case 4: // query: query "||" query
429,920✔
1618
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<OrNode>(yystack_[2].value.as < QueryNode* > (), yystack_[0].value.as < QueryNode* > ()); }
429,920✔
1619
    break;
429,920✔
1620

1621
  case 5: // query: query "&&" query
920✔
1622
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<AndNode>(yystack_[2].value.as < QueryNode* > (), yystack_[0].value.as < QueryNode* > ()); }
920✔
1623
    break;
920✔
1624

1625
  case 6: // query: "!" query
952✔
1626
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<NotNode>(yystack_[0].value.as < QueryNode* > ()); }
952✔
1627
    break;
952✔
1628

1629
  case 7: // query: '(' query ')'
1,232✔
1630
                                { yylhs.value.as < QueryNode* > () = yystack_[1].value.as < QueryNode* > (); }
1,232✔
1631
    break;
1,232✔
1632

1633
  case 8: // query: boolexpr
696✔
1634
                                { yylhs.value.as < QueryNode* > () =yystack_[0].value.as < TrueOrFalseNode* > (); }
696✔
1635
    break;
696✔
1636

1637
  case 9: // compare: expr equality expr
464,470✔
1638
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<EqualityNode>(yystack_[2].value.as < ExpressionNode* > (), yystack_[1].value.as < CompareType > (), yystack_[0].value.as < ExpressionNode* > ()); }
464,470✔
1639
    break;
464,470✔
1640

1641
  case 10: // compare: expr equality "[c]" expr
324✔
1642
                                {
324✔
1643
                                    auto tmp = drv.m_parse_nodes.create<EqualityNode>(yystack_[3].value.as < ExpressionNode* > (), yystack_[2].value.as < CompareType > (), yystack_[0].value.as < ExpressionNode* > ());
324✔
1644
                                    tmp->case_sensitive = false;
324✔
1645
                                    yylhs.value.as < QueryNode* > () = tmp;
324✔
1646
                                }
324✔
1647
    break;
324✔
1648

1649
  case 11: // compare: expr relational expr
5,132✔
1650
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<RelationalNode>(yystack_[2].value.as < ExpressionNode* > (), yystack_[1].value.as < CompareType > (), yystack_[0].value.as < ExpressionNode* > ()); }
5,132✔
1651
    break;
5,132✔
1652

1653
  case 12: // compare: value stringop value
1,356✔
1654
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<StringOpsNode>(yystack_[2].value.as < ValueNode* > (), yystack_[1].value.as < CompareType > (), yystack_[0].value.as < ValueNode* > ()); }
1,356✔
1655
    break;
1,356✔
1656

1657
  case 13: // compare: value "fulltext" value
28✔
1658
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<StringOpsNode>(yystack_[2].value.as < ValueNode* > (), CompareType::TEXT, yystack_[0].value.as < ValueNode* > ()); }
28✔
1659
    break;
28✔
1660

1661
  case 14: // compare: value stringop "[c]" value
1,092✔
1662
                                {
1,092✔
1663
                                    auto tmp = drv.m_parse_nodes.create<StringOpsNode>(yystack_[3].value.as < ValueNode* > (), yystack_[2].value.as < CompareType > (), yystack_[0].value.as < ValueNode* > ());
1,092✔
1664
                                    tmp->case_sensitive = false;
1,092✔
1665
                                    yylhs.value.as < QueryNode* > () = tmp;
1,092✔
1666
                                }
1,092✔
1667
    break;
1,092✔
1668

1669
  case 15: // compare: value "between" list
100✔
1670
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<BetweenNode>(yystack_[2].value.as < ValueNode* > (), yystack_[0].value.as < ListNode* > ()); }
100✔
1671
    break;
100✔
1672

1673
  case 16: // compare: prop "geowithin" geospatial
140✔
1674
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<GeoWithinNode>(yystack_[2].value.as < PropertyNode* > (), yystack_[0].value.as < GeospatialNode* > ()); }
140✔
1675
    break;
140✔
1676

1677
  case 17: // compare: prop "geowithin" "argument"
48✔
1678
                                { yylhs.value.as < QueryNode* > () = drv.m_parse_nodes.create<GeoWithinNode>(yystack_[2].value.as < PropertyNode* > (), yystack_[0].value.as < std::string > ()); }
48✔
1679
    break;
48✔
1680

1681
  case 18: // expr: value
941,198✔
1682
                                { yylhs.value.as < ExpressionNode* > () = yystack_[0].value.as < ValueNode* > (); }
941,198✔
1683
    break;
941,198✔
1684

1685
  case 19: // expr: '(' expr ')'
236✔
1686
                                { yylhs.value.as < ExpressionNode* > () = yystack_[1].value.as < ExpressionNode* > (); }
236✔
1687
    break;
236✔
1688

1689
  case 20: // expr: expr '*' expr
280✔
1690
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '*', yystack_[0].value.as < ExpressionNode* > ()); }
280✔
1691
    break;
280✔
1692

1693
  case 21: // expr: expr '/' expr
196✔
1694
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '/', yystack_[0].value.as < ExpressionNode* > ()); }
196✔
1695
    break;
196✔
1696

1697
  case 22: // expr: expr '+' expr
444✔
1698
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '+', yystack_[0].value.as < ExpressionNode* > ()); }
444✔
1699
    break;
444✔
1700

1701
  case 23: // expr: expr '-' expr
136✔
1702
                                { yylhs.value.as < ExpressionNode* > () = drv.m_parse_nodes.create<OperationNode>(yystack_[2].value.as < ExpressionNode* > (), '-', yystack_[0].value.as < ExpressionNode* > ()); }
136✔
1703
    break;
136✔
1704

1705
  case 24: // value: constant
469,178✔
1706
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < ConstantNode* > ();}
469,178✔
1707
    break;
469,178✔
1708

1709
  case 25: // value: prop
471,956✔
1710
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < PropertyNode* > ();}
471,956✔
1711
    break;
471,956✔
1712

1713
  case 26: // value: list
1,292✔
1714
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < ListNode* > ();}
1,292✔
1715
    break;
1,292✔
1716

1717
  case 27: // value: aggregate
3,520✔
1718
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < AggrNode* > ();}
3,520✔
1719
    break;
3,520✔
1720

1721
  case 28: // value: subquery
324✔
1722
                                { yylhs.value.as < ValueNode* > () = yystack_[0].value.as < SubqueryNode* > ();}
324✔
1723
    break;
324✔
1724

1725
  case 29: // prop: path post_op
463,982✔
1726
                                { yylhs.value.as < PropertyNode* > () = drv.m_parse_nodes.create<PropertyNode>(yystack_[1].value.as < PathNode* > ()); yylhs.value.as < PropertyNode* > ()->add_postop(yystack_[0].value.as < PostOpNode* > ()); }
463,982✔
1727
    break;
463,982✔
1728

1729
  case 30: // prop: comp_type path post_op
8,212✔
1730
                                { yylhs.value.as < PropertyNode* > () = drv.m_parse_nodes.create<PropertyNode>(yystack_[1].value.as < PathNode* > (), ExpressionComparisonType(yystack_[2].value.as < int > ())); yylhs.value.as < PropertyNode* > ()->add_postop(yystack_[0].value.as < PostOpNode* > ()); }
8,212✔
1731
    break;
8,212✔
1732

1733
  case 31: // aggregate: path aggr_op '.' id
792✔
1734
                                {
792✔
1735
                                    auto prop = drv.m_parse_nodes.create<PropertyNode>(yystack_[3].value.as < PathNode* > ());
792✔
1736
                                    yylhs.value.as < AggrNode* > () = drv.m_parse_nodes.create<LinkAggrNode>(prop, yystack_[2].value.as < int > (), yystack_[0].value.as < std::string > ());
792✔
1737
                                }
792✔
1738
    break;
792✔
1739

1740
  case 32: // aggregate: path aggr_op
2,728✔
1741
                                {
2,728✔
1742
                                    auto prop = drv.m_parse_nodes.create<PropertyNode>(yystack_[1].value.as < PathNode* > ());
2,728✔
1743
                                    yylhs.value.as < AggrNode* > () = drv.m_parse_nodes.create<ListAggrNode>(prop, yystack_[0].value.as < int > ());
2,728✔
1744
                                }
2,728✔
1745
    break;
2,728✔
1746

1747
  case 33: // simple_prop: path
360✔
1748
                                { yylhs.value.as < PropertyNode* > () = drv.m_parse_nodes.create<PropertyNode>(yystack_[0].value.as < PathNode* > ()); }
360✔
1749
    break;
360✔
1750

1751
  case 34: // subquery: "subquery" '(' simple_prop ',' id ',' query ')' '.' "@size"
324✔
1752
                                                               { yylhs.value.as < SubqueryNode* > () = drv.m_parse_nodes.create<SubqueryNode>(yystack_[7].value.as < PropertyNode* > (), yystack_[5].value.as < std::string > (), yystack_[3].value.as < QueryNode* > ()); }
324✔
1753
    break;
324✔
1754

1755
  case 35: // coordinate: "float"
568✔
1756
                    { yylhs.value.as < double > () = strtod(yystack_[0].value.as < std::string > ().c_str(), nullptr); }
568✔
1757
    break;
568✔
1758

1759
  case 36: // coordinate: "natural0"
304✔
1760
                    { yylhs.value.as < double > () = double(strtoll(yystack_[0].value.as < std::string > ().c_str(), nullptr, 0)); }
304✔
1761
    break;
304✔
1762

1763
  case 37: // coordinate: "argument"
80✔
1764
                    { yylhs.value.as < double > () = drv.get_arg_for_coordinate(yystack_[0].value.as < std::string > ()); }
80✔
1765
    break;
80✔
1766

1767
  case 38: // geopoint: '[' coordinate ',' coordinate ']'
412✔
1768
                                        { yylhs.value.as < std::optional<GeoPoint> > () = GeoPoint{yystack_[3].value.as < double > (), yystack_[1].value.as < double > ()}; }
412✔
1769
    break;
412✔
1770

1771
  case 39: // geopoint: '[' coordinate ',' coordinate ',' "float" ']'
28✔
1772
                                                  { yylhs.value.as < std::optional<GeoPoint> > () = GeoPoint{yystack_[5].value.as < double > (), yystack_[3].value.as < double > (), strtod(yystack_[1].value.as < std::string > ().c_str(), nullptr)}; }
28✔
1773
    break;
28✔
1774

1775
  case 40: // geoloop_content: geopoint
68✔
1776
               { yylhs.value.as < GeospatialNode* > () = drv.m_parse_nodes.create<GeospatialNode>(GeospatialNode::Loop{}, *yystack_[0].value.as < std::optional<GeoPoint> > ()); }
68✔
1777
    break;
68✔
1778

1779
  case 41: // geoloop_content: geoloop_content ',' geopoint
272✔
1780
                                   { yystack_[2].value.as < GeospatialNode* > ()->add_point_to_loop(*yystack_[0].value.as < std::optional<GeoPoint> > ()); yylhs.value.as < GeospatialNode* > () = yystack_[2].value.as < GeospatialNode* > (); }
272✔
1781
    break;
272✔
1782

1783
  case 42: // geoloop: '{' geoloop_content '}'
68✔
1784
                                  { yylhs.value.as < GeospatialNode* > () = yystack_[1].value.as < GeospatialNode* > (); }
68✔
1785
    break;
68✔
1786

1787
  case 43: // geopoly_content: geoloop
60✔
1788
              { yylhs.value.as < GeospatialNode* > () = yystack_[0].value.as < GeospatialNode* > (); }
60✔
1789
    break;
60✔
1790

1791
  case 44: // geopoly_content: geopoly_content ',' geoloop
8✔
1792
                                  { yystack_[2].value.as < GeospatialNode* > ()->add_loop_to_polygon(yystack_[0].value.as < GeospatialNode* > ()); yylhs.value.as < GeospatialNode* > () = yystack_[2].value.as < GeospatialNode* > (); }
8✔
1793
    break;
8✔
1794

1795
  case 45: // geospatial: "geobox" '(' geopoint ',' geopoint ')'
20✔
1796
                                            { yylhs.value.as < GeospatialNode* > () = drv.m_parse_nodes.create<GeospatialNode>(GeospatialNode::Box{}, *yystack_[3].value.as < std::optional<GeoPoint> > (), *yystack_[1].value.as < std::optional<GeoPoint> > ()); }
20✔
1797
    break;
20✔
1798

1799
  case 46: // geospatial: "geocircle" '(' geopoint ',' coordinate ')'
60✔
1800
                                                { yylhs.value.as < GeospatialNode* > () = drv.m_parse_nodes.create<GeospatialNode>(GeospatialNode::Circle{}, *yystack_[3].value.as < std::optional<GeoPoint> > (), yystack_[1].value.as < double > ()); }
60✔
1801
    break;
60✔
1802

1803
  case 47: // geospatial: "geopolygon" '(' geopoly_content ')'
60✔
1804
                                            { yylhs.value.as < GeospatialNode* > () = yystack_[1].value.as < GeospatialNode* > (); }
60✔
1805
    break;
60✔
1806

1807
  case 48: // post_query: %empty
42,182✔
1808
                                { yylhs.value.as < DescriptorOrderingNode* > () = drv.m_parse_nodes.create<DescriptorOrderingNode>();}
42,182✔
1809
    break;
42,182✔
1810

1811
  case 49: // post_query: post_query sort
636✔
1812
                                { yystack_[1].value.as < DescriptorOrderingNode* > ()->add_descriptor(yystack_[0].value.as < DescriptorNode* > ()); yylhs.value.as < DescriptorOrderingNode* > () = yystack_[1].value.as < DescriptorOrderingNode* > (); }
636✔
1813
    break;
636✔
1814

1815
  case 50: // post_query: post_query distinct
348✔
1816
                                { yystack_[1].value.as < DescriptorOrderingNode* > ()->add_descriptor(yystack_[0].value.as < DescriptorNode* > ()); yylhs.value.as < DescriptorOrderingNode* > () = yystack_[1].value.as < DescriptorOrderingNode* > (); }
348✔
1817
    break;
348✔
1818

1819
  case 51: // post_query: post_query limit
404✔
1820
                                { yystack_[1].value.as < DescriptorOrderingNode* > ()->add_descriptor(yystack_[0].value.as < DescriptorNode* > ()); yylhs.value.as < DescriptorOrderingNode* > () = yystack_[1].value.as < DescriptorOrderingNode* > (); }
404✔
1821
    break;
404✔
1822

1823
  case 52: // distinct: "distinct" '(' distinct_param ')'
348✔
1824
                                          { yylhs.value.as < DescriptorNode* > () = yystack_[1].value.as < DescriptorNode* > (); }
348✔
1825
    break;
348✔
1826

1827
  case 53: // distinct_param: path
356✔
1828
                                { yylhs.value.as < DescriptorNode* > () = drv.m_parse_nodes.create<DescriptorNode>(DescriptorNode::DISTINCT); yylhs.value.as < DescriptorNode* > ()->add(yystack_[0].value.as < PathNode* > ());}
356✔
1829
    break;
356✔
1830

1831
  case 54: // distinct_param: distinct_param ',' path
44✔
1832
                                { yystack_[2].value.as < DescriptorNode* > ()->add(yystack_[0].value.as < PathNode* > ()); yylhs.value.as < DescriptorNode* > () = yystack_[2].value.as < DescriptorNode* > (); }
44✔
1833
    break;
44✔
1834

1835
  case 55: // sort: "sort" '(' sort_param ')'
636✔
1836
                                { yylhs.value.as < DescriptorNode* > () = yystack_[1].value.as < DescriptorNode* > (); }
636✔
1837
    break;
636✔
1838

1839
  case 56: // sort_param: path direction
644✔
1840
                                { yylhs.value.as < DescriptorNode* > () = drv.m_parse_nodes.create<DescriptorNode>(DescriptorNode::SORT); yylhs.value.as < DescriptorNode* > ()->add(yystack_[1].value.as < PathNode* > (), yystack_[0].value.as < bool > ());}
644✔
1841
    break;
644✔
1842

1843
  case 57: // sort_param: sort_param ',' path direction
72✔
1844
                                     { yystack_[3].value.as < DescriptorNode* > ()->add(yystack_[1].value.as < PathNode* > (), yystack_[0].value.as < bool > ()); yylhs.value.as < DescriptorNode* > () = yystack_[3].value.as < DescriptorNode* > (); }
72✔
1845
    break;
72✔
1846

1847
  case 58: // limit: "limit" '(' "natural0" ')'
404✔
1848
                                { yylhs.value.as < DescriptorNode* > () = drv.m_parse_nodes.create<DescriptorNode>(DescriptorNode::LIMIT, yystack_[1].value.as < std::string > ()); }
404✔
1849
    break;
404✔
1850

1851
  case 59: // direction: "ascending"
580✔
1852
                                { yylhs.value.as < bool > () = true; }
580✔
1853
    break;
580✔
1854

1855
  case 60: // direction: "descending"
136✔
1856
                                { yylhs.value.as < bool > () = false; }
136✔
1857
    break;
136✔
1858

1859
  case 61: // list: '{' list_content '}'
972✔
1860
                                        { yylhs.value.as < ListNode* > () = yystack_[1].value.as < ListNode* > (); }
972✔
1861
    break;
972✔
1862

1863
  case 62: // list: comp_type '{' list_content '}'
420✔
1864
                                        { yystack_[1].value.as < ListNode* > ()->set_comp_type(ExpressionComparisonType(yystack_[3].value.as < int > ())); yylhs.value.as < ListNode* > () = yystack_[1].value.as < ListNode* > (); }
420✔
1865
    break;
420✔
1866

1867
  case 63: // list_content: constant
1,260✔
1868
                                { yylhs.value.as < ListNode* > () = drv.m_parse_nodes.create<ListNode>(yystack_[0].value.as < ConstantNode* > ()); }
1,260✔
1869
    break;
1,260✔
1870

1871
  case 64: // list_content: %empty
144✔
1872
                                { yylhs.value.as < ListNode* > () = drv.m_parse_nodes.create<ListNode>(); }
144✔
1873
    break;
144✔
1874

1875
  case 65: // list_content: list_content ',' constant
2,300✔
1876
                                { yystack_[2].value.as < ListNode* > ()->add_element(yystack_[0].value.as < ConstantNode* > ()); yylhs.value.as < ListNode* > () = yystack_[2].value.as < ListNode* > (); }
2,300✔
1877
    break;
2,300✔
1878

1879
  case 66: // constant: primary_key
31,246✔
1880
                                { yylhs.value.as < ConstantNode* > () = yystack_[0].value.as < ConstantNode* > (); }
31,246✔
1881
    break;
31,246✔
1882

1883
  case 67: // constant: "infinity"
152✔
1884
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::INFINITY_VAL, yystack_[0].value.as < std::string > ()); }
152✔
1885
    break;
152✔
1886

1887
  case 68: // constant: "NaN"
64✔
1888
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NAN_VAL, yystack_[0].value.as < std::string > ()); }
64✔
1889
    break;
64✔
1890

1891
  case 69: // constant: "base64"
716✔
1892
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::STRING_BASE64, yystack_[0].value.as < std::string > ()); }
716✔
1893
    break;
716✔
1894

1895
  case 70: // constant: "float"
2,152✔
1896
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::FLOAT, yystack_[0].value.as < std::string > ()); }
2,152✔
1897
    break;
2,152✔
1898

1899
  case 71: // constant: "date"
660✔
1900
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::TIMESTAMP, yystack_[0].value.as < std::string > ()); }
660✔
1901
    break;
660✔
1902

1903
  case 72: // constant: "link"
8✔
1904
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::LINK, yystack_[0].value.as < std::string > ()); }
8✔
1905
    break;
8✔
1906

1907
  case 73: // constant: "typed link"
48✔
1908
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::TYPED_LINK, yystack_[0].value.as < std::string > ()); }
48✔
1909
    break;
48✔
1910

1911
  case 74: // constant: "true"
172✔
1912
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::TRUE, ""); }
172✔
1913
    break;
172✔
1914

1915
  case 75: // constant: "false"
320✔
1916
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::FALSE, ""); }
320✔
1917
    break;
320✔
1918

1919
  case 76: // constant: "null"
2,228✔
1920
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NULL_VAL, ""); }
2,228✔
1921
    break;
2,228✔
1922

1923
  case 77: // constant: "argument"
433,056✔
1924
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::ARG, yystack_[0].value.as < std::string > ()); }
433,056✔
1925
    break;
433,056✔
1926

1927
  case 78: // constant: comp_type "argument"
32✔
1928
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ExpressionComparisonType(yystack_[1].value.as < int > ()), yystack_[0].value.as < std::string > ()); }
32✔
1929
    break;
32✔
1930

1931
  case 79: // constant: "obj" '(' "string" ',' primary_key ')'
104✔
1932
                                { 
104✔
1933
                                    auto tmp = yystack_[1].value.as < ConstantNode* > ();
104✔
1934
                                    tmp->add_table(yystack_[3].value.as < std::string > ());
104✔
1935
                                    yylhs.value.as < ConstantNode* > () = tmp;
104✔
1936
                                }
104✔
1937
    break;
104✔
1938

1939
  case 80: // constant: "binary" '(' "string" ')'
1,068✔
1940
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::BINARY_STR, yystack_[1].value.as < std::string > ()); }
1,068✔
1941
    break;
1,068✔
1942

1943
  case 81: // constant: "binary" '(' "base64" ')'
716✔
1944
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::BINARY_BASE64, yystack_[1].value.as < std::string > ()); }
716✔
1945
    break;
716✔
1946

1947
  case 82: // primary_key: "natural0"
23,184✔
1948
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NUMBER, yystack_[0].value.as < std::string > ()); }
23,184✔
1949
    break;
23,184✔
1950

1951
  case 83: // primary_key: "number"
368✔
1952
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::NUMBER, yystack_[0].value.as < std::string > ()); }
368✔
1953
    break;
368✔
1954

1955
  case 84: // primary_key: "string"
6,360✔
1956
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::STRING, yystack_[0].value.as < std::string > ()); }
6,360✔
1957
    break;
6,360✔
1958

1959
  case 85: // primary_key: "UUID"
672✔
1960
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::UUID_T, yystack_[0].value.as < std::string > ()); }
672✔
1961
    break;
672✔
1962

1963
  case 86: // primary_key: "ObjectId"
772✔
1964
                                { yylhs.value.as < ConstantNode* > () = drv.m_parse_nodes.create<ConstantNode>(ConstantNode::OID, yystack_[0].value.as < std::string > ()); }
772✔
1965
    break;
772✔
1966

1967
  case 87: // boolexpr: "truepredicate"
536✔
1968
                                { yylhs.value.as < TrueOrFalseNode* > () = drv.m_parse_nodes.create<TrueOrFalseNode>(true); }
536✔
1969
    break;
536✔
1970

1971
  case 88: // boolexpr: "falsepredicate"
160✔
1972
                                { yylhs.value.as < TrueOrFalseNode* > () = drv.m_parse_nodes.create<TrueOrFalseNode>(false); }
160✔
1973
    break;
160✔
1974

1975
  case 89: // comp_type: "any"
3,756✔
1976
                                { yylhs.value.as < int > () = int(ExpressionComparisonType::Any); }
3,756✔
1977
    break;
3,756✔
1978

1979
  case 90: // comp_type: "all"
2,536✔
1980
                                { yylhs.value.as < int > () = int(ExpressionComparisonType::All); }
2,536✔
1981
    break;
2,536✔
1982

1983
  case 91: // comp_type: "none"
2,420✔
1984
                                { yylhs.value.as < int > () = int(ExpressionComparisonType::None); }
2,420✔
1985
    break;
2,420✔
1986

1987
  case 92: // post_op: %empty
467,882✔
1988
                                { yylhs.value.as < PostOpNode* > () = nullptr; }
467,882✔
1989
    break;
467,882✔
1990

1991
  case 93: // post_op: '.' "@size"
3,716✔
1992
                                { yylhs.value.as < PostOpNode* > () = drv.m_parse_nodes.create<PostOpNode>(yystack_[0].value.as < std::string > (), PostOpNode::SIZE);}
3,716✔
1993
    break;
3,716✔
1994

1995
  case 94: // post_op: '[' "SIZE" ']'
8✔
1996
                                { yylhs.value.as < PostOpNode* > () = drv.m_parse_nodes.create<PostOpNode>(yystack_[1].value.as < std::string > (), PostOpNode::SIZE);}
8✔
1997
    break;
8✔
1998

1999
  case 95: // post_op: '.' "@type"
584✔
2000
                                { yylhs.value.as < PostOpNode* > () = drv.m_parse_nodes.create<PostOpNode>(yystack_[0].value.as < std::string > (), PostOpNode::TYPE);}
584✔
2001
    break;
584✔
2002

2003
  case 96: // aggr_op: '.' "@max"
864✔
2004
                                { yylhs.value.as < int > () = int(AggrNode::MAX);}
864✔
2005
    break;
864✔
2006

2007
  case 97: // aggr_op: '.' "@min"
836✔
2008
                                { yylhs.value.as < int > () = int(AggrNode::MIN);}
836✔
2009
    break;
836✔
2010

2011
  case 98: // aggr_op: '.' "@sum"
960✔
2012
                                { yylhs.value.as < int > () = int(AggrNode::SUM);}
960✔
2013
    break;
960✔
2014

2015
  case 99: // aggr_op: '.' "@average"
860✔
2016
                                { yylhs.value.as < int > () = int(AggrNode::AVG);}
860✔
2017
    break;
860✔
2018

2019
  case 100: // equality: "=="
461,180✔
2020
                                { yylhs.value.as < CompareType > () = CompareType::EQUAL; }
461,180✔
2021
    break;
461,180✔
2022

2023
  case 101: // equality: "!="
3,020✔
2024
                                { yylhs.value.as < CompareType > () = CompareType::NOT_EQUAL; }
3,020✔
2025
    break;
3,020✔
2026

2027
  case 102: // equality: "in"
732✔
2028
                                { yylhs.value.as < CompareType > () = CompareType::IN; }
732✔
2029
    break;
732✔
2030

2031
  case 103: // relational: "<"
624✔
2032
                                { yylhs.value.as < CompareType > () = CompareType::LESS; }
624✔
2033
    break;
624✔
2034

2035
  case 104: // relational: "<="
384✔
2036
                                { yylhs.value.as < CompareType > () = CompareType::LESS_EQUAL; }
384✔
2037
    break;
384✔
2038

2039
  case 105: // relational: ">"
3,384✔
2040
                                { yylhs.value.as < CompareType > () = CompareType::GREATER; }
3,384✔
2041
    break;
3,384✔
2042

2043
  case 106: // relational: ">="
740✔
2044
                                { yylhs.value.as < CompareType > () = CompareType::GREATER_EQUAL; }
740✔
2045
    break;
740✔
2046

2047
  case 107: // stringop: "beginswith"
536✔
2048
                                { yylhs.value.as < CompareType > () = CompareType::BEGINSWITH; }
536✔
2049
    break;
536✔
2050

2051
  case 108: // stringop: "endswith"
528✔
2052
                                { yylhs.value.as < CompareType > () = CompareType::ENDSWITH; }
528✔
2053
    break;
528✔
2054

2055
  case 109: // stringop: "contains"
896✔
2056
                                { yylhs.value.as < CompareType > () = CompareType::CONTAINS; }
896✔
2057
    break;
896✔
2058

2059
  case 110: // stringop: "like"
488✔
2060
                                { yylhs.value.as < CompareType > () = CompareType::LIKE; }
488✔
2061
    break;
488✔
2062

2063
  case 111: // path: id
477,230✔
2064
                                { yylhs.value.as < PathNode* > () = drv.m_parse_nodes.create<PathNode>(yystack_[0].value.as < std::string > ()); }
477,230✔
2065
    break;
477,230✔
2066

2067
  case 112: // path: path '.' id
16,392✔
2068
                                { yystack_[2].value.as < PathNode* > ()->add_element(yystack_[0].value.as < std::string > ()); yylhs.value.as < PathNode* > () = yystack_[2].value.as < PathNode* > (); }
16,392✔
2069
    break;
16,392✔
2070

2071
  case 113: // path: path '[' "natural0" ']'
492✔
2072
                                { yystack_[3].value.as < PathNode* > ()->add_element(size_t(strtoll(yystack_[1].value.as < std::string > ().c_str(), nullptr, 0))); yylhs.value.as < PathNode* > () = yystack_[3].value.as < PathNode* > (); }
492✔
2073
    break;
492✔
2074

2075
  case 114: // path: path '[' "FIRST" ']'
468✔
2076
                                { yystack_[3].value.as < PathNode* > ()->add_element(size_t(0)); yylhs.value.as < PathNode* > () = yystack_[3].value.as < PathNode* > (); }
468✔
2077
    break;
468✔
2078

2079
  case 115: // path: path '[' "LAST" ']'
436✔
2080
                                { yystack_[3].value.as < PathNode* > ()->add_element(size_t(-1)); yylhs.value.as < PathNode* > () = yystack_[3].value.as < PathNode* > (); }
436✔
2081
    break;
436✔
2082

2083
  case 116: // path: path '[' '*' ']'
320✔
2084
                                { yystack_[3].value.as < PathNode* > ()->add_element(PathElement::AllTag()); yylhs.value.as < PathNode* > () = yystack_[3].value.as < PathNode* > (); }
320✔
2085
    break;
320✔
2086

2087
  case 117: // path: path '[' "string" ']'
264✔
2088
                                { yystack_[3].value.as < PathNode* > ()->add_element(yystack_[1].value.as < std::string > ().substr(1, yystack_[1].value.as < std::string > ().size() - 2)); yylhs.value.as < PathNode* > () = yystack_[3].value.as < PathNode* > (); }
264✔
2089
    break;
264✔
2090

2091
  case 118: // path: path '[' "argument" ']'
4✔
2092
                                { yystack_[3].value.as < PathNode* > ()->add_element(drv.get_arg_for_index(yystack_[1].value.as < std::string > ())); yylhs.value.as < PathNode* > () = yystack_[3].value.as < PathNode* > (); }
4✔
2093
    break;
4✔
2094

2095
  case 119: // id: "identifier"
493,506✔
2096
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
493,506✔
2097
    break;
493,506✔
2098

2099
  case 120: // id: "@links"
788✔
2100
                                { yylhs.value.as < std::string > () = std::string("@links"); }
788✔
2101
    break;
788✔
2102

2103
  case 121: // id: "beginswith"
4✔
2104
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
4✔
2105
    break;
4✔
2106

2107
  case 122: // id: "endswith"
8✔
2108
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
8✔
2109
    break;
8✔
2110

2111
  case 123: // id: "contains"
4✔
2112
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
4✔
2113
    break;
4✔
2114

UNCOV
2115
  case 124: // id: "like"
✔
UNCOV
2116
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
×
2117
    break;
×
2118

2119
  case 125: // id: "between"
24✔
2120
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
24✔
2121
    break;
24✔
2122

2123
  case 126: // id: "key or value"
72✔
2124
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
72✔
2125
    break;
72✔
2126

2127
  case 127: // id: "sort"
40✔
2128
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
40✔
2129
    break;
40✔
2130

2131
  case 128: // id: "distinct"
28✔
2132
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
28✔
2133
    break;
28✔
2134

2135
  case 129: // id: "limit"
32✔
2136
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
32✔
2137
    break;
32✔
2138

UNCOV
2139
  case 130: // id: "ascending"
✔
UNCOV
2140
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
×
UNCOV
2141
    break;
×
2142

2143
  case 131: // id: "descending"
12✔
2144
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
12✔
2145
    break;
12✔
2146

2147
  case 132: // id: "in"
28✔
2148
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
28✔
2149
    break;
28✔
2150

2151
  case 133: // id: "fulltext"
28✔
2152
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
28✔
2153
    break;
28✔
2154

2155
  case 134: // id: "binary"
80✔
2156
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
80✔
2157
    break;
80✔
2158

2159
  case 135: // id: "FIRST"
108✔
2160
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
108✔
2161
    break;
108✔
2162

2163
  case 136: // id: "LAST"
✔
2164
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
×
2165
    break;
×
2166

2167
  case 137: // id: "SIZE"
✔
2168
                                { yylhs.value.as < std::string > () = yystack_[0].value.as < std::string > (); }
×
2169
    break;
×
2170

2171

2172

2173
            default:
✔
2174
              break;
×
2175
            }
×
2176
        }
×
2177
#if YY_EXCEPTIONS
×
2178
      catch (const syntax_error& yyexc)
×
2179
        {
×
2180
          YYCDEBUG << "Caught exception: " << yyexc.what() << '\n';
×
2181
          error (yyexc);
×
2182
          YYERROR;
×
2183
        }
×
2184
#endif // YY_EXCEPTIONS
6,290,696✔
2185
      YY_SYMBOL_PRINT ("-> $$ =", yylhs);
6,290,696✔
2186
      yypop_ (yylen);
6,290,696✔
2187
      yylen = 0;
6,290,696✔
2188

3,145,088✔
2189
      // Shift the result of the reduction.
3,145,088✔
2190
      yypush_ (YY_NULLPTR, YY_MOVE (yylhs));
6,290,696✔
2191
    }
6,290,696✔
2192
    goto yynewstate;
6,290,696✔
2193

300✔
2194

300✔
2195
  /*--------------------------------------.
300✔
2196
  | yyerrlab -- here on detecting error.  |
300✔
2197
  `--------------------------------------*/
300✔
2198
  yyerrlab:
600✔
2199
    // If not already recovering from an error, report this error.
300✔
2200
    if (!yyerrstatus_)
600✔
2201
      {
600✔
2202
        ++yynerrs_;
600✔
2203
        context yyctx (*this, yyla);
600✔
2204
        std::string msg = yysyntax_error_ (yyctx);
600✔
2205
        error (YY_MOVE (msg));
600✔
2206
      }
600✔
2207

300✔
2208

300✔
2209
    if (yyerrstatus_ == 3)
600✔
UNCOV
2210
      {
×
2211
        /* If just tried and failed to reuse lookahead token after an
2212
           error, discard it.  */
2213

2214
        // Return failure if at end of input.
UNCOV
2215
        if (yyla.kind () == symbol_kind::SYM_YYEOF)
×
UNCOV
2216
          YYABORT;
×
UNCOV
2217
        else if (!yyla.empty ())
×
UNCOV
2218
          {
×
UNCOV
2219
            yy_destroy_ ("Error: discarding", yyla);
×
UNCOV
2220
            yyla.clear ();
×
UNCOV
2221
          }
×
2222
      }
×
2223

300✔
2224
    // Else will try to reuse lookahead token after shifting the error token.
300✔
2225
    goto yyerrlab1;
600✔
2226

2227

2228
  /*---------------------------------------------------.
2229
  | yyerrorlab -- error raised explicitly by YYERROR.  |
2230
  `---------------------------------------------------*/
UNCOV
2231
  yyerrorlab:
×
2232
    /* Pacify compilers when the user code never invokes YYERROR and
2233
       the label yyerrorlab therefore never appears in user code.  */
UNCOV
2234
    if (false)
×
UNCOV
2235
      YYERROR;
×
2236

2237
    /* Do not reclaim the symbols of the rule whose action triggered
2238
       this YYERROR.  */
UNCOV
2239
    yypop_ (yylen);
×
UNCOV
2240
    yylen = 0;
×
UNCOV
2241
    YY_STACK_PRINT ();
×
UNCOV
2242
    goto yyerrlab1;
×
2243

358✔
2244

358✔
2245
  /*-------------------------------------------------------------.
358✔
2246
  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
358✔
2247
  `-------------------------------------------------------------*/
358✔
2248
  yyerrlab1:
716✔
2249
    yyerrstatus_ = 3;   // Each real token shifted decrements this.
716✔
2250
    // Pop stack until we find a state that shifts the error token.
358✔
2251
    for (;;)
716✔
2252
      {
2,260✔
2253
        yyn = yypact_[+yystack_[0].state];
2,260✔
2254
        if (!yy_pact_value_is_default_ (yyn))
2,260✔
2255
          {
2,260✔
2256
            yyn += symbol_kind::SYM_YYerror;
2,260✔
2257
            if (0 <= yyn && yyn <= yylast_
2,260✔
2258
                && yycheck_[yyn] == symbol_kind::SYM_YYerror)
2,150✔
UNCOV
2259
              {
×
UNCOV
2260
                yyn = yytable_[yyn];
×
UNCOV
2261
                if (0 < yyn)
×
UNCOV
2262
                  break;
×
2263
              }
2,260✔
2264
          }
2,260✔
2265

1,130✔
2266
        // Pop the current state because it cannot handle the error token.
1,130✔
2267
        if (yystack_.size () == 1)
2,260✔
2268
          YYABORT;
1,488✔
2269

1,130✔
2270
        yy_destroy_ ("Error: popping", yystack_[0]);
1,902✔
2271
        yypop_ ();
1,544✔
2272
        YY_STACK_PRINT ();
1,544✔
2273
      }
1,544✔
2274
    {
358✔
UNCOV
2275
      stack_symbol_type error_token;
×
2276

2277

2278
      // Shift the error token.
UNCOV
2279
      error_token.state = state_type (yyn);
×
UNCOV
2280
      yypush_ ("Shifting", YY_MOVE (error_token));
×
UNCOV
2281
    }
×
UNCOV
2282
    goto yynewstate;
×
2283

20,956✔
2284

20,956✔
2285
  /*-------------------------------------.
20,956✔
2286
  | yyacceptlab -- YYACCEPT comes here.  |
20,956✔
2287
  `-------------------------------------*/
20,956✔
2288
  yyacceptlab:
41,914✔
2289
    yyresult = 0;
41,914✔
2290
    goto yyreturn;
41,914✔
2291

358✔
2292

358✔
2293
  /*-----------------------------------.
358✔
2294
  | yyabortlab -- YYABORT comes here.  |
358✔
2295
  `-----------------------------------*/
358✔
2296
  yyabortlab:
716✔
2297
    yyresult = 1;
716✔
2298
    goto yyreturn;
716✔
2299

21,314✔
2300

21,314✔
2301
  /*-----------------------------------------------------.
21,314✔
2302
  | yyreturn -- parsing is finished, return the result.  |
21,314✔
2303
  `-----------------------------------------------------*/
21,314✔
2304
  yyreturn:
42,630✔
2305
    if (!yyla.empty ())
42,630✔
2306
      yy_destroy_ ("Cleanup: discarding lookahead", yyla);
600✔
2307

21,314✔
2308
    /* Do not reclaim the symbols of the rule whose action triggered
21,314✔
2309
       this YYABORT or YYACCEPT.  */
21,314✔
2310
    yypop_ (yylen);
42,630✔
2311
    YY_STACK_PRINT ();
42,630✔
2312
    while (1 < yystack_.size ())
126,462✔
2313
      {
83,832✔
2314
        yy_destroy_ ("Cleanup: popping", yystack_[0]);
83,832✔
2315
        yypop_ ();
83,832✔
2316
      }
83,832✔
2317

21,314✔
2318
    return yyresult;
42,630✔
2319
  }
12✔
2320
#if YY_EXCEPTIONS
12✔
2321
    catch (...)
12✔
2322
      {
12✔
2323
        YYCDEBUG << "Exception caught: cleaning lookahead and stack\n";
12✔
2324
        // Do not try to display the values of the reclaimed symbols,
6✔
2325
        // as their printers might throw an exception.
6✔
2326
        if (!yyla.empty ())
12✔
2327
          yy_destroy_ (YY_NULLPTR, yyla);
×
2328

6✔
2329
        while (1 < yystack_.size ())
84✔
2330
          {
72✔
2331
            yy_destroy_ (YY_NULLPTR, yystack_[0]);
72✔
2332
            yypop_ ();
72✔
2333
          }
72✔
2334
        throw;
12✔
2335
      }
12✔
2336
#endif // YY_EXCEPTIONS
42,648✔
2337
  }
42,648✔
2338

2339
  void
2340
  parser::error (const syntax_error& yyexc)
2341
  {
116✔
2342
    error (yyexc.what ());
116✔
2343
  }
116✔
2344

2345
  /* Return YYSTR after stripping away unnecessary quotes and
2346
     backslashes, so that it's suitable for yyerror.  The heuristic is
2347
     that double-quoting is unnecessary unless the string contains an
2348
     apostrophe, a comma, or backslash (other than backslash-backslash).
2349
     YYSTR is taken from yytname.  */
2350
  std::string
2351
  parser::yytnamerr_ (const char *yystr)
2352
  {
1,088✔
2353
    if (*yystr == '"')
1,088✔
2354
      {
784✔
2355
        std::string yyr;
784✔
2356
        char const *yyp = yystr;
784✔
2357

392✔
2358
        for (;;)
784✔
2359
          switch (*++yyp)
7,296✔
2360
            {
7,296✔
UNCOV
2361
            case '\'':
✔
UNCOV
2362
            case ',':
✔
UNCOV
2363
              goto do_not_strip_quotes;
×
2364

UNCOV
2365
            case '\\':
✔
UNCOV
2366
              if (*++yyp != '\\')
×
2367
                goto do_not_strip_quotes;
×
UNCOV
2368
              else
×
UNCOV
2369
                goto append;
×
2370

UNCOV
2371
            append:
×
2372
            default:
6,512✔
2373
              yyr += *yyp;
6,512✔
2374
              break;
6,512✔
2375

2376
            case '"':
784✔
2377
              return yyr;
784✔
2378
            }
7,296✔
2379
      do_not_strip_quotes: ;
392✔
UNCOV
2380
      }
×
2381

544✔
2382
    return yystr;
696✔
2383
  }
1,088✔
2384

2385
  std::string
2386
  parser::symbol_name (symbol_kind_type yysymbol)
2387
  {
1,088✔
2388
    return yytnamerr_ (yytname_[yysymbol]);
1,088✔
2389
  }
1,088✔
2390

2391

2392

2393
  // parser::context.
2394
  parser::context::context (const parser& yyparser, const symbol_type& yyla)
2395
    : yyparser_ (yyparser)
2396
    , yyla_ (yyla)
2397
  {}
600✔
2398

2399
  int
2400
  parser::context::expected_tokens (symbol_kind_type yyarg[], int yyargn) const
2401
  {
600✔
2402
    // Actual number of expected tokens
300✔
2403
    int yycount = 0;
600✔
2404

300✔
2405
    const int yyn = yypact_[+yyparser_.yystack_[0].state];
600✔
2406
    if (!yy_pact_value_is_default_ (yyn))
600✔
2407
      {
600✔
2408
        /* Start YYX at -YYN if negative to avoid negative indexes in
300✔
2409
           YYCHECK.  In other words, skip the first -YYN actions for
300✔
2410
           this state because they are default actions.  */
300✔
2411
        const int yyxbegin = yyn < 0 ? -yyn : 0;
588✔
2412
        // Stay within bounds of both yycheck and yytname.
300✔
2413
        const int yychecklim = yylast_ - yyn + 1;
600✔
2414
        const int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
590✔
2415
        for (int yyx = yyxbegin; yyx < yyxend; ++yyx)
31,072✔
2416
          if (yycheck_[yyx + yyn] == yyx && yyx != symbol_kind::SYM_YYerror
30,740✔
2417
              && !yy_table_value_is_error_ (yytable_[yyx + yyn]))
16,284✔
2418
            {
1,828✔
2419
              if (!yyarg)
1,828✔
UNCOV
2420
                ++yycount;
×
2421
              else if (yycount == yyargn)
1,828✔
2422
                return 0;
268✔
2423
              else
1,560✔
2424
                yyarg[yycount++] = YY_CAST (symbol_kind_type, yyx);
1,560✔
2425
            }
1,828✔
2426
      }
600✔
2427

300✔
2428
    if (yyarg && yycount == 0 && 0 < yyargn)
466!
UNCOV
2429
      yyarg[0] = symbol_kind::SYM_YYEMPTY;
×
2430
    return yycount;
332✔
2431
  }
600✔
2432

2433

2434

2435

2436

2437

2438
  int
2439
  parser::yy_syntax_error_arguments_ (const context& yyctx,
2440
                                                 symbol_kind_type yyarg[], int yyargn) const
2441
  {
600✔
2442
    /* There are many possibilities here to consider:
300✔
2443
       - If this state is a consistent state with a default action, then
300✔
2444
         the only way this function was invoked is if the default action
300✔
2445
         is an error action.  In that case, don't check for expected
300✔
2446
         tokens because there are none.
300✔
2447
       - The only way there can be no lookahead present (in yyla) is
300✔
2448
         if this state is a consistent state with a default action.
300✔
2449
         Thus, detecting the absence of a lookahead is sufficient to
300✔
2450
         determine that there is no unexpected or expected token to
300✔
2451
         report.  In that case, just report a simple "syntax error".
300✔
2452
       - Don't assume there isn't a lookahead just because this state is
300✔
2453
         a consistent state with a default action.  There might have
300✔
2454
         been a previous inconsistent state, consistent state with a
300✔
2455
         non-default action, or user semantic action that manipulated
300✔
2456
         yyla.  (However, yyla is currently not documented for users.)
300✔
2457
       - Of course, the expected token list depends on states to have
300✔
2458
         correct lookahead information, and it depends on the parser not
300✔
2459
         to perform extra reductions after fetching a lookahead from the
300✔
2460
         scanner and before detecting a syntax error.  Thus, state merging
300✔
2461
         (from LALR or IELR) and default reductions corrupt the expected
300✔
2462
         token list.  However, the list is correct for canonical LR with
300✔
2463
         one exception: it will still contain any token that will not be
300✔
2464
         accepted due to an error action in a later state.
300✔
2465
    */
300✔
2466

300✔
2467
    if (!yyctx.lookahead ().empty ())
600✔
2468
      {
600✔
2469
        if (yyarg)
600✔
2470
          yyarg[0] = yyctx.token ();
600✔
2471
        int yyn = yyctx.expected_tokens (yyarg ? yyarg + 1 : yyarg, yyargn - 1);
600✔
2472
        return yyn + 1;
600✔
2473
      }
600✔
UNCOV
2474
    return 0;
×
UNCOV
2475
  }
×
2476

2477
  // Generate an error message.
2478
  std::string
2479
  parser::yysyntax_error_ (const context& yyctx) const
2480
  {
600✔
2481
    // Its maximum.
300✔
2482
    enum { YYARGS_MAX = 5 };
600✔
2483
    // Arguments of yyformat.
300✔
2484
    symbol_kind_type yyarg[YYARGS_MAX];
600✔
2485
    int yycount = yy_syntax_error_arguments_ (yyctx, yyarg, YYARGS_MAX);
600✔
2486

300✔
2487
    char const* yyformat = YY_NULLPTR;
600✔
2488
    switch (yycount)
600✔
2489
      {
600✔
UNCOV
2490
#define YYCASE_(N, S)                         \
×
2491
        case N:                               \
600✔
2492
          yyformat = S;                       \
600✔
2493
        break
600✔
UNCOV
2494
      default: // Avoid compiler warnings.
✔
UNCOV
2495
        YYCASE_ (0, YY_("syntax error"));
✔
2496
        YYCASE_ (1, YY_("syntax error, unexpected %s"));
268✔
2497
        YYCASE_ (2, YY_("syntax error, unexpected %s, expecting %s"));
260✔
2498
        YYCASE_ (3, YY_("syntax error, unexpected %s, expecting %s or %s"));
28✔
2499
        YYCASE_ (4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
4✔
2500
        YYCASE_ (5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
40✔
2501
#undef YYCASE_
600✔
2502
      }
600✔
2503

300✔
2504
    std::string yyres;
600✔
2505
    // Argument number.
300✔
2506
    std::ptrdiff_t yyi = 0;
600✔
2507
    for (char const* yyp = yyformat; *yyp; ++yyp)
21,296✔
2508
      if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount)
20,696✔
2509
        {
1,088✔
2510
          yyres += symbol_name (yyarg[yyi++]);
1,088✔
2511
          ++yyp;
1,088✔
2512
        }
1,088✔
2513
      else
19,608✔
2514
        yyres += *yyp;
19,608✔
2515
    return yyres;
600✔
2516
  }
600✔
2517

2518

2519
  const short parser::yypact_ninf_ = -158;
2520

2521
  const signed char parser::yytable_ninf_ = -1;
2522

2523
  const short
2524
  parser::yypact_[] =
2525
  {
2526
     123,  -158,  -158,   -24,  -158,  -158,  -158,  -158,  -158,  -158,
2527
     123,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
2528
    -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
2529
    -158,  -158,    26,  -158,  -158,  -158,    69,  -158,  -158,  -158,
2530
    -158,  -158,  -158,  -158,   123,   433,   143,   -16,  -158,    17,
2531
     164,    96,  -158,  -158,  -158,  -158,  -158,  -158,    61,   -12,
2532
    -158,   531,  -158,   121,    70,    -8,    11,    69,   -58,  -158,
2533
     131,  -158,   123,   123,    15,  -158,  -158,  -158,  -158,  -158,
2534
    -158,  -158,   248,   248,   248,   248,   188,   248,  -158,  -158,
2535
    -158,   373,  -158,    24,   313,   174,  -158,  -158,   433,    16,
2536
     457,   465,  -158,   113,   118,    64,   142,   115,   168,  -158,
2537
    -158,   433,  -158,  -158,   226,   181,   199,   200,  -158,  -158,
2538
    -158,   248,    55,  -158,  -158,    55,  -158,  -158,   248,   193,
2539
     193,  -158,  -158,   187,   373,  -158,   201,   204,   205,  -158,
2540
    -158,   -39,   509,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
2541
    -158,   224,   235,   236,   239,   240,   241,   242,   531,   531,
2542
     531,   492,   237,  -158,  -158,  -158,   531,   531,   288,   267,
2543
     193,  -158,   251,   250,   251,  -158,  -158,  -158,  -158,  -158,
2544
    -158,  -158,  -158,  -158,   254,   257,   -38,    76,    72,    64,
2545
     266,   -23,   268,   251,  -158,   119,   269,   123,  -158,  -158,
2546
     531,  -158,  -158,  -158,  -158,   531,  -158,  -158,  -158,  -158,
2547
     291,   251,  -158,   -33,  -158,   250,   -23,    32,    76,    64,
2548
     -23,   304,   251,  -158,  -158,   305,   311,  -158,   141,  -158,
2549
    -158,  -158,   277,   303,  -158,  -158,   309,  -158
2550
  };
2551

2552
  const unsigned char
2553
  parser::yydefact_[] =
2554
  {
2555
       0,    87,    88,     0,    74,    75,    76,    89,    90,    91,
2556
       0,   119,    84,    69,    67,    68,    82,    83,    70,    71,
2557
      85,    86,    72,    73,    77,   121,   122,   123,   133,   124,
2558
     125,   132,     0,   127,   128,   129,   134,   130,   131,   135,
2559
     136,   137,   126,   120,     0,    64,     0,    48,     3,     0,
2560
      18,    25,    27,    28,    26,    24,    66,     8,     0,    92,
2561
     111,     0,     6,     0,     0,     0,     0,     0,     0,    63,
2562
       0,     1,     0,     0,     2,   100,   101,   103,   105,   106,
2563
     104,   102,     0,     0,     0,     0,     0,     0,   107,   108,
2564
     109,     0,   110,     0,     0,     0,    78,   134,    64,    92,
2565
       0,     0,    29,    32,     0,    33,     0,     0,     0,     7,
2566
      19,     0,    61,     5,     4,     0,     0,     0,    50,    49,
2567
      51,     0,    22,    18,    25,    23,    20,    21,     0,     9,
2568
      11,    13,    15,     0,     0,    12,     0,     0,     0,    17,
2569
      16,     0,     0,    30,    96,    97,    98,    99,    93,    95,
2570
     112,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2571
       0,     0,     0,    80,    81,    65,     0,     0,     0,     0,
2572
      10,    14,     0,     0,     0,    62,   117,   113,   118,   114,
2573
     115,    94,   116,    31,     0,     0,     0,     0,     0,    53,
2574
       0,     0,     0,     0,    43,     0,     0,     0,    79,    55,
2575
       0,    59,    60,    56,    52,     0,    58,    36,    35,    37,
2576
       0,     0,    40,     0,    47,     0,     0,     0,     0,    54,
2577
       0,     0,     0,    42,    44,     0,     0,    57,     0,    45,
2578
      41,    46,     0,     0,    38,    34,     0,    39
2579
  };
2580

2581
  const short
2582
  parser::yypgoto_[] =
2583
  {
2584
    -158,  -158,    -9,  -158,   -35,     0,     2,  -158,  -158,  -158,
2585
    -128,  -157,  -158,   169,  -158,  -158,  -158,  -158,  -158,  -158,
2586
    -158,  -158,   167,   293,   289,   -41,   230,  -158,   -40,   294,
2587
    -158,  -158,  -158,  -158,   -55,   -62
2588
  };
2589

2590
  const unsigned char
2591
  parser::yydefgoto_[] =
2592
  {
2593
       0,    46,    47,    48,    49,   123,   124,    52,   104,    53,
2594
     210,   192,   213,   194,   195,   140,    74,   118,   188,   119,
2595
     186,   120,   203,    54,    68,    55,    56,    57,    58,   102,
2596
     103,    86,    87,    94,    59,    60
2597
  };
2598

2599
  const unsigned char
2600
  parser::yytable_[] =
2601
  {
2602
      50,    62,    51,    99,    69,    70,   105,    72,    73,    66,
2603
      50,   207,    51,   208,   111,    72,    73,   196,   112,   209,
2604
      75,    76,    77,    78,    79,    80,    75,    76,    77,    78,
2605
      79,    80,   199,   111,   200,    65,   212,   175,   150,   222,
2606
       7,     8,     9,   223,    50,    61,    51,   122,   125,   126,
2607
     127,   129,   130,   133,   221,    72,    73,    69,    70,   100,
2608
      81,   101,   109,   113,   114,   230,    81,   115,   116,   117,
2609
     165,    70,    50,    50,    51,    51,    82,    83,    84,    85,
2610
     150,   110,    82,    83,    84,    85,   169,   142,   225,   101,
2611
      11,   131,   228,   170,   135,    63,   183,   184,   150,    45,
2612
     107,   108,   226,    96,    25,    26,    27,    28,    29,    30,
2613
      31,   187,   189,    33,    34,    35,    97,    37,    38,    39,
2614
      40,    41,    84,    85,    42,    43,     1,     2,     3,     4,
2615
       5,     6,   201,   202,   171,   160,    98,   161,    64,     7,
2616
       8,     9,   204,    71,   205,   218,    95,   160,    10,   161,
2617
     219,   106,    11,    12,    13,    14,    15,    16,    17,    18,
2618
      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
2619
      29,    30,    31,    96,    32,    33,    34,    35,    36,    37,
2620
      38,    39,    40,    41,   158,   163,    42,    43,   217,   214,
2621
     159,   215,    44,     3,     4,     5,     6,    50,    45,    51,
2622
     136,   137,   138,   128,     7,     8,     9,    88,    89,    90,
2623
      91,    92,    93,   233,   162,   234,   139,    11,    12,    13,
2624
      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
2625
      24,    25,    26,    27,    28,    29,    30,    31,   164,    32,
2626
      33,    34,    35,    36,    37,    38,    39,    40,    41,    72,
2627
     166,    42,    43,     3,     4,     5,     6,   121,    82,    83,
2628
      84,    85,    98,    45,     7,     8,     9,    12,   167,   168,
2629
     172,    16,    17,   173,   174,    20,    21,    11,    12,    13,
2630
      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
2631
      24,    25,    26,    27,    28,    29,    30,    31,   176,    32,
2632
      33,    34,    35,    36,    37,    38,    39,    40,    41,   177,
2633
     178,    42,    43,   179,   180,   181,   182,   121,     3,     4,
2634
       5,     6,   190,    45,   191,   193,   197,   198,   134,     7,
2635
       8,     9,    82,    83,    84,    85,   206,   110,   235,   236,
2636
     211,   216,    11,    12,    13,    14,    15,    16,    17,    18,
2637
      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
2638
      29,    30,    31,   220,    32,    33,    34,    35,    36,    37,
2639
      38,    39,    40,    41,   229,   231,    42,    43,     3,     4,
2640
       5,     6,   232,   237,   224,   227,   132,   141,    45,     7,
2641
       8,     9,   185,   143,     0,     0,     0,     0,     0,     0,
2642
       0,     0,    11,    12,    13,    14,    15,    16,    17,    18,
2643
      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
2644
      29,    30,    31,     0,    32,    33,    34,    35,    36,    37,
2645
      38,    39,    40,    41,     0,     0,    42,    43,     0,     4,
2646
       5,     6,     0,     0,     0,     0,     0,     0,    45,     7,
2647
       8,     9,     0,     0,     0,     0,     0,     0,     0,     0,
2648
       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
2649
      19,    20,    21,    22,    23,    24,   144,   145,   146,   147,
2650
       0,     0,     0,     0,    32,     0,    11,     0,    67,     0,
2651
       0,     0,     0,     0,     0,   151,     0,     0,     0,   152,
2652
      25,    26,    27,    28,    29,    30,    31,   153,     0,    33,
2653
      34,    35,    97,    37,    38,    39,    40,    41,   148,   149,
2654
      42,    43,   151,   154,   155,   156,   152,     0,     0,     0,
2655
       0,     0,   157,     0,   153,     0,     0,     0,    11,     0,
2656
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
2657
     154,   155,    25,    26,    27,    28,    29,    30,    31,   157,
2658
      11,    33,    34,    35,    97,    37,    38,    39,    40,    41,
2659
     148,   149,    42,    43,    25,    26,    27,    28,    29,    30,
2660
      31,     0,     0,    33,    34,    35,    97,    37,    38,    39,
2661
      40,    41,     0,     0,    42,    43
2662
  };
2663

2664
  const short
2665
  parser::yycheck_[] =
2666
  {
2667
       0,    10,     0,    58,    45,    45,    61,    23,    24,    44,
2668
      10,    34,    10,    36,    72,    23,    24,   174,    76,    42,
2669
       9,    10,    11,    12,    13,    14,     9,    10,    11,    12,
2670
      13,    14,    70,    72,    72,    44,   193,    76,   100,    72,
2671
      16,    17,    18,    76,    44,    69,    44,    82,    83,    84,
2672
      85,    86,    87,    93,   211,    23,    24,    98,    98,    71,
2673
      49,    73,    70,    72,    73,   222,    49,    52,    53,    54,
2674
     111,   111,    72,    73,    72,    73,    65,    66,    67,    68,
2675
     142,    70,    65,    66,    67,    68,   121,    71,   216,    73,
2676
      29,    91,   220,   128,    94,    69,   158,   159,   160,    75,
2677
      30,    31,    70,    42,    43,    44,    45,    46,    47,    48,
2678
      49,   166,   167,    52,    53,    54,    55,    56,    57,    58,
2679
      59,    60,    67,    68,    63,    64,     3,     4,     5,     6,
2680
       7,     8,    56,    57,   134,    71,    75,    73,    69,    16,
2681
      17,    18,    70,     0,    72,   200,    50,    71,    25,    73,
2682
     205,    30,    29,    30,    31,    32,    33,    34,    35,    36,
2683
      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
2684
      47,    48,    49,    42,    51,    52,    53,    54,    55,    56,
2685
      57,    58,    59,    60,    71,    70,    63,    64,   197,    70,
2686
      72,    72,    69,     5,     6,     7,     8,   197,    75,   197,
2687
      26,    27,    28,    15,    16,    17,    18,    43,    44,    45,
2688
      46,    47,    48,    72,    72,    74,    42,    29,    30,    31,
2689
      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
2690
      42,    43,    44,    45,    46,    47,    48,    49,    70,    51,
2691
      52,    53,    54,    55,    56,    57,    58,    59,    60,    23,
2692
      69,    63,    64,     5,     6,     7,     8,    69,    65,    66,
2693
      67,    68,    75,    75,    16,    17,    18,    30,    69,    69,
2694
      69,    34,    35,    69,    69,    38,    39,    29,    30,    31,
2695
      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
2696
      42,    43,    44,    45,    46,    47,    48,    49,    74,    51,
2697
      52,    53,    54,    55,    56,    57,    58,    59,    60,    74,
2698
      74,    63,    64,    74,    74,    74,    74,    69,     5,     6,
2699
       7,     8,    34,    75,    73,    75,    72,    70,    15,    16,
2700
      17,    18,    65,    66,    67,    68,    70,    70,    61,    36,
2701
      72,    72,    29,    30,    31,    32,    33,    34,    35,    36,
2702
      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
2703
      47,    48,    49,    72,    51,    52,    53,    54,    55,    56,
2704
      57,    58,    59,    60,    70,    70,    63,    64,     5,     6,
2705
       7,     8,    71,    74,   215,   218,    93,    98,    75,    16,
2706
      17,    18,   162,    99,    -1,    -1,    -1,    -1,    -1,    -1,
2707
      -1,    -1,    29,    30,    31,    32,    33,    34,    35,    36,
2708
      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
2709
      47,    48,    49,    -1,    51,    52,    53,    54,    55,    56,
2710
      57,    58,    59,    60,    -1,    -1,    63,    64,    -1,     6,
2711
       7,     8,    -1,    -1,    -1,    -1,    -1,    -1,    75,    16,
2712
      17,    18,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2713
      -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
2714
      37,    38,    39,    40,    41,    42,    19,    20,    21,    22,
2715
      -1,    -1,    -1,    -1,    51,    -1,    29,    -1,    55,    -1,
2716
      -1,    -1,    -1,    -1,    -1,    30,    -1,    -1,    -1,    34,
2717
      43,    44,    45,    46,    47,    48,    49,    42,    -1,    52,
2718
      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
2719
      63,    64,    30,    58,    59,    60,    34,    -1,    -1,    -1,
2720
      -1,    -1,    67,    -1,    42,    -1,    -1,    -1,    29,    -1,
2721
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
2722
      58,    59,    43,    44,    45,    46,    47,    48,    49,    67,
2723
      29,    52,    53,    54,    55,    56,    57,    58,    59,    60,
2724
      61,    62,    63,    64,    43,    44,    45,    46,    47,    48,
2725
      49,    -1,    -1,    52,    53,    54,    55,    56,    57,    58,
2726
      59,    60,    -1,    -1,    63,    64
2727
  };
2728

2729
  const signed char
2730
  parser::yystos_[] =
2731
  {
2732
       0,     3,     4,     5,     6,     7,     8,    16,    17,    18,
2733
      25,    29,    30,    31,    32,    33,    34,    35,    36,    37,
2734
      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
2735
      48,    49,    51,    52,    53,    54,    55,    56,    57,    58,
2736
      59,    60,    63,    64,    69,    75,    78,    79,    80,    81,
2737
      82,    83,    84,    86,   100,   102,   103,   104,   105,   111,
2738
     112,    69,    79,    69,    69,    79,    81,    55,   101,   102,
2739
     105,     0,    23,    24,    93,     9,    10,    11,    12,    13,
2740
      14,    49,    65,    66,    67,    68,   108,   109,    43,    44,
2741
      45,    46,    47,    48,   110,    50,    42,    55,    75,   111,
2742
      71,    73,   106,   107,    85,   111,    30,    30,    31,    70,
2743
      70,    72,    76,    79,    79,    52,    53,    54,    94,    96,
2744
      98,    69,    81,    82,    83,    81,    81,    81,    15,    81,
2745
      81,    82,   100,   105,    15,    82,    26,    27,    28,    42,
2746
      92,   101,    71,   106,    19,    20,    21,    22,    61,    62,
2747
     112,    30,    34,    42,    58,    59,    60,    67,    71,    72,
2748
      71,    73,    72,    70,    70,   102,    69,    69,    69,    81,
2749
      81,    82,    69,    69,    69,    76,    74,    74,    74,    74,
2750
      74,    74,    74,   112,   112,   103,    97,   111,    95,   111,
2751
      34,    73,    88,    75,    90,    91,    88,    72,    70,    70,
2752
      72,    56,    57,    99,    70,    72,    70,    34,    36,    42,
2753
      87,    72,    88,    89,    70,    72,    72,    79,   111,   111,
2754
      72,    88,    72,    76,    90,    87,    70,    99,    87,    70,
2755
      88,    70,    71,    72,    74,    61,    36,    74
2756
  };
2757

2758
  const signed char
2759
  parser::yyr1_[] =
2760
  {
2761
       0,    77,    78,    79,    79,    79,    79,    79,    79,    80,
2762
      80,    80,    80,    80,    80,    80,    80,    80,    81,    81,
2763
      81,    81,    81,    81,    82,    82,    82,    82,    82,    83,
2764
      83,    84,    84,    85,    86,    87,    87,    87,    88,    88,
2765
      89,    89,    90,    91,    91,    92,    92,    92,    93,    93,
2766
      93,    93,    94,    95,    95,    96,    97,    97,    98,    99,
2767
      99,   100,   100,   101,   101,   101,   102,   102,   102,   102,
2768
     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
2769
     102,   102,   103,   103,   103,   103,   103,   104,   104,   105,
2770
     105,   105,   106,   106,   106,   106,   107,   107,   107,   107,
2771
     108,   108,   108,   109,   109,   109,   109,   110,   110,   110,
2772
     110,   111,   111,   111,   111,   111,   111,   111,   111,   112,
2773
     112,   112,   112,   112,   112,   112,   112,   112,   112,   112,
2774
     112,   112,   112,   112,   112,   112,   112,   112
2775
  };
2776

2777
  const signed char
2778
  parser::yyr2_[] =
2779
  {
2780
       0,     2,     2,     1,     3,     3,     2,     3,     1,     3,
2781
       4,     3,     3,     3,     4,     3,     3,     3,     1,     3,
2782
       3,     3,     3,     3,     1,     1,     1,     1,     1,     2,
2783
       3,     4,     2,     1,    10,     1,     1,     1,     5,     7,
2784
       1,     3,     3,     1,     3,     6,     6,     4,     0,     2,
2785
       2,     2,     4,     1,     3,     4,     2,     4,     4,     1,
2786
       1,     3,     4,     1,     0,     3,     1,     1,     1,     1,
2787
       1,     1,     1,     1,     1,     1,     1,     1,     2,     6,
2788
       4,     4,     1,     1,     1,     1,     1,     1,     1,     1,
2789
       1,     1,     0,     2,     3,     2,     2,     2,     2,     2,
2790
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2791
       1,     1,     3,     4,     4,     4,     4,     4,     4,     1,
2792
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
2793
       1,     1,     1,     1,     1,     1,     1,     1
2794
  };
2795

2796

2797
#if YYDEBUG || 1
2798
  // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
2799
  // First, the terminals, then, starting at \a YYNTOKENS, nonterminals.
2800
  const char*
2801
  const parser::yytname_[] =
2802
  {
2803
  "\"end of file\"", "error", "\"invalid token\"", "\"truepredicate\"",
2804
  "\"falsepredicate\"", "\"subquery\"", "\"true\"", "\"false\"",
2805
  "\"null\"", "\"==\"", "\"!=\"", "\"<\"", "\">\"", "\">=\"", "\"<=\"",
2806
  "\"[c]\"", "\"any\"", "\"all\"", "\"none\"", "\"@max\"", "\"@min\"",
2807
  "\"@sum\"", "\"@average\"", "\"&&\"", "\"||\"", "\"!\"", "\"geobox\"",
2808
  "\"geopolygon\"", "\"geocircle\"", "\"identifier\"", "\"string\"",
2809
  "\"base64\"", "\"infinity\"", "\"NaN\"", "\"natural0\"", "\"number\"",
2810
  "\"float\"", "\"date\"", "\"UUID\"", "\"ObjectId\"", "\"link\"",
2811
  "\"typed link\"", "\"argument\"", "\"beginswith\"", "\"endswith\"",
2812
  "\"contains\"", "\"fulltext\"", "\"like\"", "\"between\"", "\"in\"",
2813
  "\"geowithin\"", "\"obj\"", "\"sort\"", "\"distinct\"", "\"limit\"",
2814
  "\"binary\"", "\"ascending\"", "\"descending\"", "\"FIRST\"", "\"LAST\"",
2815
  "\"SIZE\"", "\"@size\"", "\"@type\"", "\"key or value\"", "\"@links\"",
2816
  "'+'", "'-'", "'*'", "'/'", "'('", "')'", "'.'", "','", "'['", "']'",
2817
  "'{'", "'}'", "$accept", "final", "query", "compare", "expr", "value",
2818
  "prop", "aggregate", "simple_prop", "subquery", "coordinate", "geopoint",
2819
  "geoloop_content", "geoloop", "geopoly_content", "geospatial",
2820
  "post_query", "distinct", "distinct_param", "sort", "sort_param",
2821
  "limit", "direction", "list", "list_content", "constant", "primary_key",
2822
  "boolexpr", "comp_type", "post_op", "aggr_op", "equality", "relational",
2823
  "stringop", "path", "id", YY_NULLPTR
2824
  };
2825
#endif
2826

2827

2828
#if YYDEBUG
2829
  const short
2830
  parser::yyrline_[] =
2831
  {
2832
       0,   182,   182,   185,   186,   187,   188,   189,   190,   193,
2833
     194,   199,   200,   201,   202,   207,   208,   209,   212,   213,
2834
     214,   215,   216,   217,   220,   221,   222,   223,   224,   227,
2835
     228,   231,   235,   241,   244,   247,   248,   249,   252,   253,
2836
     256,   257,   259,   262,   263,   266,   267,   268,   271,   272,
2837
     273,   274,   276,   279,   280,   282,   285,   286,   288,   291,
2838
     292,   294,   295,   298,   299,   300,   303,   304,   305,   306,
2839
     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
2840
     322,   323,   326,   327,   328,   329,   330,   333,   334,   337,
2841
     338,   339,   342,   343,   344,   345,   348,   349,   350,   351,
2842
     354,   355,   356,   359,   360,   361,   362,   365,   366,   367,
2843
     368,   371,   372,   373,   374,   375,   376,   377,   378,   381,
2844
     382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
2845
     392,   393,   394,   395,   396,   397,   398,   399
2846
  };
2847

2848
  void
2849
  parser::yy_stack_print_ () const
UNCOV
2850
  {
×
UNCOV
2851
    *yycdebug_ << "Stack now";
×
UNCOV
2852
    for (stack_type::const_iterator
×
UNCOV
2853
           i = yystack_.begin (),
×
UNCOV
2854
           i_end = yystack_.end ();
×
UNCOV
2855
         i != i_end; ++i)
×
UNCOV
2856
      *yycdebug_ << ' ' << int (i->state);
×
UNCOV
2857
    *yycdebug_ << '\n';
×
UNCOV
2858
  }
×
2859

2860
  void
2861
  parser::yy_reduce_print_ (int yyrule) const
UNCOV
2862
  {
×
UNCOV
2863
    int yylno = yyrline_[yyrule];
×
UNCOV
2864
    int yynrhs = yyr2_[yyrule];
×
2865
    // Print the symbols being reduced, and their result.
UNCOV
2866
    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
×
UNCOV
2867
               << " (line " << yylno << "):\n";
×
2868
    // The symbols being reduced.
UNCOV
2869
    for (int yyi = 0; yyi < yynrhs; yyi++)
×
UNCOV
2870
      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
×
UNCOV
2871
                       yystack_[(yynrhs) - (yyi + 1)]);
×
UNCOV
2872
  }
×
2873
#endif // YYDEBUG
2874

2875

2876
} // yy
2877

2878

2879

2880
void
2881
yy::parser::error (const std::string& m)
2882
{
716✔
2883
    drv.error(m);
716✔
2884
}
716✔
2885

2886
#ifdef _MSC_VER
2887
#pragma warning( pop ) // restore normal warning levels
2888
#endif
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc