Skip to content

Commit b4ce361

Browse files
author
Jonas Kellerer
committed
feat: allow upper and lowercase for queries
1 parent a5bf1ea commit b4ce361

File tree

3 files changed

+32
-25
lines changed

3 files changed

+32
-25
lines changed

lapis2/src/main/antlr/org/genspectrum/lapis/model/variantqueryparser/VariantQuery.g4

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,53 +13,60 @@ expr:
1313
;
1414

1515
single:
16-
nucleotide_mutation
16+
nucleotide_mutation_query
1717
| pangolineage_query
1818
| n_of_query
19-
| nucleotide_insertion
20-
| aa_mutation
21-
| aa_insertion
19+
| nucleotide_insertion_query
20+
| aa_mutation_query
21+
| aa_insertion_query
2222
| nextclade_pangolineage_query
2323
| nextstrain_clade_lineage_query
2424
| gisaid_clade_lineage_query
2525
;
2626

27-
nucleotide_mutation : nucleotide_symbol? position ambigous_nucleotide_symbol?;
27+
nucleotide_mutation_query : nucleotide_mutation_query_first_symbol? position nucleotide_mutation_query_second_symbol?;
28+
nucleotide_mutation_query_first_symbol: nucleotide_symbol;
29+
nucleotide_mutation_query_second_symbol: possible_ambigous_nucleotide_symbol;
2830
position: NUMBER+;
2931
nucleotide_symbol: A | C | G | T;
30-
ambigous_nucleotide_symbol: nucleotide_symbol | M | R | W | S | Y | K | V | H | D | B | N | MINUS | DOT;
32+
ambigous_nucleotide_symbol: M | R | W | S | Y | K | V | H | D | B | N | MINUS | DOT;
33+
possible_ambigous_nucleotide_symbol: nucleotide_symbol | ambigous_nucleotide_symbol;
34+
3135

3236
pangolineage_query: pangolineage pangolineage_include_sublineages?;
3337
pangolineage: pangolineage_character pangolineage_character? pangolineage_character? pangolineage_number_component*;
3438
pangolineage_character: A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z;
3539
pangolineage_number_component: '.' NUMBER NUMBER? NUMBER?;
3640
pangolineage_include_sublineages: DOT? ASTERISK;
3741

38-
n_of_query: '[' n_of_match_exactly? n_of_number_of_matchers '-of:' n_of_exprs ']';
39-
n_of_match_exactly: 'EXACTLY-';
42+
n_of_query: '[' n_of_match_exactly? n_of_number_of_matchers no_of_of_keyword n_of_exprs ']';
43+
no_of_of_keyword: '-of:' | '-OF:';
44+
n_of_match_exactly: 'EXACTLY-' | 'exactly-';
4045
n_of_number_of_matchers: NUMBER+;
4146
n_of_exprs: expr (',' expr)*;
4247

43-
nucleotide_insertion: 'ins_' position ':' (ambigous_nucleotide_symbol | '?')+;
48+
nucleotide_insertion_query: insertion_keyword position ':' (possible_ambigous_nucleotide_symbol | '?')+;
49+
insertion_keyword: 'ins_' | 'INS_';
4450

45-
aa_mutation: gene ':' aa_symbol? position ambigous_aa_symbol?;
51+
aa_mutation_query: gene ':' aa_symbol? position possible_ambigous_aa_symbol?;
4652
aa_symbol: A | R | N | D | C | E | Q | G | H | I | L | K | M | F | P | S | T | W | Y | V | ASTERISK;
47-
ambigous_aa_symbol: aa_symbol | X | MINUS | DOT;
53+
ambigous_aa_symbol: X | MINUS | DOT;
54+
possible_ambigous_aa_symbol: aa_symbol | ambigous_aa_symbol;
4855
gene: covid_gene;
4956
covid_gene : E | M | N | S | ORF;
5057

51-
aa_insertion: 'ins_' gene ':' (ambigous_aa_symbol | '?')+;
58+
aa_insertion_query: insertion_keyword gene ':' position ':' (possible_ambigous_aa_symbol | '?')+;
5259

5360
nextclade_pangolineage_query: nextclade_pango_lineage_prefix pangolineage_query;
54-
nextclade_pango_lineage_prefix: 'nextcladePangoLineage:';
61+
nextclade_pango_lineage_prefix: 'nextcladePangoLineage:' | 'NEXTCLADEPANGOLINEAGE:';
5562

5663
nextstrain_clade_lineage_query: nextstrain_clade_prefix nextstrain_clade_query;
57-
nextstrain_clade_prefix: 'nextstrainClade:';
64+
nextstrain_clade_prefix: 'nextstrainClade:'| 'NEXTSTRAINCLADE:';
5865
nextstrain_clade_query: NUMBER NUMBER nextstrain_clade_character | 'RECOMBINANT';
5966
nextstrain_clade_character: A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z;
6067

6168
gisaid_clade_lineage_query: gisaid_clade_prefix gisaid_clade_query;
62-
gisaid_clade_prefix: 'gisaid:';
69+
gisaid_clade_prefix: ('gisaid:'| 'GISAID:');
6370
gisaid_clade_query: gisaid_clade_character gisaid_clade_character?;
6471
gisaid_clade_character: A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z;
6572

lapis2/src/main/kotlin/org/genspectrum/lapis/model/VariantQueryCustomListener.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package org.genspectrum.lapis.model
22

33
import VariantQueryBaseListener
4-
import VariantQueryParser.Aa_insertionContext
5-
import VariantQueryParser.Aa_mutationContext
4+
import VariantQueryParser.Aa_insertion_queryContext
5+
import VariantQueryParser.Aa_mutation_queryContext
66
import VariantQueryParser.AndContext
77
import VariantQueryParser.Gisaid_clade_lineage_queryContext
88
import VariantQueryParser.MaybeContext
99
import VariantQueryParser.N_of_queryContext
1010
import VariantQueryParser.Nextclade_pangolineage_queryContext
1111
import VariantQueryParser.Nextstrain_clade_queryContext
1212
import VariantQueryParser.NotContext
13-
import VariantQueryParser.Nucleotide_insertionContext
14-
import VariantQueryParser.Nucleotide_mutationContext
13+
import VariantQueryParser.Nucleotide_insertion_queryContext
14+
import VariantQueryParser.Nucleotide_mutation_queryContext
1515
import VariantQueryParser.OrContext
1616
import VariantQueryParser.Pangolineage_queryContext
1717
import org.antlr.v4.runtime.tree.ParseTreeListener
@@ -31,12 +31,12 @@ class VariantQueryCustomListener : VariantQueryBaseListener(), ParseTreeListener
3131
return expressionStack.first()
3232
}
3333

34-
override fun enterNucleotide_mutation(ctx: Nucleotide_mutationContext?) {
34+
override fun enterNucleotide_mutation_query(ctx: Nucleotide_mutation_queryContext?) {
3535
if (ctx == null) {
3636
return
3737
}
3838
val position = ctx.position().text.toInt()
39-
val secondSymbol = ctx.ambigous_nucleotide_symbol()?.text ?: "-"
39+
val secondSymbol = ctx.nucleotide_mutation_query_second_symbol()?.text ?: "-"
4040

4141
val expr = NucleotideSymbolEquals(position, secondSymbol)
4242
expressionStack.addLast(expr)
@@ -89,15 +89,15 @@ class VariantQueryCustomListener : VariantQueryBaseListener(), ParseTreeListener
8989
expressionStack.addLast(NOf(n, matchExactly, children.reversed()))
9090
}
9191

92-
override fun enterNucleotide_insertion(ctx: Nucleotide_insertionContext?) {
92+
override fun enterNucleotide_insertion_query(ctx: Nucleotide_insertion_queryContext?) {
9393
throw NotImplementedError("Nucleotide insertions are not supported yet.")
9494
}
9595

96-
override fun enterAa_mutation(ctx: Aa_mutationContext?) {
96+
override fun enterAa_mutation_query(ctx: Aa_mutation_queryContext?) {
9797
throw NotImplementedError("Amino acid mutations are not supported yet.")
9898
}
9999

100-
override fun enterAa_insertion(ctx: Aa_insertionContext?) {
100+
override fun enterAa_insertion_query(ctx: Aa_insertion_queryContext?) {
101101
throw NotImplementedError("Amino acid insertions are not supported yet.")
102102
}
103103

lapis2/src/test/kotlin/org/genspectrum/lapis/model/VariantQueryFacadeTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ class VariantQueryFacadeTest {
242242

243243
@Test
244244
fun `given a valid variantQuery with a 'AA insertion' expression the map should throw an error`() {
245-
val variantQuery = "ins_S:N501EPE"
245+
val variantQuery = "ins_S:501:EPE"
246246

247247
val exception = assertThrows<NotImplementedError> { underTest.map(variantQuery) }
248248

0 commit comments

Comments
 (0)