From 5e1ec15caaf28271fa68bb3a0dad69c91124ff0f Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Sat, 29 Jun 2019 17:36:33 +0200 Subject: [PATCH] Resolve types for between expression --- sqlparser/lib/src/analysis/types/resolver.dart | 6 +++++- sqlparser/test/analysis/type_resolver_test.dart | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/sqlparser/lib/src/analysis/types/resolver.dart b/sqlparser/lib/src/analysis/types/resolver.dart index eccefdfc..d8a13898 100644 --- a/sqlparser/lib/src/analysis/types/resolver.dart +++ b/sqlparser/lib/src/analysis/types/resolver.dart @@ -89,6 +89,8 @@ class TypeResolver { [BasicType.int, BasicType.real, BasicType.text, BasicType.blob]); return ResolveResult(type); } + } else if (expr is BetweenExpression) { + return const ResolveResult(ResolvedType.bool()); } else if (expr is SubQuery) { // todo } @@ -243,7 +245,9 @@ class TypeResolver { } ResolveResult _argumentType(Expression parent, Expression argument) { - if (parent is IsExpression || parent is BinaryExpression) { + if (parent is IsExpression || + parent is BinaryExpression || + parent is BetweenExpression) { final relevant = parent.childNodes .lastWhere((node) => node is Expression && node != argument); return resolveExpression(relevant as Expression); diff --git a/sqlparser/test/analysis/type_resolver_test.dart b/sqlparser/test/analysis/type_resolver_test.dart index 9916ba40..477dd27b 100644 --- a/sqlparser/test/analysis/type_resolver_test.dart +++ b/sqlparser/test/analysis/type_resolver_test.dart @@ -12,6 +12,8 @@ Map _types = { const ResolveResult(ResolvedType(type: BasicType.int)), 'SELECT 1 FROM demo GROUP BY id HAVING COUNT(*) = ?': const ResolveResult(ResolvedType(type: BasicType.int)), + 'SELECT 1 FROM demo WHERE id BETWEEN 3 AND ?': + const ResolveResult(ResolvedType(type: BasicType.int)), }; void main() {