Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Fix views permadiff #3079

Merged
merged 7 commits into from
Sep 17, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ func (r *RowAccessPolicyResourceAssert) HasArguments(args []sdk.RowAccessPolicyA
r.AddAssertion(assert.ValueSet("argument.#", strconv.FormatInt(int64(len(args)), 10)))
for i, v := range args {
r.AddAssertion(assert.ValueSet(fmt.Sprintf("argument.%d.name", i), v.Name))
r.AddAssertion(assert.ValueSet(fmt.Sprintf("argument.%d.type", i), v.Type))
r.AddAssertion(assert.ValueSet(fmt.Sprintf("argument.%d.type", i), string(v.Type)))
}
return r
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ func (r *RowAccessPolicyModel) WithArgument(argument []sdk.RowAccessPolicyArgume
for i, v := range argument {
maps[i] = config.MapVariable(map[string]config.Variable{
"name": config.StringVariable(v.Name),
"type": config.StringVariable(v.Type),
"type": config.StringVariable(string(v.Type)),
})
}
r.Argument = tfconfig.SetVariable(maps...)
Expand Down
12 changes: 8 additions & 4 deletions pkg/datasources/row_access_policies_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ func TestAcc_RowAccessPolicies(t *testing.T) {
policyModel := model.RowAccessPolicy("test", []sdk.RowAccessPolicyArgument{
{
Name: "a",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
{
Name: "b",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}, body, id.DatabaseName(), id.Name(), id.SchemaName()).WithComment("foo")

Expand Down Expand Up @@ -64,7 +64,11 @@ func TestAcc_RowAccessPolicies(t *testing.T) {
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.body", "case when current_role() in ('ANALYST') then true else false end")),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.name", id.Name())),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.return_type", "BOOLEAN")),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.signature", "(a VARCHAR, b VARCHAR)")),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.signature.#", "2")),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.signature.0.name", "a")),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.signature.0.type", string(sdk.DataTypeVARCHAR))),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.signature.1.name", "b")),
assert.Check(resource.TestCheckResourceAttr(dsName, "row_access_policies.0.describe_output.0.signature.1.type", string(sdk.DataTypeVARCHAR))),
),
},
{
Expand Down Expand Up @@ -107,7 +111,7 @@ func TestAcc_RowAccessPolicies_Filtering(t *testing.T) {
"arguments": config.SetVariable(
config.MapVariable(map[string]config.Variable{
"name": config.StringVariable("a"),
"type": config.StringVariable("VARCHAR"),
"type": config.StringVariable(string(sdk.DataTypeVARCHAR)),
}),
),
"body": config.StringVariable("case when current_role() in ('ANALYST') then true else false end"),
Expand Down
7 changes: 7 additions & 0 deletions pkg/resources/diff_suppressions.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,3 +221,10 @@ func suppressIdentifierQuoting(_, oldValue, newValue string, _ *schema.ResourceD
}
return slices.Equal(oldId, newId)
}

func ignoreEmptyList(k, oldValue, newValue string, _ *schema.ResourceData) bool {
if strings.HasSuffix(k, ".#") && newValue == "0" {
return true
}
return newValue == ""
}
12 changes: 2 additions & 10 deletions pkg/resources/row_access_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,11 +156,7 @@ func ImportRowAccessPolicy(ctx context.Context, d *schema.ResourceData, meta any
if err := d.Set("body", policyDescription.Body); err != nil {
return nil, err
}
args, err := policyDescription.Arguments()
if err != nil {
return nil, err
}
if err := d.Set("argument", schemas.RowAccessPolicyArgumentsToSchema(args)); err != nil {
if err := d.Set("argument", schemas.RowAccessPolicyArgumentsToSchema(policyDescription.Signature)); err != nil {
return nil, err
}
return []*schema.ResourceData{d}, nil
Expand Down Expand Up @@ -233,11 +229,7 @@ func ReadRowAccessPolicy(ctx context.Context, d *schema.ResourceData, meta any)
if err := d.Set("body", rowAccessPolicyDescription.Body); err != nil {
return diag.FromErr(err)
}
args, err := rowAccessPolicyDescription.Arguments()
if err != nil {
return diag.FromErr(err)
}
if err := d.Set("argument", schemas.RowAccessPolicyArgumentsToSchema(args)); err != nil {
if err := d.Set("argument", schemas.RowAccessPolicyArgumentsToSchema(rowAccessPolicyDescription.Signature)); err != nil {
return diag.FromErr(err)
}
if err = d.Set(ShowOutputAttributeName, []map[string]any{schemas.RowAccessPolicyToSchema(rowAccessPolicy)}); err != nil {
Expand Down
44 changes: 24 additions & 20 deletions pkg/resources/row_access_policy_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ func TestAcc_RowAccessPolicy(t *testing.T) {
argument := []sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
{
Name: "B",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}
changedArgument := []sdk.RowAccessPolicyArgument{
{
Name: "C",
Type: string(sdk.DataTypeBoolean),
Type: sdk.DataTypeBoolean,
},
{
Name: "D",
Type: string(sdk.DataTypeTimestampNTZ),
Type: sdk.DataTypeTimestampNTZ,
},
}
policyModel := model.RowAccessPolicy("test", argument, body, id.DatabaseName(), id.Name(), id.SchemaName()).WithComment("Terraform acceptance test")
Expand Down Expand Up @@ -80,7 +80,11 @@ func TestAcc_RowAccessPolicy(t *testing.T) {
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.body", body)),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.name", id.Name())),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.return_type", "BOOLEAN")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature", "(A VARCHAR, B VARCHAR)")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.#", "2")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.0.name", "A")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.0.type", string(sdk.DataTypeVARCHAR))),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.1.name", "B")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "describe_output.0.signature.1.type", string(sdk.DataTypeVARCHAR))),
),
},
// change comment and expression
Expand Down Expand Up @@ -194,7 +198,7 @@ func TestAcc_RowAccessPolicy_Issue2053(t *testing.T) {
policyModel := model.RowAccessPolicy("test", []sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}, body, id.DatabaseName(), id.Name(), id.SchemaName())
resource.Test(t, resource.TestCase{
Expand Down Expand Up @@ -252,7 +256,7 @@ func TestAcc_RowAccessPolicy_Rename(t *testing.T) {
policyModel := model.RowAccessPolicy("test", []sdk.RowAccessPolicyArgument{
{
Name: "a",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}, body, id.DatabaseName(), id.Name(), id.SchemaName())

Expand Down Expand Up @@ -390,7 +394,7 @@ func TestAcc_RowAccessPolicy_DataTypeAliases(t *testing.T) {
HasArguments([]sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}),
),
Expand All @@ -406,11 +410,11 @@ func TestAcc_view_migrateFromVersion_0_95_0_LowercaseArgName(t *testing.T) {
policyModel := model.RowAccessPolicy("test", []sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
{
Name: "b",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}, body, id.DatabaseName(), id.Name(), id.SchemaName())

Expand Down Expand Up @@ -441,8 +445,8 @@ func TestAcc_view_migrateFromVersion_0_95_0_LowercaseArgName(t *testing.T) {
HasSchemaString(id.SchemaName()).
HasFullyQualifiedNameString(id.FullyQualifiedName()),
assert.Check(resource.TestCheckResourceAttr(resourceName, "row_access_expression", body)),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.A", "VARCHAR")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.B", "VARCHAR")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.A", string(sdk.DataTypeVARCHAR))),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.B", string(sdk.DataTypeVARCHAR))),
),
},
{
Expand All @@ -466,11 +470,11 @@ func TestAcc_view_migrateFromVersion_0_95_0_LowercaseArgName(t *testing.T) {
HasArguments([]sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
{
Name: "b",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}),
),
Expand All @@ -486,11 +490,11 @@ func TestAcc_view_migrateFromVersion_0_95_0_UppercaseArgName(t *testing.T) {
policyModel := model.RowAccessPolicy("test", []sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
{
Name: "B",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}, body, id.DatabaseName(), id.Name(), id.SchemaName())

Expand Down Expand Up @@ -521,8 +525,8 @@ func TestAcc_view_migrateFromVersion_0_95_0_UppercaseArgName(t *testing.T) {
HasSchemaString(id.SchemaName()).
HasFullyQualifiedNameString(id.FullyQualifiedName()),
assert.Check(resource.TestCheckResourceAttr(resourceName, "row_access_expression", body)),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.A", "VARCHAR")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.B", "VARCHAR")),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.A", string(sdk.DataTypeVARCHAR))),
assert.Check(resource.TestCheckResourceAttr(resourceName, "signature.B", string(sdk.DataTypeVARCHAR))),
),
},
{
Expand All @@ -546,11 +550,11 @@ func TestAcc_view_migrateFromVersion_0_95_0_UppercaseArgName(t *testing.T) {
HasArguments([]sdk.RowAccessPolicyArgument{
{
Name: "A",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
{
Name: "B",
Type: string(sdk.DataTypeVARCHAR),
Type: sdk.DataTypeVARCHAR,
},
}),
),
Expand Down
2 changes: 1 addition & 1 deletion pkg/resources/testdata/TestAcc_View/basic/test.tf
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ resource "snowflake_view" "test" {
statement = var.statement

dynamic "column" {
for_each = var.columns
for_each = var.column
content {
column_name = column.value["column_name"]
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/resources/testdata/TestAcc_View/basic/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ variable "statement" {
type = string
}

variable "columns" {
variable "column" {
type = set(map(string))
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ resource "snowflake_view" "test" {
is_secure = var.is_secure

dynamic "column" {
for_each = var.columns
for_each = var.column
content {
column_name = column.value["column_name"]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ variable "is_secure" {
type = bool
}

variable "columns" {
variable "column" {
type = set(map(string))
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ resource "snowflake_view" "test" {
is_recursive = var.is_recursive

dynamic "column" {
for_each = var.columns
for_each = var.column
content {
column_name = column.value["column_name"]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ variable "is_recursive" {
type = bool
}

variable "columns" {
variable "column" {
type = set(map(string))
}
2 changes: 1 addition & 1 deletion pkg/resources/testdata/TestAcc_View/basic_update/test.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ resource "snowflake_view" "test" {
schema = var.schema

dynamic "column" {
for_each = var.columns
for_each = var.column
content {
column_name = column.value["column_name"]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,6 @@ variable "schedule_status" {
type = string
}

variable "columns" {
variable "column" {
type = set(map(string))
}
3 changes: 2 additions & 1 deletion pkg/resources/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,8 @@ var viewSchema = map[string]*schema.Schema{
},
},
},
Description: "If you want to change the name of a column or add a comment to a column in the new view, include a column list that specifies the column names and (if needed) comments about the columns. (You do not need to specify the data types of the columns.)",
Description: "If you want to change the name of a column or add a comment to a column in the new view, include a column list that specifies the column names and (if needed) comments about the columns. You do not need to specify the data types of the columns. If this field is not specified, columns are inferred from the `statement` field by Snowflake.",
DiffSuppressFunc: ignoreEmptyList,
},
"comment": {
Type: schema.TypeString,
Expand Down
Loading
Loading