diff --git a/docs/resources/materialized_view.md b/docs/resources/materialized_view.md index 24f1076d..32c1827c 100644 --- a/docs/resources/materialized_view.md +++ b/docs/resources/materialized_view.md @@ -57,6 +57,7 @@ resource "materialize_materialized_view" "simple_materialized_view" { ### Read-Only +- `create_sql` (String) The SQL statement used to create the materialized view. - `id` (String) The ID of this resource. - `qualified_sql_name` (String) The fully qualified name of the materialized view. diff --git a/docs/resources/view.md b/docs/resources/view.md index 6b55d8ef..47099959 100644 --- a/docs/resources/view.md +++ b/docs/resources/view.md @@ -55,6 +55,7 @@ resource "materialize_view" "simple_view" { ### Read-Only +- `create_sql` (String) The SQL statement used to create the view. - `id` (String) The ID of this resource. - `qualified_sql_name` (String) The fully qualified name of the view. diff --git a/pkg/materialize/materialized_view.go b/pkg/materialize/materialized_view.go index 9c59bae6..4758da0e 100644 --- a/pkg/materialize/materialized_view.go +++ b/pkg/materialize/materialized_view.go @@ -89,6 +89,7 @@ type MaterializedViewParams struct { Comment sql.NullString `db:"comment"` OwnerName sql.NullString `db:"owner_name"` Privileges pq.StringArray `db:"privileges"` + CreateSQL sql.NullString `db:"create_sql"` } var materializedViewQuery = NewBaseQuery(` @@ -100,6 +101,7 @@ var materializedViewQuery = NewBaseQuery(` mz_clusters.name AS cluster_name, comments.comment AS comment, mz_roles.name AS owner_name, + mz_materialized_views.create_sql, mz_materialized_views.privileges FROM mz_materialized_views JOIN mz_schemas diff --git a/pkg/materialize/view.go b/pkg/materialize/view.go index 0c67a97f..790495f1 100644 --- a/pkg/materialize/view.go +++ b/pkg/materialize/view.go @@ -60,6 +60,7 @@ type ViewParams struct { Comment sql.NullString `db:"comment"` OwnerName sql.NullString `db:"owner_name"` Privileges pq.StringArray `db:"privileges"` + CreateSQL sql.NullString `db:"create_sql"` } var viewQuery = NewBaseQuery(` @@ -70,6 +71,7 @@ var viewQuery = NewBaseQuery(` mz_databases.name AS database_name, comments.comment AS comment, mz_roles.name AS owner_name, + mz_views.create_sql, mz_views.privileges FROM mz_views JOIN mz_schemas diff --git a/pkg/provider/acceptance_materialized_view_test.go b/pkg/provider/acceptance_materialized_view_test.go index 30edf652..f6268533 100644 --- a/pkg/provider/acceptance_materialized_view_test.go +++ b/pkg/provider/acceptance_materialized_view_test.go @@ -32,6 +32,7 @@ func TestAccMaterializedView_basic(t *testing.T) { resource.TestCheckResourceAttr("materialize_materialized_view.test", "qualified_sql_name", fmt.Sprintf(`"materialize"."public"."%s"`, viewName)), resource.TestCheckResourceAttr("materialize_materialized_view.test", "statement", "SELECT 1 AS id"), resource.TestCheckResourceAttr("materialize_materialized_view.test", "ownership_role", "mz_system"), + resource.TestCheckResourceAttr("materialize_materialized_view.test", "create_sql", fmt.Sprintf(`CREATE MATERIALIZED VIEW "materialize"."public"."%s" IN CLUSTER [u1] WITH (ASSERT NOT NULL = "id", REFRESH = ON COMMIT) AS SELECT 1 AS "id"`, viewName)), testAccCheckMaterializedViewExists("materialize_materialized_view.test_role"), resource.TestCheckResourceAttr("materialize_materialized_view.test_role", "name", view2Name), resource.TestCheckResourceAttr("materialize_materialized_view.test_role", "ownership_role", roleName), diff --git a/pkg/provider/acceptance_view_test.go b/pkg/provider/acceptance_view_test.go index 61195ff4..5ce73a2e 100644 --- a/pkg/provider/acceptance_view_test.go +++ b/pkg/provider/acceptance_view_test.go @@ -32,6 +32,7 @@ func TestAccView_basic(t *testing.T) { resource.TestCheckResourceAttr("materialize_view.test", "qualified_sql_name", fmt.Sprintf(`"materialize"."public"."%s"`, viewName)), resource.TestCheckResourceAttr("materialize_view.test", "statement", "SELECT 1 AS id"), resource.TestCheckResourceAttr("materialize_view.test", "ownership_role", "mz_system"), + resource.TestCheckResourceAttr("materialize_view.test", "create_sql", fmt.Sprintf(`CREATE VIEW "materialize"."public"."%s" AS SELECT 1 AS "id"`, viewName)), testAccCheckViewExists("materialize_view.test_role"), resource.TestCheckResourceAttr("materialize_view.test_role", "name", view2Name), resource.TestCheckResourceAttr("materialize_view.test_role", "ownership_role", roleName), diff --git a/pkg/resources/resource_materialized_view.go b/pkg/resources/resource_materialized_view.go index d73b1a04..6ff0ce1c 100644 --- a/pkg/resources/resource_materialized_view.go +++ b/pkg/resources/resource_materialized_view.go @@ -39,6 +39,11 @@ var materializedViewSchema = map[string]*schema.Schema{ Required: true, ForceNew: true, }, + "create_sql": { + Description: "The SQL statement used to create the materialized view.", + Type: schema.TypeString, + Computed: true, + }, "ownership_role": OwnershipRoleSchema(), "region": RegionSchema(), } @@ -106,6 +111,10 @@ func materializedViewRead(ctx context.Context, d *schema.ResourceData, meta inte return diag.FromErr(err) } + if err := d.Set("create_sql", s.CreateSQL.String); err != nil { + return diag.FromErr(err) + } + return nil } diff --git a/pkg/resources/resource_view.go b/pkg/resources/resource_view.go index 8a091add..0fd87a08 100644 --- a/pkg/resources/resource_view.go +++ b/pkg/resources/resource_view.go @@ -24,6 +24,11 @@ var viewSchema = map[string]*schema.Schema{ Required: true, ForceNew: true, }, + "create_sql": { + Description: "The SQL statement used to create the view.", + Type: schema.TypeString, + Computed: true, + }, "ownership_role": OwnershipRoleSchema(), "region": RegionSchema(), } @@ -87,6 +92,10 @@ func viewRead(ctx context.Context, d *schema.ResourceData, meta interface{}) dia return diag.FromErr(err) } + if err := d.Set("create_sql", s.CreateSQL.String); err != nil { + return diag.FromErr(err) + } + return nil } diff --git a/pkg/testhelpers/mock_scans.go b/pkg/testhelpers/mock_scans.go index 3c443184..8af8cf57 100644 --- a/pkg/testhelpers/mock_scans.go +++ b/pkg/testhelpers/mock_scans.go @@ -295,6 +295,7 @@ func MockMaterializeViewScan(mock sqlmock.Sqlmock, predicate string) { mz_clusters.name AS cluster_name, comments.comment AS comment, mz_roles.name AS owner_name, + mz_materialized_views.create_sql, mz_materialized_views.privileges FROM mz_materialized_views JOIN mz_schemas @@ -620,6 +621,7 @@ func MockViewScan(mock sqlmock.Sqlmock, predicate string) { mz_databases.name AS database_name, comments.comment AS comment, mz_roles.name AS owner_name, + mz_views.create_sql, mz_views.privileges FROM mz_views JOIN mz_schemas