11use crate :: query:: querybuilder:: syntax:: column:: ColumnRef ;
2- use crate :: query:: querybuilder:: syntax:: emitter:: {
3- AsEmitBody , AsEmitFrom , AsEmitKind , AstProcessor , EmitBody , EmitFrom , EmitKind , ToSql ,
4- } ;
2+ use crate :: query:: querybuilder:: syntax:: emitter:: AstProcessor ;
53use crate :: query:: querybuilder:: syntax:: having:: HavingClause ;
64use crate :: query:: querybuilder:: syntax:: join:: JoinClause ;
75use crate :: query:: querybuilder:: syntax:: order:: OrderByClause ;
8- use crate :: query:: querybuilder:: syntax:: symbol:: Symbol ;
9- use crate :: query:: querybuilder:: syntax:: table_metadata:: TableMetadata ;
10- use crate :: query:: querybuilder:: syntax:: tokens:: { SqlToken , ToSqlTokens } ;
11- use std:: borrow:: Cow ;
6+ use crate :: query:: querybuilder:: syntax:: query_kind:: QueryKind ;
127
138#[ derive( Default ) ]
149pub struct SelectAst < ' a > {
@@ -35,61 +30,8 @@ impl<'a> SelectAst<'a> {
3530 }
3631}
3732
38- impl < ' a > ToSql < ' a > for SelectAst < ' a > { }
39-
40- impl < ' a > AstProcessor for SelectAst < ' a > { }
41-
42- impl < ' a > EmitKind < ' a > for SelectAst < ' a > {
43- fn emit_kind ( & self , out : & mut Vec < SqlToken < ' a > > ) {
44- out. push ( SqlToken :: Keyword ( Cow :: Borrowed ( "SELECT" ) ) ) ;
45- }
46- }
47-
48- impl < ' a > EmitFrom < ' a > for SelectAst < ' a > {
49- fn emit_from ( & self , meta : & TableMetadata < ' a > , out : & mut Vec < SqlToken < ' a > > ) {
50- // columns
51- if self . columns . is_empty ( ) {
52- out. push ( SqlToken :: Symbol ( Symbol :: Asterisk ) ) ;
53- } else {
54- for ( i, col) in self . columns . iter ( ) . enumerate ( ) {
55- if i > 0 {
56- out. push ( SqlToken :: Symbol ( Symbol :: Comma ) ) ;
57- }
58- col. to_tokens ( out) ;
59- }
60- }
61- // FROM
62- out. push ( SqlToken :: new_keyword ( "FROM" ) ) ;
63- meta. to_tokens ( out) ;
64- }
65- }
66- impl < ' a > EmitBody < ' a > for SelectAst < ' a > {
67- fn emit_body ( & self , out : & mut Vec < SqlToken < ' a > > ) {
68- for j in & self . joins {
69- j. to_tokens ( out)
70- }
71- for c in & self . _inner . conditions {
72- c. accept ( self ) ;
73- }
74- }
75- }
76-
77- // tell the system that SelectAst supports these phases:
78- impl < ' a > AsEmitKind < ' a > for SelectAst < ' a > {
79- fn as_emit_kind ( & self ) -> Option < & dyn EmitKind < ' a > > {
80- Some ( self as & dyn EmitKind < ' a > )
81- }
82- }
83- impl < ' a > AsEmitFrom < ' a > for SelectAst < ' a > {
84- fn as_emit_from ( & self ) -> Option < & dyn EmitFrom < ' a > > {
85- Some ( self as & dyn EmitFrom < ' a > )
86- }
87- }
88- impl < ' a > AsEmitBody < ' a > for SelectAst < ' a > {
89- fn as_emit_body ( & self ) -> Option < & dyn EmitBody < ' a > > {
90- Some ( self as & dyn EmitBody < ' a > )
33+ impl < ' a > AstProcessor for SelectAst < ' a > {
34+ fn query_kind ( & self ) -> QueryKind {
35+ QueryKind :: Select
9136 }
9237}
93- // impl<'a> AsEmitConditions<'a> for SelectAst<'a> {
94- // fn as_emit_conditions(&self) -> Option<&dyn EmitConditions<'a>> { Some(self as &dyn EmitConditions<'a>) }
95- // }
0 commit comments