A very instructive post, could you give your opinion about what should be the
behavior for the "WHERE" clause ?  

I meam if we have a function on the field definition and reference it on the
"WHERE" clause:  

CREATE TABLE myTable (a INTEGER);  

INSERT INTO myTable VALUES (1),(2),(3),(4),(5);  

CREATE VIEW myView AS SELECT a,random()%100 AS rr FROM myTable;  

SELECT rr FROM myView WHERE rr < 30 ORDER BY rr;  

?  

Cheers !  
>  Thu Aug 27 2015 3:03:21 am CEST CEST from "James K. Lowden"
><jklowden at schemamania.org>  Subject: Re: [sqlite] order by not working in
>combination with random()
>
>  On Wed, 26 Aug 2015 13:39:09 +0100
> Simon Slavin <slavins at bigfraud.org> wrote:
> 
> 
>  
>>On 26 Aug 2015, at 11:27am, tonyp at acm.org wrote:
>> 
>>  
>>>Plus, it apparently recognizes if the random() expression in the
>>> ORDER BY is the same as the SELECT one and again sort correctly
>>> (without re-evaluating) and without needing an alias.
>>> 

>>  Ah, but I would call /that/ a bug !
>> 

>  I think I can convince you Postgres is right and SQLite is not. :-)
> I'll give you 4 reasons:
> 
> 1. Theory
> 2. Authority
> 3. Atomicity
> 4. Consistency
> 
> Theory. Like the relation of relational algebra, a SQL table has no
> order. (Not only tables, but any table-like thing: view, CTE,
> subquery.) If you take a table and permute its order, it's still the
> same table. ORDER BY permutes the order in a particular way. It does
> not change the table. Relationally, the input and output of ORDER BY
> must be identical. 
> 
> Authority. As a matter of fact, CJ Date says the output of ORDER BY is
> *not* a table, but a cursor. That makes sense, and also explains why
> ORDER BY can, according to the SQL standard, appear only once in a
> query, and only at the end. You could think of ORDER BY not as a sort
> operator but as a row-returning operator that magically returns the
> "next" row per a specification. 
> 
> The SQL-92 standard distinqushes between the SELECT statement with
> all its many clauses, and ORDER BY:
> 
> """
> Format
> 
> <direct select statement: multiple rows> ::=
> <query expression> [ <order by clause> ]
> """
> 
> SQLite would do well to adopt this notion in its query processor. It
> would simplify the system, and would have avoided this error. 
> 
> Atomicity. The rule in SQL is that all functions act *as if* they were
> invoked only once. We had this confusion some time back with 
> "date(now)". There's only one "now" in a query, and there's only one
> random() in a row-column. 
> 
> The column-specification of SELECT is applied *once* to each row. The
> column-specification of ORDER BY (and GROUP BY) is *not* applied; it
> merely *designates* the column by using the same specification text.
> Consider this example:
> 
> sqlite> select 2+2 order by '2+2';
> 2+2 
> ----------
> 4 
> 
> '2+2' here is only the column name. It's not an instruction to create
> data. 
> 
> Consistency. Any two semantically equivalent queries that produce
> different outputs from the same input constitute prima facia evidence
> of a bug. However you restate a query, if it is logically equivalent,
> it should produce the same results. The fact that you can rejigger
> queries with RANDOM() and get different answers tells you immediately
> that something is wrong. 
> 
> It's sometimes useful to think about how a DBMS works, and imagine
> traversing trees, sorting, etc. It helps in understanding how to
> express a query, and in how it will be processed. But you have to
> throw all that away when thinking about query semantics. The user has
> *one* chance only to state the query; he has no control over how its
> executed. As he is constrained, so is the system: it cannot let
> implementation details affect query semantics. That's the way it is
> and should be, because it best serves the interests of both parties. 
> 
> --jkl
> _______________________________________________
> sqlite-users mailing list
> sqlite-users at mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
> 
>
>  



?

Reply via email to