diff --git a/pkg/resources/stream.go b/pkg/resources/stream.go index 437685e004..f97acd6a15 100644 --- a/pkg/resources/stream.go +++ b/pkg/resources/stream.go @@ -242,7 +242,7 @@ func ReadStream(d *schema.ResourceData, meta interface{}) error { return err } - err = d.Set("append_only", stream.AppendOnly) + err = d.Set("append_only", stream.Mode.String == "APPEND_ONLY") if err != nil { return err } diff --git a/pkg/resources/stream_acceptance_test.go b/pkg/resources/stream_acceptance_test.go index b6745b3cf3..883463a42d 100644 --- a/pkg/resources/stream_acceptance_test.go +++ b/pkg/resources/stream_acceptance_test.go @@ -16,7 +16,7 @@ func TestAcc_Stream(t *testing.T) { Providers: providers(), Steps: []resource.TestStep{ { - Config: streamConfig(accName), + Config: streamConfig(accName, false), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr("snowflake_stream.test_stream", "name", accName), resource.TestCheckResourceAttr("snowflake_stream.test_stream", "database", accName), @@ -27,11 +27,28 @@ func TestAcc_Stream(t *testing.T) { checkBool("snowflake_stream.test_stream", "show_initial_rows", false), ), }, + { + Config: streamConfig(accName, true), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("snowflake_stream.test_stream", "name", accName), + resource.TestCheckResourceAttr("snowflake_stream.test_stream", "database", accName), + resource.TestCheckResourceAttr("snowflake_stream.test_stream", "schema", accName), + resource.TestCheckResourceAttr("snowflake_stream.test_stream", "on_table", fmt.Sprintf("%s.%s.%s", accName, accName, "STREAM_ON_TABLE")), + resource.TestCheckResourceAttr("snowflake_stream.test_stream", "comment", "Terraform acceptance test"), + checkBool("snowflake_stream.test_stream", "append_only", true), + checkBool("snowflake_stream.test_stream", "show_initial_rows", false), + ), + }, }, }) } -func streamConfig(name string) string { +func streamConfig(name string, append_only bool) string { + append_only_config := "" + if append_only { + append_only_config = "append_only = true" + } + s := ` resource "snowflake_database" "test_database" { name = "%s" @@ -62,12 +79,13 @@ resource "snowflake_table" "test_stream_on_table" { } resource "snowflake_stream" "test_stream" { - database = snowflake_database.test_database.name - schema = snowflake_schema.test_schema.name - name = "%s" - comment = "Terraform acceptance test" - on_table = "${snowflake_database.test_database.name}.${snowflake_schema.test_schema.name}.${snowflake_table.test_stream_on_table.name}" + database = snowflake_database.test_database.name + schema = snowflake_schema.test_schema.name + name = "%s" + comment = "Terraform acceptance test" + on_table = "${snowflake_database.test_database.name}.${snowflake_schema.test_schema.name}.${snowflake_table.test_stream_on_table.name}" + %s } ` - return fmt.Sprintf(s, name, name, name) + return fmt.Sprintf(s, name, name, name, append_only_config) } diff --git a/pkg/resources/stream_test.go b/pkg/resources/stream_test.go index f05358102a..48ffd4fbdb 100644 --- a/pkg/resources/stream_test.go +++ b/pkg/resources/stream_test.go @@ -68,6 +68,34 @@ func TestStreamRead(t *testing.T) { }) } +func TestStreamReadAppendOnlyMode(t *testing.T) { + r := require.New(t) + + d := stream(t, "database_name|schema_name|stream_name", map[string]interface{}{"name": "stream_name", "comment": "grand comment"}) + + WithMockDb(t, func(db *sql.DB, mock sqlmock.Sqlmock) { + rows := sqlmock.NewRows([]string{"name", "database_name", "schema_name", "owner", "comment", "table_name", "type", "stale", "mode"}).AddRow("stream_name", "database_name", "schema_name", "owner_name", "grand comment", "target_table", "DELTA", false, "APPEND_ONLY") + mock.ExpectQuery(`SHOW STREAMS LIKE 'stream_name' IN DATABASE "database_name"`).WillReturnRows(rows) + err := resources.ReadStream(d, db) + r.NoError(err) + r.Equal(true, d.Get("append_only").(bool)) + }) +} + +func TestStreamReadDefaultMode(t *testing.T) { + r := require.New(t) + + d := stream(t, "database_name|schema_name|stream_name", map[string]interface{}{"name": "stream_name", "comment": "grand comment"}) + + WithMockDb(t, func(db *sql.DB, mock sqlmock.Sqlmock) { + rows := sqlmock.NewRows([]string{"name", "database_name", "schema_name", "owner", "comment", "table_name", "type", "stale", "mode"}).AddRow("stream_name", "database_name", "schema_name", "owner_name", "grand comment", "target_table", "DELTA", false, "DEFAULT") + mock.ExpectQuery(`SHOW STREAMS LIKE 'stream_name' IN DATABASE "database_name"`).WillReturnRows(rows) + err := resources.ReadStream(d, db) + r.NoError(err) + r.Equal(false, d.Get("append_only").(bool)) + }) +} + func TestStreamDelete(t *testing.T) { r := require.New(t)