>>>pipeline_explain.txt
=== IntArray
ID:          default_catalog.default_database.IntArray
Type:        state
Stage:       flink
Primary key: id
Timestamp:   -
Row count:   ~4
---
Schema:
 - id: INTEGER NOT NULL
 - int_array: INTEGER NOT NULL ARRAY NOT NULL

=== NestedArray
ID:          default_catalog.default_database.NestedArray
Type:        state
Stage:       flink
Primary key: id
Timestamp:   -
Row count:   ~2
---
Schema:
 - id: INTEGER NOT NULL
 - nested_array: CHAR(1) CHARACTER SET "UTF-16LE" NOT NULL ARRAY NOT NULL ARRAY NOT NULL

=== StringArray
ID:          default_catalog.default_database.StringArray
Type:        state
Stage:       flink
Primary key: id
Timestamp:   -
Row count:   ~4
---
Schema:
 - id: INTEGER NOT NULL
 - string_array: CHAR(1) CHARACTER SET "UTF-16LE" NOT NULL ARRAY NOT NULL

=== StringArrayFn
ID:          default_catalog.default_database.StringArrayFn
Type:        query
Stage:       postgres
---
Inputs:
 - default_catalog.default_database.StringVals
Annotations:
 - parameters: vals
 - base-table: StringVals

=== StringVals
ID:          default_catalog.default_database.StringVals
Type:        state
Stage:       flink
Primary key: val
Timestamp:   -
Row count:   ~3
---
Schema:
 - val: CHAR(1) CHARACTER SET "UTF-16LE" NOT NULL

>>>flink-sql-no-functions.sql
CREATE VIEW `IntArray`
AS
SELECT `id`, `int_array`
FROM (VALUES ROW(1, ARRAY[1, 2]),
   ROW(2, ARRAY[3]),
   ROW(3, ARRAY[4]),
   ROW(4, ARRAY[5, 6])) AS `T` (`id`, `int_array`);
CREATE VIEW `StringArray`
AS
SELECT `id`, `string_array`
FROM (VALUES ROW(1, ARRAY['a', 'b']),
   ROW(2, ARRAY['c']),
   ROW(3, ARRAY['d']),
   ROW(4, ARRAY['e', 'f'])) AS `T` (`id`, `string_array`);
CREATE VIEW `NestedArray`
AS
SELECT `id`, `nested_array`
FROM (VALUES ROW(1, ARRAY[ARRAY['a', 'b'], ARRAY['c', 'd']]),
   ROW(2, ARRAY[ARRAY['x', 'y'], ARRAY['z']])) AS `T` (`id`, `nested_array`);
CREATE VIEW `ArrayOfRows`
AS
SELECT `id`, `array_of_rows`
FROM (VALUES ROW(1, ARRAY[ROW('a', 'group1', 1), ROW('b', 'group1', 2), ROW('c', 'group2', 3), ROW('d', 'group2', 4)]),
   ROW(2, ARRAY[ROW('x', 'groupX', 1), ROW('y', 'groupX', 2), ROW('z', 'groupY', 3)])) AS `T` (`id`, `array_of_rows`);
CREATE VIEW `StringVals`
AS
SELECT `val`
FROM (VALUES ROW('a'),
   ROW('b'),
   ROW('c')) AS `T` (`val`);
CREATE TABLE `IntArray_1` (
  `id` INTEGER NOT NULL,
  `int_array` RAW('com.datasqrl.flinkrunner.stdlib.json.FlinkJsonType', 'AERjb20uZGF0YXNxcmwuZmxpbmtydW5uZXIuc3RkbGliLmpzb24uRmxpbmtKc29uVHlwZVNlcmlhbGl6ZXJTbmFwc2hvdAAAAAM='),
  PRIMARY KEY (`id`) NOT ENFORCED
)
WITH (
  'connector' = 'jdbc-sqrl',
  'driver' = 'org.postgresql.Driver',
  'password' = '${POSTGRES_PASSWORD}',
  'table-name' = 'IntArray',
  'url' = 'jdbc:postgresql://${POSTGRES_AUTHORITY}',
  'username' = '${POSTGRES_USERNAME}'
);
CREATE TABLE `NestedArray_2` (
  `id` INTEGER NOT NULL,
  `nested_array` RAW('com.datasqrl.flinkrunner.stdlib.json.FlinkJsonType', 'AERjb20uZGF0YXNxcmwuZmxpbmtydW5uZXIuc3RkbGliLmpzb24uRmxpbmtKc29uVHlwZVNlcmlhbGl6ZXJTbmFwc2hvdAAAAAM='),
  PRIMARY KEY (`id`) NOT ENFORCED
)
WITH (
  'connector' = 'jdbc-sqrl',
  'driver' = 'org.postgresql.Driver',
  'password' = '${POSTGRES_PASSWORD}',
  'table-name' = 'NestedArray',
  'url' = 'jdbc:postgresql://${POSTGRES_AUTHORITY}',
  'username' = '${POSTGRES_USERNAME}'
);
CREATE TABLE `StringArray_3` (
  `id` INTEGER NOT NULL,
  `string_array` RAW('com.datasqrl.flinkrunner.stdlib.json.FlinkJsonType', 'AERjb20uZGF0YXNxcmwuZmxpbmtydW5uZXIuc3RkbGliLmpzb24uRmxpbmtKc29uVHlwZVNlcmlhbGl6ZXJTbmFwc2hvdAAAAAM='),
  PRIMARY KEY (`id`) NOT ENFORCED
)
WITH (
  'connector' = 'jdbc-sqrl',
  'driver' = 'org.postgresql.Driver',
  'password' = '${POSTGRES_PASSWORD}',
  'table-name' = 'StringArray',
  'url' = 'jdbc:postgresql://${POSTGRES_AUTHORITY}',
  'username' = '${POSTGRES_USERNAME}'
);
CREATE TABLE `StringVals_4` (
  `val` CHAR(1) CHARACTER SET `UTF-16LE` NOT NULL,
  PRIMARY KEY (`val`) NOT ENFORCED
)
WITH (
  'connector' = 'jdbc-sqrl',
  'driver' = 'org.postgresql.Driver',
  'password' = '${POSTGRES_PASSWORD}',
  'table-name' = 'StringVals',
  'url' = 'jdbc:postgresql://${POSTGRES_AUTHORITY}',
  'username' = '${POSTGRES_USERNAME}'
);
EXECUTE STATEMENT SET BEGIN
INSERT INTO `default_catalog`.`default_database`.`IntArray_1`
SELECT `id`, `to_jsonb`(`int_array`) AS `int_array`
 FROM `default_catalog`.`default_database`.`IntArray`
;
INSERT INTO `default_catalog`.`default_database`.`NestedArray_2`
 SELECT `id`, `to_jsonb`(`nested_array`) AS `nested_array`
  FROM `default_catalog`.`default_database`.`NestedArray`
 ;
 INSERT INTO `default_catalog`.`default_database`.`StringArray_3`
  SELECT `id`, `to_jsonb`(`string_array`) AS `string_array`
   FROM `default_catalog`.`default_database`.`StringArray`
  ;
  INSERT INTO `default_catalog`.`default_database`.`StringVals_4`
   SELECT *
    FROM `default_catalog`.`default_database`.`StringVals`
   ;
   END
>>>postgres-schema.sql
CREATE TABLE IF NOT EXISTS "IntArray" ("id" INTEGER NOT NULL, "int_array" JSONB, PRIMARY KEY ("id"));
CREATE TABLE IF NOT EXISTS "NestedArray" ("id" INTEGER NOT NULL, "nested_array" JSONB, PRIMARY KEY ("id"));
CREATE TABLE IF NOT EXISTS "StringArray" ("id" INTEGER NOT NULL, "string_array" JSONB, PRIMARY KEY ("id"));
CREATE TABLE IF NOT EXISTS "StringVals" ("val" TEXT NOT NULL, PRIMARY KEY ("val"))
>>>postgres-views.sql

