Skip to content

Commit 4c8ef65

Browse files
author
Kirill
committed
!= operator
1 parent 7afc41a commit 4c8ef65

File tree

4 files changed

+34
-1
lines changed

4 files changed

+34
-1
lines changed

include/sql/tok.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ using fe::Sym;
3232
m(T_g, ">") \
3333
m(T_le, "<=") \
3434
m(T_ge, ">=") \
35+
m(T_ue, "!=") \
3536
m(T_dot, ".") \
3637
m(T_colon, ":") \
3738
m(T_comma, ",") \

src/sql/lexer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ Tok Lexer::lex() {
4242
if (accept('=')) return {loc_, Tok::Tag::T_le};
4343
return {loc_, Tok::Tag::T_l};
4444
}
45+
if (accept('!')){
46+
if(accept('=')) return{loc_, Tok::Tag::T_ue};
47+
driver_.err({loc_.path, peek_}, "invalid input following '!': '{}'", (char)ahead());
48+
}
4549
if (accept('>')) {
4650
if (accept('=')) return {loc_, Tok::Tag::T_ge};
4751
return {loc_, Tok::Tag::T_g};

src/sql/tok.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ std::optional<Tok::Prec> Tok::bin_prec(Tok::Tag tag) {
4040
case Tok::Tag::K_IS:
4141
case Tok::Tag::T_eq:
4242
case Tok::Tag::T_ne:
43+
case Tok::Tag::T_ue:
4344
case Tok::Tag::T_l:
4445
case Tok::Tag::T_le:
4546
case Tok::Tag::T_g:

test/select.sql

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,28 @@
1-
SELECT MIN(n.name) AS cast_member_name, MIN(pi.info) AS cast_member_info FROM aka_name AS an, cast_info AS ci, info_type AS it, link_type AS lt, movie_link AS ml, name AS n, person_info AS pi, title AS t WHERE an.name is not NULL and (an.name LIKE '%a%' or an.name LIKE 'A%') AND it.info ='mini biography' AND lt.link in ('references', 'referenced in', 'features', 'featured in') AND n.name_pcode_cf BETWEEN 'A' AND 'F' AND (n.gender='m' OR (n.gender = 'f' AND n.name LIKE 'A%')) AND pi.note is not NULL AND t.production_year BETWEEN 1980 AND 2010 AND n.id = an.person_id AND n.id = pi.person_id AND ci.person_id = n.id AND t.id = ci.movie_id AND ml.linked_movie_id = t.id AND lt.id = ml.link_type_id AND it.id = pi.info_type_id AND pi.person_id = an.person_id AND pi.person_id = ci.person_id AND an.person_id = ci.person_id AND ci.movie_id = ml.linked_movie_id;
1+
SELECT MIN(cn.name) AS from_company,
2+
MIN(lt.link) AS movie_link_type,
3+
MIN(t.title) AS non_polish_sequel_movie
4+
FROM company_name AS cn,
5+
company_type AS ct,
6+
keyword AS k,
7+
link_type AS lt,
8+
movie_companies AS mc,
9+
movie_keyword AS mk,
10+
movie_link AS ml,
11+
title AS t
12+
WHERE cn.country_code !='[pl]' AND
13+
(cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%') AND
14+
ct.kind ='production companies' AND
15+
k.keyword ='sequel' AND
16+
lt.link LIKE '%follow%' AND
17+
mc.note IS NULL AND
18+
t.production_year BETWEEN 1950 AND 2000 AND
19+
lt.id = ml.link_type_id AND
20+
ml.movie_id = t.id AND
21+
t.id = mk.movie_id AND
22+
mk.keyword_id = k.id
23+
AND t.id = mc.movie_id
24+
AND mc.company_type_id = ct.id
25+
AND mc.company_id = cn.id
26+
AND ml.movie_id = mk.movie_id
27+
AND ml.movie_id = mc.movie_id
28+
AND mk.movie_id = mc.movie_id;

0 commit comments

Comments
 (0)