Module Sequel::SQL::StringAgg::DatasetMethods
In: lib/sequel/extensions/string_agg.rb

These methods are added to datasets using the string_agg extension, for the purposes of correctly literalizing StringAgg expressions for the appropriate database type.

Methods

Public Instance methods

Append the SQL fragment for the StringAgg expression to the SQL query.

[Source]

     # File lib/sequel/extensions/string_agg.rb, line 86
 86:         def string_agg_sql_append(sql, sa)
 87:           if defined?(super)
 88:             return super
 89:           end
 90: 
 91:           expr = sa.expr
 92:           separator = sa.separator || ","
 93:           order = sa.order_expr
 94:           distinct = sa.is_distinct?
 95: 
 96:           case db_type = db.database_type
 97:           when :postgres, :sqlanywhere
 98:             f = Function.new(db_type == :postgres ? :string_agg : :list, expr, separator)
 99:             if order
100:               f = f.order(*order)
101:             end
102:             if distinct
103:               f = f.distinct
104:             end
105:             literal_append(sql, f)
106:           when :mysql, :hsqldb, :h2
107:             sql << "GROUP_CONCAT("
108:             if distinct
109:               sql << "DISTINCT "
110:             end
111:             literal_append(sql, expr)
112:             if order
113:               sql << " ORDER BY "
114:               expression_list_append(sql, order)
115:             end
116:             sql << " SEPARATOR "
117:             literal_append(sql, separator)
118:             sql << ")"
119:           when :oracle, :db2
120:             if distinct
121:               raise Error, "string_agg with distinct is not implemented on #{db.database_type}"
122:             end
123:             literal_append(sql, Function.new(:listagg, expr, separator))
124:             if order
125:               sql << " WITHIN GROUP (ORDER BY "
126:               expression_list_append(sql, order)
127:               sql << ")"
128:             else
129:               sql << " WITHIN GROUP (ORDER BY 1)"
130:             end
131:           else
132:             raise Error, "string_agg is not implemented on #{db.database_type}"
133:           end
134:         end

[Validate]