[Ur] checking for equality between optional and non-optional values in queries

Adam Chlipala adamc at csail.mit.edu
Sun Jul 19 14:37:53 EDT 2015


On 07/19/2015 02:07 PM, Todd Roth wrote:
> Thank you!  The SQL function was the missing piece.  I had tried sql_nullable without the SQL call but was getting an “Unbound structure” error.

Yeah, the [SQL] below isn't a call.  It's more of a syntax macro built 
into the compiler frontend, which causes a span of code to be parsed as 
an SQL expression, rather than an Ur expression.  The same effect could 
be achieved more verbosely with calls to the underlying combinators.

>> On Jul 19, 2015, at 9:40 AM, Adam Chlipala <adamc at csail.mit.edu> wrote:
>>
>> On 07/19/2015 07:20 AM, Todd Roth wrote:
>>> Another newbie question… How do you check for equality between optional and non-optional columns in different tables when doing join queries?  The following exampleQ query does not compile.  I get the errors shown in [1]
>>>
>>>
>>> table table2 : { Id : int, SomeVal : string}
>>> 	       PRIMARY KEY Id
>>>
>>> table table1 : { Id : int, Table2Val : option int }
>>> 	       PRIMARY KEY Id,
>>> 	       CONSTRAINT Table2Val FOREIGN KEY Table2Val REFERENCES table2(Id)
>>> 	
>>> fun exampleQ () = queryL (SELECT * FROM table1 LEFT JOIN table2 ON table1.Table2Val = table2.Id)
>> Here's the simple fix:
>>
>> fun exampleQ () = queryL (SELECT * FROM table1 LEFT JOIN table2
>>                                      ON table1.Table2Val = {sql_nullable (SQL table2.Id)})
>>



More information about the Ur mailing list