On Fri, Oct 30, 2015 at 1:02 PM, Adrian Klaver <adrian.kla...@aklaver.com>
wrote:

> On 10/30/2015 09:55 AM, Dane Foster wrote:
>
>> On Fri, Oct 30, 2015 at 12:52 PM, Adrian Klaver
>> <adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>> wrote:
>>
>>     On 10/30/2015 09:36 AM, Dane Foster wrote:
>>
>>         On Fri, Oct 30, 2015 at 12:26 PM, Adrian Klaver
>>         <adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>
>>         <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>> wrote:
>>
>>              On 10/30/2015 08:13 AM, Dane Foster wrote:
>>
>>
>>                  On Fri, Oct 30, 2015 at 10:57 AM, Adrian Klaver
>>                  <adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>         <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>>> wrote:
>>
>>                       On 10/30/2015 07:21 AM, Dane Foster wrote:
>>
>>
>>                           On Fri, Oct 30, 2015 at 9:40 AM, Adrian Klaver
>>                           <adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>>
>>                           <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>
>>                           <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>>>> wrote:
>>
>>                                On 10/29/2015 05:38 PM, Dane Foster wrote:
>>
>>                                    Hello,
>>
>>                                    I think I've tripped over another
>>         mysq_fdw
>>                  bug. I've
>>                           filed a bug
>>                                    report
>>                                    on github already but just in case
>>         the problem
>>                  is w/ my
>>                           query I
>>                                    figured
>>                                    I would post it here in case someone
>> sees
>>                  something
>>                           obvious.
>>
>>                                    The error message I get is: null
>>         value in column
>>                           "location" violates
>>                                    not-null constraint.
>>
>>                                    The DDL is here:
>>         https://github.com/EnterpriseDB/mysql_fdw/issues/71
>>
>>                                    For the record I know top posting is
>>         a crime
>>                  against
>>                           god and
>>                                    humanity
>>                                    but I feel justified because this
>>         post is not
>>                  directly
>>                           related
>>                                    to the
>>                                    original. So there!  Granted it's in
>>         the same
>>                  milieu;
>>                           and yes this
>>                                    current sentence exists for the sole
>>         purpose of me
>>                           being able to
>>                                    use the
>>                                    word milieu because the opportunity
>>         to use it
>>                  is so few
>>                           and far
>>                                    between.
>>
>>                                    ​INSERT INTO series (cid, day, title,
>>         description,
>>                           location,
>>                                    duration,
>>                                    can_join)
>>                                        SELECT
>>                                          cid,
>>                                          row_number() OVER (PARTITION BY
>>         cid ORDER BY
>>                           lower(duration)),
>>                                          title,
>>                                          description,
>>                                          location,
>>                                          duration,
>>                                          can_join
>>                                        FROM (
>>                                          SELECT
>>                                            cid,
>>                                            title,
>>                                            description,
>>                                            can_join::BOOLEAN,
>>                                            (SELECT label FROM _locations
>>         WHERE
>>                           loc=location) AS
>>                                    location,
>>                                            ('[' || starts || ', ' ||
>>         (starts +
>>                  INTERVAL '4
>>                           HOUR') ||
>>                                    ']')::TSZ_PERIOD AS duration
>>                                          FROM
>>                                            _series
>>                                        ) AS v​
>>
>>                                    ​Regards,​
>>
>>
>>                                So what do you get when you do?:
>>
>>                                SELECT
>>                                       cid,
>>                                       title,
>>                                       description,
>>                                       can_join::BOOLEAN,
>>                                       (SELECT label FROM _locations WHERE
>>                  loc=location) AS
>>                           location,
>>                                       ('[' || starts || ', ' || (starts
>>         + INTERVAL '4
>>                           HOUR') ||
>>                                ']')::TSTZRANGE AS duration
>>                                     FROM
>>                                       _series
>>                                   );
>>
>>
>>                                    Dane
>>
>>
>>
>>
>>                                --
>>                                Adrian Klaver
>>         adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>
>>         <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>>
>>                           <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>
>>                           <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>>>
>>
>>                           ​
>>                           I get rows of data, location and all.
>>
>>
>>                       And when you do?:
>>
>>                       SELECT
>>                            cid,
>>                            row_number() OVER (PARTITION BY cid ORDER BY
>>                  lower(duration)),
>>                            title,
>>                            description,
>>                            location,
>>                            duration,
>>                            can_join
>>                          FROM (
>>                            SELECT
>>                              cid,
>>                              title,
>>                              description,
>>                              can_join::BOOLEAN,
>>                              (SELECT label FROM _locations WHERE
>>         loc=location) AS
>>                  location,
>>                              ('[' || starts || ', ' || (starts + INTERVAL
>> '4
>>                  HOUR') ||
>>                       ']')::TSTZRANGE AS duration
>>                            FROM
>>                              _series
>>                          ) AS v
>>
>>
>>
>>                           Dane
>>                           ​
>>
>>
>>
>>                       --
>>                       Adrian Klaver
>>         adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>
>>         <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>
>>
>>                  <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>>
>>
>>
>>                  ​Before I answer your second query question I need to
>>         revise my
>>                  response
>>                  to the first. Yes the first query runs w/o an error
>>         message but
>>                  the bit
>>                  about "rows and all" was not entirely correct. Out of
>>         313 rows
>>                  only the
>>                  first row had a location. The other 312 rows have NULL
>>         in the
>>                  location
>>                  column which is not supposed to happen. To verify this
>>         I changed the
>>                  table names and removed the PostgreSQL transformations
>>         (i.e.,
>>                  use of ||
>>                  and :: for casting) and ran the query against the MySQL
>>         database; it
>>                  returned 313 rows of data, location and all.
>>
>>
>>              You would think that would also cause an issue with the
>>         first row
>>              that is returned correctly. My suspicion is with this:
>>
>>              row_number() OVER (PARTITION BY cid ORDER BY lower(duration))
>>
>>              What happens if you run the full SELECT without it?
>>
>>
>>
>>
>>                  Now that I've cleared that up.
>>
>>                  Your second query also runs w/o any error messages but
>>         like the
>>                  first
>>                  only the first row has a non NULL value in the location
>>         column.
>>
>>
>>
>>                  Dane
>>                  ​
>>
>>
>>
>>              --
>>              Adrian Klaver
>>         adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>
>>         <mailto:adrian.kla...@aklaver.com
>>         <mailto:adrian.kla...@aklaver.com>>
>>
>>         ​
>>         Your first query didn't use it and as discussed rows come back
>>         but only
>>         the first row has a non NULL location column.
>>
>>
>>     Forgot about that. Where I was going with this is that duration
>>     comes from:
>>
>>     ('[' || starts || ', ' || (starts + INTERVAL '4 HOUR') ||
>>     ']')::TSTZRANGE AS duration
>>
>>     and MySQL and Postgres have different ideas about timestamps. While
>>     I thinking about what that meant in the context of the query I
>>     realized I was stepping over the obvious:
>>
>>     SELECT label FROM _locations WHERE loc=location
>>
>>     So what does the below show:
>>
>>     SELECT label FROM _locations, _series WHERE loc=location;
>>
>>
>>
>>         Dane
>>         ​
>>
>>
>>
>>     --
>>     Adrian Klaver
>>     adrian.kla...@aklaver.com <mailto:adrian.kla...@aklaver.com>
>>
>> ​
>> It returns all the locations.
>>
>
> You know where we are going:
>
> SELECT label, starts, ('[' || starts || ', ' || (starts + INTERVAL '4
> HOUR') || ']')::TSTZRANGE AS duration FROM _locations, _series WHERE
> loc=location;
>
>
>
>
>> Dane
>> ​
>>
>>
>
> --
> Adrian Klaver
> adrian.kla...@aklaver.com
>

Converting my query to its JOIN equivalent did indeed do the trick. O the
joys of relational algebra and calculus.

Well played Sir (or Madam) ! And thanks.

Dane

P.S. Now if only you can fix the trim/btrim problem then I'll be happy ...
until I find something new to complain about.
​

Reply via email to