# File lib/dbd_pg/Pg.rb, line 304
        def convert_array( str, elemtype )

          array_nesting = 0         # nesting level of the array
          in_string = false         # currently inside a quoted string ?
          escaped = false           # if the character is escaped
          sbuffer = ''              # buffer for the current element
          result_array = Array.new  # the resulting Array
  
          str.each_byte { |char|    # parse character by character
            char = char.chr         # we need the Character, not it's Integer

            if escaped then         # if this character is escaped, just add it to the buffer
              sbuffer += char
              escaped = false
              next
            end
    
            case char               # let's see what kind of character we have
            #------------- {: beginning of an array ----#
            when '{'
              if in_string then     # ignore inside a string
                sbuffer += char
                next
              end

              if array_nesting >= 1 then  # if it's an nested array, defer for recursion
                sbuffer += char
              end
              array_nesting += 1          # inside another array
    
            #------------- ": string deliminator --------#
            when '"'
              in_string = !in_string      

            #------------- \: escape character, next is regular character #
            when '\\'     # single \, must be extra escaped in Ruby
              escaped = true

            #------------- ,: element separator ---------#
            when ','
              if in_string or array_nesting > 1 then  # don't care if inside string or
                sbuffer += char                       # nested array
              else
                if !sbuffer.is_a? Array then
                  sbuffer = convert( sbuffer, elemtype )
                end
                result_array << sbuffer               # otherwise, here ends an element
                sbuffer = ''
              end

            #------------- }: End of Array --------------#
            when '}' 
              if in_string then                # ignore if inside quoted string
                sbuffer += char
                next
              end

              array_nesting -=1                # decrease nesting level
      
              if array_nesting == 1            # must be the end of a nested array 
                sbuffer += char
                sbuffer = convert_array( sbuffer, elemtype )  # recurse, using the whole nested array
              elsif array_nesting > 1          # inside nested array, keep it for later
                sbuffer += char
              else                             # array_nesting = 0, must be the last }
                if !sbuffer.is_a? Array then
                  sbuffer = convert( sbuffer, elemtype )
                end

                result_array << sbuffer unless sbuffer.nil? # upto here was the last element
              end

            #------------- all other characters ---------#
            else
              sbuffer += char                 # simply append

            end

          } 
  
          return result_array
        end