Uploaded image for project: 'Apache AsterixDB'
  1. Apache AsterixDB
  2. ASTERIXDB-2476

Support array slicing in SQL++

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 0.9.5
    • None
    • None

    Description

      Some programming languages support array slicing - the ability to extract sub arrays from array, which would be useful in SQL++. E.g. to retrieve the 2 elements in the middle of ["a","b","c","d"] one could write ["a","b","c","d"][1:3] and get ["b","c"].

      To implement this, we should first add 2 functions array_slice with 2 and 3 parameters

      1. array,
      2. start, and
      3. (optionally) end.

      The functions return NULL if

      • array is not an array,
      • start is not a number or greater than the length of the array, or
      • end is not a number or greater than the length of the array or less than start.

      Otherwise array_slice(array, start, end) returns a subset of the source array, containing the elements from position start to end-1.
      The element at start is included, while the element at end is not.
      The array index starts with 0. 
      In the 2 arguments variant, all elements from start to the end of the source array are included. 
      Negative positions are counted backwards from the end of the array.

      With that function we can extend the parser to support the slicing syntax array_expression [start_expression : [ end_expression ] ] and parse this syntax into to a call of the function array_slice where a missing end_expression in the syntax is rewritten to the 2 argument variant.

      Standard semantics for NULL and MISSING parameters apply.

      Attachments

        Issue Links

          Activity

            People

              HussainHT Hussain Towaileb
              tillw Till Westmann
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: