2014-01-11 07:11:47 +08:00
/*
* Copyright ( c ) 2013 , Roland Bock
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without modification ,
* are permitted provided that the following conditions are met :
*
* * Redistributions of source code must retain the above copyright notice ,
* this list of conditions and the following disclaimer .
* * Redistributions in binary form must reproduce the above copyright notice ,
* this list of conditions and the following disclaimer in the documentation
* and / or other materials provided with the distribution .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS IS " AND
* ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED .
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT ,
* INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING ,
* BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT ( INCLUDING NEGLIGENCE
* OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE .
*/
2014-01-29 03:53:22 +08:00
# include "Sample.h"
2014-01-11 07:11:47 +08:00
# include "MockDb.h"
2014-01-18 22:50:16 +08:00
# include <sqlpp11/alias_provider.h>
2014-01-14 06:05:48 +08:00
# include <sqlpp11/insert.h>
2014-01-15 15:24:42 +08:00
# include <sqlpp11/select.h>
2014-01-15 14:22:54 +08:00
# include <sqlpp11/update.h>
2014-01-15 15:24:42 +08:00
# include <sqlpp11/remove.h>
2014-01-14 04:00:20 +08:00
# include <sqlpp11/functions.h>
2014-01-11 07:11:47 +08:00
# include <iostream>
DbMock db = { } ;
2014-01-19 03:58:51 +08:00
DbMock : : _context_t printer ( std : : cerr ) ;
2014-01-18 22:50:16 +08:00
SQLPP_ALIAS_PROVIDER ( kaesekuchen ) ;
2014-01-11 07:11:47 +08:00
int main ( )
{
2014-01-29 03:53:22 +08:00
test : : TabFoo f ;
test : : TabBar t ;
2014-01-11 07:11:47 +08:00
2014-02-09 22:06:42 +08:00
interpret ( insert_into ( t ) . columns ( t . beta , t . gamma ) , printer ) . flush ( ) ;
2014-02-09 04:06:23 +08:00
{
auto i = insert_into ( t ) . columns ( t . gamma , t . beta ) ;
i . add_values ( t . gamma = true , t . beta = " cheesecake " ) ;
interpret ( i , printer ) . flush ( ) ;
i . add_values ( t . gamma = false , t . beta = sqlpp : : tvin ( " coffee " ) ) ;
i . add_values ( t . gamma = false , t . beta = sqlpp : : tvin ( std : : string ( ) ) ) ;
interpret ( i , printer ) . flush ( ) ;
i . add_values ( t . gamma = sqlpp : : default_value , t . beta = sqlpp : : null ) ;
interpret ( i , printer ) . flush ( ) ;
}
2014-01-26 22:09:30 +08:00
2014-01-26 05:38:16 +08:00
interpret ( t . alpha = sqlpp : : null , printer ) . flush ( ) ;
interpret ( t . alpha = sqlpp : : default_value , printer ) . flush ( ) ;
2014-01-12 04:51:57 +08:00
interpret ( t . alpha , printer ) . flush ( ) ;
2014-01-20 01:11:05 +08:00
interpret ( - t . alpha , printer ) . flush ( ) ;
interpret ( + t . alpha , printer ) . flush ( ) ;
interpret ( - ( t . alpha + 7 ) , printer ) . flush ( ) ;
2014-01-15 05:54:07 +08:00
interpret ( t . alpha = 0 , printer ) . flush ( ) ;
interpret ( t . alpha = sqlpp : : tvin ( 0 ) , printer ) . flush ( ) ;
interpret ( t . alpha = = 0 , printer ) . flush ( ) ;
interpret ( t . alpha = = sqlpp : : tvin ( 0 ) , printer ) . flush ( ) ;
interpret ( t . alpha ! = 0 , printer ) . flush ( ) ;
interpret ( t . gamma ! = sqlpp : : tvin ( false ) , printer ) . flush ( ) ;
2014-01-12 23:01:38 +08:00
interpret ( t . alpha = = 7 , printer ) . flush ( ) ;
2014-01-12 04:51:57 +08:00
interpret ( t . beta + " kaesekuchen " , printer ) . flush ( ) ;
2014-01-11 07:11:47 +08:00
2014-02-08 06:43:26 +08:00
interpret ( sqlpp : : select ( ) , printer ) . flush ( ) ;
interpret ( sqlpp : : select ( ) . flags ( sqlpp : : distinct ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . flags ( sqlpp : : distinct ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . from ( t ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . from ( t ) . where ( t . alpha = = 3 ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . from ( t ) . where ( t . alpha = = 3 ) . group_by ( t . gamma ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . from ( t ) . where ( t . alpha = = 3 ) . group_by ( t . gamma ) . having ( t . beta . like ( " %kuchen " ) ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . from ( t ) . where ( t . alpha = = 3 ) . group_by ( t . gamma ) . having ( t . beta . like ( " %kuchen " ) ) . order_by ( t . beta . asc ( ) ) , printer ) . flush ( ) ;
interpret ( select ( t . alpha , t . beta ) . from ( t ) . where ( t . alpha = = 3 ) . group_by ( t . gamma ) . having ( t . beta . like ( " %kuchen " ) ) . order_by ( t . beta . asc ( ) ) . limit ( 17 ) . offset ( 3 ) , printer ) . flush ( ) ;
2014-01-12 19:22:15 +08:00
2014-02-01 21:28:23 +08:00
interpret ( parameter ( sqlpp : : bigint ( ) , t . alpha ) , printer ) . flush ( ) ;
2014-01-14 04:00:20 +08:00
interpret ( parameter ( t . alpha ) , printer ) . flush ( ) ;
interpret ( t . alpha = = parameter ( t . alpha ) , printer ) . flush ( ) ;
2014-01-18 22:50:16 +08:00
interpret ( t . alpha = = parameter ( t . alpha ) and ( t . beta + " gimmick " ) . like ( parameter ( t . beta ) ) , printer ) . flush ( ) ;
2014-01-14 04:00:20 +08:00
2014-01-14 06:05:48 +08:00
interpret ( insert_into ( t ) , printer ) . flush ( ) ;
2014-01-23 05:53:23 +08:00
interpret ( insert_into ( f ) . default_values ( ) , printer ) . flush ( ) ;
2014-01-14 06:05:48 +08:00
interpret ( insert_into ( t ) . set ( t . gamma = true ) , printer ) . flush ( ) ;
2014-01-26 05:38:16 +08:00
//interpret(insert_into(t).set(t.gamma = sqlpp::tvin(false)), printer).flush(); cannot test this since gamma cannot be null and a static assert is thrown
2014-01-14 06:05:48 +08:00
2014-01-15 14:22:54 +08:00
interpret ( update ( t ) , printer ) . flush ( ) ;
interpret ( update ( t ) . set ( t . gamma = true ) , printer ) . flush ( ) ;
2014-01-15 14:38:53 +08:00
interpret ( update ( t ) . set ( t . gamma = true ) . where ( t . beta . in ( " kaesekuchen " , " cheesecake " ) ) , printer ) . flush ( ) ;
2014-01-15 14:22:54 +08:00
2014-01-15 15:24:42 +08:00
interpret ( remove_from ( t ) , printer ) . flush ( ) ;
2014-02-08 04:25:23 +08:00
interpret ( remove_from ( t ) . using_ ( t ) , printer ) . flush ( ) ;
2014-01-15 15:24:42 +08:00
interpret ( remove_from ( t ) . where ( t . alpha = = sqlpp : : tvin ( 0 ) ) , printer ) . flush ( ) ;
interpret ( remove_from ( t ) . using_ ( t ) . where ( t . alpha = = sqlpp : : tvin ( 0 ) ) , printer ) . flush ( ) ;
2014-01-16 02:42:14 +08:00
// functions
2014-01-18 22:50:16 +08:00
sqlpp : : interpret ( sqlpp : : value ( 7 ) , printer ) . flush ( ) ; // FIXME: Why is the namespace specifier required?
2014-01-16 02:42:14 +08:00
interpret ( sqlpp : : verbatim < sqlpp : : detail : : integral > ( " irgendwas integrales " ) , printer ) . flush ( ) ;
interpret ( sqlpp : : value_list ( std : : vector < int > ( { 1 , 2 , 3 , 4 , 5 , 6 , 8 } ) ) , printer ) . flush ( ) ;
interpret ( exists ( select ( t . alpha ) . from ( t ) ) , printer ) . flush ( ) ;
interpret ( any ( select ( t . alpha ) . from ( t ) ) , printer ) . flush ( ) ;
interpret ( some ( select ( t . alpha ) . from ( t ) ) , printer ) . flush ( ) ;
interpret ( count ( t . alpha ) , printer ) . flush ( ) ;
interpret ( min ( t . alpha ) , printer ) . flush ( ) ;
interpret ( max ( t . alpha ) , printer ) . flush ( ) ;
interpret ( avg ( t . alpha ) , printer ) . flush ( ) ;
interpret ( sum ( t . alpha ) , printer ) . flush ( ) ;
interpret ( sqlpp : : verbatim_table ( " whatever " ) , printer ) . flush ( ) ;
2014-01-17 16:56:35 +08:00
// alias
2014-01-16 02:42:14 +08:00
interpret ( t . as ( t . alpha ) , printer ) . flush ( ) ;
interpret ( t . as ( t . alpha ) . beta , printer ) . flush ( ) ;
2014-01-17 16:56:35 +08:00
// select alias
interpret ( select ( t . alpha ) . from ( t ) . where ( t . beta > " kaesekuchen " ) . as ( t . gamma ) , printer ) . flush ( ) ;
2014-01-17 05:31:43 +08:00
interpret ( t . alpha . is_null ( ) , printer ) . flush ( ) ;
2014-01-17 16:56:35 +08:00
// join
interpret ( t . inner_join ( t . as ( t . alpha ) ) . on ( t . beta = = t . as ( t . alpha ) . beta ) , printer ) . flush ( ) ;
// multi_column
interpret ( multi_column ( t . alpha , t . alpha , ( t . beta + " cake " ) . as ( t . gamma ) ) , printer ) . flush ( ) ;
2014-02-09 00:12:40 +08:00
interpret ( multi_column ( t , all_of ( t ) ) , printer ) . flush ( ) ;
2014-01-17 16:56:35 +08:00
// dynamic select
2014-02-08 23:29:21 +08:00
{
auto s = dynamic_select ( db ) . dynamic_flags ( ) . dynamic_columns ( ) ;
s . add_column ( t . beta ) ;
s . add_column ( t . gamma ) ;
interpret ( s , printer ) . flush ( ) ;
}
{
auto s = dynamic_select ( db ) . dynamic_flags ( ) . dynamic_columns ( ) ;
s . add_flag ( sqlpp : : distinct ) ;
s . add_column ( t . beta ) ;
s . add_column ( t . gamma ) ;
interpret ( s , printer ) . flush ( ) ;
}
{
auto s = dynamic_select ( db ) . dynamic_flags ( sqlpp : : distinct ) . dynamic_columns ( t . alpha ) ;
s . add_flag ( sqlpp : : all ) ;
s . add_column ( t . beta ) ;
s . add_column ( t . gamma ) ;
interpret ( s , printer ) . flush ( ) ;
}
2014-01-17 16:56:35 +08:00
2014-01-22 06:42:27 +08:00
// distinct aggregate
interpret ( count ( sqlpp : : distinct , t . alpha % 7 ) , printer ) . flush ( ) ;
2014-01-22 16:31:36 +08:00
interpret ( avg ( sqlpp : : distinct , t . alpha - 7 ) , printer ) . flush ( ) ;
interpret ( sum ( sqlpp : : distinct , t . alpha + 7 ) , printer ) . flush ( ) ;
2014-02-09 05:24:05 +08:00
2014-01-23 05:53:23 +08:00
interpret ( select ( all_of ( t ) ) . from ( t ) . where ( true ) , printer ) . flush ( ) ;
interpret ( select ( all_of ( t ) ) . from ( t ) . where ( false ) , printer ) . flush ( ) ;
2014-01-11 07:11:47 +08:00
return 0 ;
}