Re: [Wikitech-l] RFC SQL 'NOT IN' abstraction

2011-08-24 Thread Daniel Friesen
On 11-08-24 01:17 PM, Ashar Voultoiz wrote:
 Hello,

 During the Berlin hack-a-ton (which was an awesome event), I have added 
 a quick hack to MediaWiki which is correctly marked as fixme. The 
 revision I am requesting comments for is r87992:

 http://www.mediawiki.org/wiki/Special:Code/MediaWiki/87992

 Copy pasting the example from the commit message:

 Example:
 $db-makeList( array( 'field!' = array( 1,2,3 ) );
 outputs:
 'field' NOT IN ('1', '2', '3' );

 $db-makeList( array( 'foo!' = array( 777 ) ) );
 outputs:
 'foo' =! 777


 The exclamation mark is an easy mark to have the condition negated.

 Brion raised concerns: syntax is not obvious and lacking potentially 
 useful feature.  He recommends using full operators:

   'some_field IS NOT' = null,
   'some_value !=' = 23,
   'some_ts =' = $db-timestamp($cutoff),
   'some_ts ' = $db-timestamp($cutoff),

 Thus the proposed diff is:
   - 'field!'
   + 'field !='

 I would appreciate if developers can comment on this feature, either on 
 the mailing list or on the revision comment list.


 NB: please note the 'field!' feature has been used in the code since 
 there.  Might need to have to fix them if we change the code.
IMHO we are deeply in need of a way to abstract operators.

In various places in code we drop down to things like
'column_acolumn_b' which is treated as raw sql.

The biggest problem is !=. The != operator is actually a MySQLism and
not valid standard SQL. The standard way to do this in SQL is with .
While some engines like PostgreSQL and Sqlite implement != in addition
to  for compatibility with stuff written for MySQL, there are other DB
engines like CUBRID which rightfully consider != to be invalid and break.

Though the idea of supporting 'field op' is an interesting new take on
this idea, as long as we make sure that we explicitly say that it's only
the operator we support there, not raw sql just being dumped. So that we
have a way to support engines that use .

~Daniel Friesen (Dantman, Nadir-Seen-Fire) [http://daniel.friesen.name]


___
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l


Re: [Wikitech-l] RFC SQL 'NOT IN' abstraction

2011-08-24 Thread Platonides
Ashar Voultoiz wrote:
 Hello,

 During the Berlin hack-a-ton (which was an awesome event), I have added
 a quick hack to MediaWiki which is correctly marked as fixme. The
 revision I am requesting comments for is r87992:

 http://www.mediawiki.org/wiki/Special:Code/MediaWiki/87992

Interesting. I was unaware that it was new syntax when I made field! 
= null work in r90269.

The syntax field! is a bit odd, but 'field' = !array('foo', 'bar') 
wouldn't work ;)
I would just keep it in, instead of expending efforts reviewing the 7451 
revisions written since to look for usage of that extension.


___
Wikitech-l mailing list
Wikitech-l@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/wikitech-l