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

feat: Adjust owner_role_type and schema_evolution_record columns #2740

Merged
merged 10 commits into from
Apr 26, 2024
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ We've included an example env file `test.env.example` with the environment varia

## Advanced Debugging

If you want to build and test the provider locally you should edit you `~.terraformrc` file to include the following:
If you want to build and test the provider locally you should edit your `~/.terraformrc` file to include the following:

```
provider_installation {
Expand Down
4 changes: 4 additions & 0 deletions docs/resources/table.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,10 @@ Optional:
- `masking_policy` (String) Masking policy to apply on column. It has to be a fully qualified name.
- `nullable` (Boolean) Whether this column can contain null values. **Note**: Depending on your Snowflake version, the default value will not suffice if this column is used in a primary key constraint.

Read-Only:

- `schema_evolution_record` (String) Record of schema evolution.

<a id="nestedblock--column--default"></a>
### Nested Schema for `column.default`

Expand Down
10 changes: 10 additions & 0 deletions pkg/resources/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ var tableSchema = map[string]*schema.Schema{
Default: "",
Description: "Column collation, e.g. utf8",
},
"schema_evolution_record": {
Type: schema.TypeString,
Computed: true,
Description: "Record of schema evolution.",
},
},
},
},
Expand Down Expand Up @@ -496,6 +501,11 @@ func toColumnConfig(descriptions []sdk.TableColumnDetails) []any {
flat["default"] = []any{def}
}
}

if td.SchemaEvolutionRecord != nil {
flat["schema_evolution_record"] = *td.SchemaEvolutionRecord
}

flattened = append(flattened, flat)
}
return flattened
Expand Down
1 change: 1 addition & 0 deletions pkg/resources/table_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ func TestAcc_Table(t *testing.T) {
resource.TestCheckResourceAttr("snowflake_table.test_table", "column.0.type", "VARIANT"),
resource.TestCheckResourceAttr("snowflake_table.test_table", "column.1.name", "column2"),
resource.TestCheckResourceAttr("snowflake_table.test_table", "column.1.comment", ""),
resource.TestCheckResourceAttr("snowflake_table.test_table", "column.1.schema_evolution_record", ""),
resource.TestCheckNoResourceAttr("snowflake_table.test_table", "primary_key.0"),
),
},
Expand Down
54 changes: 31 additions & 23 deletions pkg/sdk/alerts.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package sdk

import (
"context"
"database/sql"
"errors"
"fmt"
"time"
Expand Down Expand Up @@ -217,35 +218,37 @@ func (v *Alert) ObjectType() ObjectType {
}

type Alert struct {
CreatedOn time.Time
Name string
DatabaseName string
SchemaName string
Owner string
Comment *string
Warehouse string
Schedule string
State AlertState
Condition string
Action string
CreatedOn time.Time
Name string
DatabaseName string
SchemaName string
Owner string
Comment *string
Warehouse string
Schedule string
State AlertState
Condition string
Action string
OwnerRoleType string
}

type alertDBRow struct {
CreatedOn time.Time `db:"created_on"`
Name string `db:"name"`
DatabaseName string `db:"database_name"`
SchemaName string `db:"schema_name"`
Owner string `db:"owner"`
Comment *string `db:"comment"`
Warehouse string `db:"warehouse"`
Schedule string `db:"schedule"`
State string `db:"state"` // suspended, started
Condition string `db:"condition"`
Action string `db:"action"`
CreatedOn time.Time `db:"created_on"`
Name string `db:"name"`
DatabaseName string `db:"database_name"`
SchemaName string `db:"schema_name"`
Owner string `db:"owner"`
Comment *string `db:"comment"`
Warehouse string `db:"warehouse"`
Schedule string `db:"schedule"`
State string `db:"state"` // suspended, started
Condition string `db:"condition"`
Action string `db:"action"`
OwnerRoleType sql.NullString `db:"owner_role_type"`
}

func (row alertDBRow) convert() *Alert {
return &Alert{
alert := &Alert{
CreatedOn: row.CreatedOn,
Name: row.Name,
DatabaseName: row.DatabaseName,
Expand All @@ -258,6 +261,11 @@ func (row alertDBRow) convert() *Alert {
Condition: row.Condition,
Action: row.Action,
}
if row.OwnerRoleType.Valid {
alert.OwnerRoleType = row.OwnerRoleType.String
}

return alert
}

func (opts *ShowAlertOptions) validate() error {
Expand Down
5 changes: 5 additions & 0 deletions pkg/sdk/databases.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ type Database struct {
DroppedOn time.Time
Transient bool
Kind string
OwnerRoleType string
}

func (v *Database) ID() AccountObjectIdentifier {
Expand All @@ -80,6 +81,7 @@ type databaseRow struct {
ResourceGroup sql.NullString `db:"resource_group"`
DroppedOn sql.NullTime `db:"dropped_on"`
Kind sql.NullString `db:"kind"`
OwnerRoleType sql.NullString `db:"owner_role_type"`
}

func (row databaseRow) convert() *Database {
Expand Down Expand Up @@ -129,6 +131,9 @@ func (row databaseRow) convert() *Database {
if row.Kind.Valid {
database.Kind = row.Kind.String
}
if row.OwnerRoleType.Valid {
database.OwnerRoleType = row.OwnerRoleType.String
}
return database
}

Expand Down
6 changes: 6 additions & 0 deletions pkg/sdk/dynamic_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ type DynamicTable struct {
IsClone bool
IsReplica bool
DataTimestamp time.Time
OwnerRoleType string
}

func (dt *DynamicTable) ID() SchemaObjectIdentifier {
Expand Down Expand Up @@ -152,6 +153,7 @@ type dynamicTableRow struct {
IsClone bool `db:"is_clone"`
IsReplica bool `db:"is_replica"`
DataTimestamp sql.NullTime `db:"data_timestamp"`
OwnerRoleType sql.NullString `db:"owner_role_type"`
}

func (dtr dynamicTableRow) convert() *DynamicTable {
Expand Down Expand Up @@ -184,6 +186,10 @@ func (dtr dynamicTableRow) convert() *DynamicTable {
if dtr.LastSuspendedOn.Valid {
dt.LastSuspendedOn = dtr.LastSuspendedOn.Time
}
if dtr.OwnerRoleType.Valid {
dt.OwnerRoleType = dtr.OwnerRoleType.String
}

return dt
}

Expand Down
2 changes: 2 additions & 0 deletions pkg/sdk/masking_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ type MaskingPolicy struct {
Owner string
Comment string
ExemptOtherPolicies bool
OwnerRoleType string
}

func (v *MaskingPolicy) ID() SchemaObjectIdentifier {
Expand Down Expand Up @@ -268,6 +269,7 @@ func (row maskingPolicyDBRow) convert() *MaskingPolicy {
Owner: row.Owner,
Comment: row.Comment,
ExemptOtherPolicies: exemptOtherPolicies,
OwnerRoleType: row.OwnerRoleType,
}
}

Expand Down
30 changes: 16 additions & 14 deletions pkg/sdk/password_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -251,13 +251,14 @@ func (opts *ShowPasswordPolicyOptions) validate() error {

// PasswordPolicy is a user-friendly result for a CREATE PASSWORD POLICY query.
type PasswordPolicy struct {
CreatedOn time.Time
Name string
DatabaseName string
SchemaName string
Kind string
Owner string
Comment string
CreatedOn time.Time
Name string
DatabaseName string
SchemaName string
Kind string
Owner string
Comment string
OwnerRoleType string
}

func (v *PasswordPolicy) ID() SchemaObjectIdentifier {
Expand All @@ -283,13 +284,14 @@ type passwordPolicyDBRow struct {

func (row passwordPolicyDBRow) convert() PasswordPolicy {
return PasswordPolicy{
CreatedOn: row.CreatedOn,
Name: row.Name,
DatabaseName: row.DatabaseName,
SchemaName: row.SchemaName,
Kind: row.Kind,
Owner: row.Owner,
Comment: row.Comment,
CreatedOn: row.CreatedOn,
Name: row.Name,
DatabaseName: row.DatabaseName,
SchemaName: row.SchemaName,
Kind: row.Kind,
Owner: row.Owner,
Comment: row.Comment,
OwnerRoleType: row.OwnerRoleType,
}
}

Expand Down
6 changes: 4 additions & 2 deletions pkg/sdk/session_policies_def.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ var SessionPoliciesDef = g.NewInterface(
Field("kind", "string").
Field("owner", "string").
Field("comment", "string").
Field("options", "string"),
Field("options", "string").
Field("owner_role_type", "string"),
g.PlainStruct("SessionPolicy").
Field("CreatedOn", "string").
Field("Name", "string").
Expand All @@ -82,7 +83,8 @@ var SessionPoliciesDef = g.NewInterface(
Field("Kind", "string").
Field("Owner", "string").
Field("Comment", "string").
Field("Options", "string"),
Field("Options", "string").
Field("OwnerRoleType", "string"),
g.NewQueryStruct("ShowSessionPolicies").
Show().
SQL("SESSION POLICIES"),
Expand Down
34 changes: 18 additions & 16 deletions pkg/sdk/session_policies_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,25 +66,27 @@ type ShowSessionPolicyOptions struct {
}

type showSessionPolicyDBRow struct {
CreatedOn string `db:"created_on"`
Name string `db:"name"`
DatabaseName string `db:"database_name"`
SchemaName string `db:"schema_name"`
Kind string `db:"kind"`
Owner string `db:"owner"`
Comment string `db:"comment"`
Options string `db:"options"`
CreatedOn string `db:"created_on"`
Name string `db:"name"`
DatabaseName string `db:"database_name"`
SchemaName string `db:"schema_name"`
Kind string `db:"kind"`
Owner string `db:"owner"`
Comment string `db:"comment"`
Options string `db:"options"`
OwnerRoleType string `db:"owner_role_type"`
}

type SessionPolicy struct {
CreatedOn string
Name string
DatabaseName string
SchemaName string
Kind string
Owner string
Comment string
Options string
CreatedOn string
Name string
DatabaseName string
SchemaName string
Kind string
Owner string
Comment string
Options string
OwnerRoleType string
}

// DescribeSessionPolicyOptions is based on https://docs.snowflake.com/en/sql-reference/sql/desc-session-policy.
Expand Down
17 changes: 9 additions & 8 deletions pkg/sdk/session_policies_impl_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,15 @@ func (r *ShowSessionPolicyRequest) toOpts() *ShowSessionPolicyOptions {

func (r showSessionPolicyDBRow) convert() *SessionPolicy {
return &SessionPolicy{
CreatedOn: r.CreatedOn,
Name: r.Name,
DatabaseName: r.DatabaseName,
SchemaName: r.SchemaName,
Kind: r.Kind,
Owner: r.Owner,
Comment: r.Comment,
Options: r.Options,
CreatedOn: r.CreatedOn,
Name: r.Name,
DatabaseName: r.DatabaseName,
SchemaName: r.SchemaName,
Kind: r.Kind,
Owner: r.Owner,
Comment: r.Comment,
Options: r.Options,
OwnerRoleType: r.OwnerRoleType,
}
}

Expand Down
Loading
Loading