From 3c432f5e072ab158405acdfbe4951b1528f67df1 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Thu, 2 Jul 2020 23:37:24 +0300 Subject: [PATCH] orm: require `order by` instead of just `order` --- vlib/orm/orm_test.v | 4 ++-- vlib/v/parser/sql.v | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/vlib/orm/orm_test.v b/vlib/orm/orm_test.v index 88f685cc38..bc3a485858 100644 --- a/vlib/orm/orm_test.v +++ b/vlib/orm/orm_test.v @@ -199,14 +199,14 @@ fn test_orm_sqlite() { assert z[0].id == 3 oldest := sql db { - select from User order age desc limit 1 + select from User order by age desc limit 1 } assert oldest.age == 34 offs := 1 second_oldest := sql db { - select from User order age desc limit 1 offset offs + select from User order by age desc limit 1 offset offs } assert second_oldest.age == 31 } diff --git a/vlib/v/parser/sql.v b/vlib/v/parser/sql.v index c71c258b9c..0c9956bca5 100644 --- a/vlib/v/parser/sql.v +++ b/vlib/v/parser/sql.v @@ -47,6 +47,12 @@ fn (mut p Parser) sql_expr() ast.Expr { mut has_desc := false if p.tok.kind == .name && p.tok.lit == 'order' { p.check_name() // `order` + order_pos := p.tok.position() + if p.tok.kind == .name && p.tok.lit == 'by' { + p.check_name() // `by` + } else { + p.error_with_pos('use `order by` in ORM queries', order_pos) + } has_order = true order_expr = p.expr(0) if p.tok.kind == .name && p.tok.lit == 'desc' {