Hi Massimo, thank you very much for this detailed explanation.

*About the "boolean query":*
You are right (of course :-)), that a query like
(db.mytable.field>'C') & b
with b as a boolean expression is not mentioned in the manual.
But I think it is not forbidden in SQL and it coulld be useful.

What I want is to switch on or off some parts of a query. A simplified
example:
q = ((db.table.field1>1)&boolean1) | ((db.table.field2>1)&boolean2) ...

This would also work:
if boolean1:
    q |= db.table.field1 > 1
if boolean2:
    q |= db.table.field2 > 1
....
Maybe this would be a better solution and it does not need  a "&
boolean1"...
But I need an inital value for q and now I have the same problem: I need a
q = False
at the beginning. What shall I do? Use a silly query like db.table.id==0
which would be always false?

Or is there another solution without these problems?

Therefore: maybe it would be possible to add two querys, one giving always
False, the other True?



*About groupby:*
sqlite does not like "distinct" (lines 1 and 3), but groupby works now as
expected (line 6). sqlite and postgres are now compatible to each other
(lines 2 and 6).
 Testtables  # Datebase Command Result 0sqlitedb(db.mytable.id>0).select(
orderby=db.mytable.field2, groupby=db.mytable.field2)mytable.id
mytable.field1mytable.field22Bx5Ey 1sqlitedb(db.mytable.id>0).select(
orderby=db.mytable.field2, distinct=db.mytable.field2)near "ON": syntax
error 2sqlitedb(db.mytable.id>0).select(db.mytable.field2,
orderby=db.mytable.field2, groupby=db.mytable.field2)mytable.field2xy 3
sqlitedb(db.mytable.id>0).select(db.mytable.field2,
orderby=db.mytable.field2, distinct=db.mytable.field2)near "ON": syntax
error 4postgresdb(db.mytable.id>0).select( orderby=db.mytable.field2,
groupby=db.mytable.field2)column "mytable.id" must appear in the GROUP BY
clause or be used in an aggregate function LINE 1: SELECT mytable.id,
mytable.field1, mytable.field2 FROM myta... ^
5postgresdb(db.mytable.id>0).select(
orderby=db.mytable.field2, distinct=db.mytable.field2)mytable.id
mytable.field1mytable.field21Ax3Cy
6postgresdb(db.mytable.id>0).select(db.mytable.field2,
orderby=db.mytable.field2, groupby=db.mytable.field2)mytable.field2xy 7
postgresdb(db.mytable.id>0).select(db.mytable.field2,
orderby=db.mytable.field2, distinct=db.mytable.field2)mytable.field2xy


2015-01-03 14:03 GMT+01:00 Massimo Di Pierro <massimo.dipie...@gmail.com>:

> These are not valid DAL expressions:
>
> db((db.mytable.field1>'C') & 1).select()
> db((db.mytable.field1>'C') & (1==1)).select()
> db((db.mytable.field1>'C') & 'True').select()
> db((db.mytable.field1>'C') & 'TRUE').select()
>
> the argument of db(....) must be a query or a logical expression comprised
> of queries. 1, True, 'True', 'TRUE' are not queries. The fact that
> occasionally you do not get an error is purely accidental. You should not
> use these expressions. Nowhere in the manual we say this is allowed. Future
> versions of web2py may check (and should) and will block them.
>
> In the other case the problem is that the query should be:
>
> db(db.mytable.id>0).select(db.mytable.field2, orderby=db.mytable.field2,
> groupby=db.mytable.field2)
>
> and it should work in both cases.
>
> If you do not specify that you are selecting only field2, they you are
> selecting all fields and the query becomes ambiguous (which id should be
> used for the grouped records?). Sqlite does not care and returns a random
> one. postgresql checks and complains. Apparently this was solved in SQL3
> but most engines do not follow SQL3.
>
>
> http://stackoverflow.com/questions/19601948/must-appear-in-the-group-by-clause-or-be-used-in-an-aggregate-function
>
> The standard SQL distinct syntax (in DAL:
> db(...).select(...,distinct=True)) does not solve this problem. So the
> postgresql folks introduced DISTINCT ON (in DAL: db(...).select(...,
> distinct=field)) but this is a postgresql specific API.
>
>
> http://www.postgresqlforbeginners.com/2010/11/sql-distinct-distinct-on-and-all.html
>
> Massimo
>
>
>
> On Saturday, 3 January 2015 04:42:14 UTC-6, mweissen wrote:
>>
>> In the last hour I have written a small application which tests (1) the
>> boolean expressions and (2) distinct/groupby. You can find this app as
>> attach file.
>>
>> (1) sqlite allows True or 1 or '1' as boolean expression, postgres works
>> only with "TRUE" or 'TRUE'
>>
>> (2) sqlite does not understand distinct and postgres need some complex
>> orderby.
>>
>>
>>  Testtables  Datebase Command Result sqlitedb((db.mytable.field1>'C') &
>> (1==1)).select()mytable.idmytable.field1mytable.field24Dy5Ey 
>> sqlitedb((db.mytable.field1>'C')
>> & True).select()mytable.idmytable.field1mytable.field24Dy5Ey 
>> sqlitedb((db.mytable.field1>'C')
>> & 1).select()mytable.idmytable.field1mytable.field24Dy5Ey 
>> sqlitedb((db.mytable.field1>'C')
>> & '1').select()mytable.idmytable.field1mytable.field24Dy5Ey 
>> sqlitedb((db.mytable.field1>'C')
>> & 'TRUE').select()no such column: TRUE sqlitedb((db.mytable.field1>'C')
>> & "TRUE").select()no such column: TRUE postgresdb((db.mytable.field1>'C')
>> & (1==1)).select()argument of AND must be type boolean, not type integer
>> LINE 1: ...le.field2 FROM mytable WHERE ((mytable.field1 > 'C') AND 1); ^
>> postgresdb((db.mytable.field1>'C') & True).select()argument of AND must
>> be type boolean, not type integer LINE 1: ...le.field2 FROM mytable WHERE
>> ((mytable.field1 > 'C') AND 1); ^ postgresdb((db.mytable.field1>'C') &
>> 1).select()argument of AND must be type boolean, not type integer LINE
>> 1: ...le.field2 FROM mytable WHERE ((mytable.field1 > 'C') AND 1); ^
>> postgresdb((db.mytable.field1>'C') & '1').select()argument of AND must
>> be type boolean, not type integer LINE 1: ...le.field2 FROM mytable WHERE
>> ((mytable.field1 > 'C') AND 1); ^ postgresdb((db.mytable.field1>'C') &
>> 'TRUE').select()mytable.idmytable.field1mytable.field24Dy5Ey 
>> postgresdb((db.mytable.field1>'C')
>> & "TRUE").select()mytable.idmytable.field1mytable.field24Dy5Ey sqlitedb(
>> db.mytable.id>0).select(orderby=db.mytable.field2,
>> groupby=db.mytable.field2)mytable.idmytable.field1mytable.field22Bx5Ey
>> sqlitedb(db.mytable.id>0).select(orderby=db.mytable.field2,
>> distinct=db.mytable.field2)near "ON": syntax error postgresdb(
>> db.mytable.id>0).select(orderby=db.mytable.field2,
>> groupby=db.mytable.field2)column "mytable.id" must appear in the GROUP
>> BY clause or be used in an aggregate function LINE 1: SELECT mytable.id,
>> mytable.field1, mytable.field2 FROM myta... ^ postgresdb(db.mytable.id
>> >0).select(orderby=db.mytable.field2, distinct=db.mytable.field2)
>> mytable.idmytable.field1mytable.field21Ax3Cy
>>
>>
>> 2015-01-03 10:47 GMT+01:00 Marin Pranjić <marin.pran...@gmail.com>:
>>
>>> The latter one works only with postgres:
>>> https://groups.google.com/forum/#!topic/web2py/1_DHUrrg6O8
>>>
>>> What's the error message?
>>>
>>> On Sat, Jan 3, 2015 at 5:30 AM, Massimo Di Pierro <
>>> massimo.dipie...@gmail.com> wrote:
>>>
>>>>
>>>>
>>>> On Friday, 2 January 2015 16:03:16 UTC-6, mweissen wrote:
>>>>>
>>>>> I have tried to convert an application from SQLite to Postgresql and I
>>>>> have found two differences:
>>>>>
>>>>> (1):
>>>>> q = some query like db.table.field<3
>>>>> b = some boolean like a<3
>>>>> db(q & b)
>>>>>
>>>>> SQLite needs to convert b to '0' or '1', Postgresql to 'FALSE' or
>>>>> 'TRUE'
>>>>>
>>>>
>>>> yes but web2py does it for you. you should not need to change your code.
>>>>
>>>>
>>>>>
>>>>> (2): orderby generates some difficult error messages. I have found the
>>>>> following solution
>>>>> SQLite
>>>>> db(db.table.field==x).select(orderby=db.table.field2,
>>>>> groupby=db.table.field2)
>>>>>
>>>>> Postgresql:
>>>>> db(db.table.field==x).select(orderby=db.table.field2,
>>>>> distinct=db.table.field2)
>>>>>
>>>>
>>>> Are you sure? I think they both work on both databases. The problems
>>>> arise when you groupby some fields and records are not sorted by those
>>>> fields. Some engines allow it and some don't.
>>>>
>>>>
>>>>> Does somebody has similar experiences?
>>>>>
>>>>> Regards, Martin
>>>>>
>>>>>
>>>>> 2015-01-02 16:29 GMT+01:00 Michele Comitini <
>>>>> michele.comit...@gmail.com>:
>>>>>
>>>>>> SQLite is by design an excellent embedded database,  better suited
>>>>>> for single user implementation and targeted at small datasets.
>>>>>> For larger datasets there is no reason not to use PostgreSQL, it's
>>>>>> free, well supported by web2py,
>>>>>> handles very large datasets and it's easy to setup.
>>>>>>
>>>>>> Migration from SQLite to any other db supported by web2py is very
>>>>>> easy and explained on the web2py book
>>>>>>
>>>>>> 2015-01-02 6:49 GMT+01:00 Eric Taw <tawe...@gmail.com>:
>>>>>>
>>>>>>> From reading a lot of web2py tutorials and guides, they always say
>>>>>>> SQLite is good for small implementations of databases, whereas other SQL
>>>>>>> flavors are better suited for larger uses. Is there any reason why? Can 
>>>>>>> I
>>>>>>> still use SQLite if I have a lot of information to store?
>>>>>>> --
>>>>>>> Resources:
>>>>>>> - http://web2py.com
>>>>>>> - http://web2py.com/book (Documentation)
>>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "web2py-users" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to web2py+unsubscr...@googlegroups.com.
>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Resources:
>>>>>> - http://web2py.com
>>>>>> - http://web2py.com/book (Documentation)
>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "web2py-users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to web2py+unsubscr...@googlegroups.com.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>>  --
>>>> Resources:
>>>> - http://web2py.com
>>>> - http://web2py.com/book (Documentation)
>>>> - http://github.com/web2py/web2py (Source code)
>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "web2py-users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to web2py+unsubscr...@googlegroups.com.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to