Thread

Commits

  1. Make construct_[md_]array return a valid empty array for zero-size input.

  1. BUG #14826: Malformed array dimensions for empty arrays in return column "lexemes" of ts_debug()

    Erwin Brandstetter <brsaweda@gmail.com> — 2017-09-23T12:57:23Z

    The following bug has been logged on the website:
    
    Bug reference:      14826
    Logged by:          Erwin Brandstetter
    Email address:      brsaweda@gmail.com
    PostgreSQL version: 9.6.5
    Operating system:   any
    Description:        
    
    Empty strings in this column seem to be "out of this world" - comparison to
    '{}'::text[] returns FALSE:
    
    test=# SELECT token, lexemes, lexemes = '{}'::text[]
    test-# FROM   ts_debug('a title');
     token | lexemes | ?column?
    -------+---------+----------
     a     | {}      | f
           |         |
     title | {titl}  | f
    
    The root of the problem seems to be malformed array dimensions.
    array_dims(lexemes) returns [1:0], while I would expect NULL:
    
    test=# SELECT token, dictionaries, lexemes
    test-#      , array_dims(lexemes) AS lex_dims
    test-#      , array_dims(dictionaries) AS dict_dims
    test-# FROM   ts_debug('a title');
     token |  dictionaries  | lexemes | lex_dims | dict_dims
    -------+----------------+---------+----------+-----------
     a     | {english_stem} | {}      | [1:0]    | [1:1]
           | {}             |         |          |
     title | {english_stem} | {titl}  | [1:1]    | [1:1]
    
    I tested in versions 8.4 to 10 Beta, always the same result.
    
    Related question on dba.stackexchange:
    https://dba.stackexchange.com/questions/186715/how-do-i-select-arrays-that-are-not-empty
    
    
    Regards
    Erwin Brandstetter
    
    
    
  2. Re: BUG #14826: Malformed array dimensions for empty arrays in return column "lexemes" of ts_debug()

    Tom Lane <tgl@sss.pgh.pa.us> — 2017-09-23T16:26:08Z

    brsaweda@gmail.com writes:
    > test=# SELECT token, lexemes, lexemes = '{}'::text[]
    > test-# FROM   ts_debug('a title');
    >  token | lexemes | ?column?
    > -------+---------+----------
    >  a     | {}      | f
    >        |         |
    >  title | {titl}  | f
    
    > The root of the problem seems to be malformed array dimensions.
    > array_dims(lexemes) returns [1:0], while I would expect NULL:
    
    Yeah, that's a bug --- looks like ts_lexize is the root problem.
    
    I'm a bit tempted to fix this centrally by having construct_array()
    do something different for zero-dimensioned input, rather than
    putting a special case into ts_lexize().  We've been bitten by
    this type of insect a few times too many.  The question is
    whether there's any code that relies on being able to construct
    such malformed arrays ...
    
    			regards, tom lane