blob: 70f794fec0cfb03a8118061b188a23b204b3a050 [file]
package backup_test
import (
"github.com/apache/cloudberry-backup/backup"
"github.com/apache/cloudberry-backup/testutils"
"github.com/apache/cloudberry-backup/toc"
. "github.com/onsi/ginkgo/v2"
)
var _ = Describe("backup/predata_textsearch tests", func() {
BeforeEach(func() {
tocfile, backupfile = testutils.InitializeTestTOC(buffer, "predata")
})
Describe("PrintCreateTextSearchParserStatements", func() {
It("prints a basic text search parser", func() {
parser := backup.TextSearchParser{Oid: 0, Schema: "public", Name: "testparser", StartFunc: "start_func", TokenFunc: "token_func", EndFunc: "end_func", LexTypesFunc: "lextypes_func"}
backup.PrintCreateTextSearchParserStatement(backupfile, tocfile, parser, backup.ObjectMetadata{})
testutils.ExpectEntry(tocfile.PredataEntries, 0, "public", "", "testparser", toc.OBJ_TEXT_SEARCH_PARSER)
testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE TEXT SEARCH PARSER public.testparser (
START = start_func,
GETTOKEN = token_func,
END = end_func,
LEXTYPES = lextypes_func
);`)
})
It("prints a text search parser with a headline and comment", func() {
parser := backup.TextSearchParser{Oid: 1, Schema: "public", Name: "testparser", StartFunc: "start_func", TokenFunc: "token_func", EndFunc: "end_func", LexTypesFunc: "lextypes_func", HeadlineFunc: "headline_func"}
metadata := testutils.DefaultMetadata(toc.OBJ_TEXT_SEARCH_PARSER, false, false, true, false)
backup.PrintCreateTextSearchParserStatement(backupfile, tocfile, parser, metadata)
testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE TEXT SEARCH PARSER public.testparser (
START = start_func,
GETTOKEN = token_func,
END = end_func,
LEXTYPES = lextypes_func,
HEADLINE = headline_func
);`, `COMMENT ON TEXT SEARCH PARSER public.testparser IS 'This is a text search parser comment.';`)
})
})
Describe("PrintCreateTextSearchTemplateStatement", func() {
It("prints a basic text search template with comment", func() {
template := backup.TextSearchTemplate{Oid: 1, Schema: "public", Name: "testtemplate", InitFunc: "dsimple_init", LexizeFunc: "dsimple_lexize"}
metadata := testutils.DefaultMetadata(toc.OBJ_TEXT_SEARCH_TEMPLATE, false, false, true, false)
backup.PrintCreateTextSearchTemplateStatement(backupfile, tocfile, template, metadata)
testutils.ExpectEntry(tocfile.PredataEntries, 0, "public", "", "testtemplate", toc.OBJ_TEXT_SEARCH_TEMPLATE)
testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE TEXT SEARCH TEMPLATE public.testtemplate (
INIT = dsimple_init,
LEXIZE = dsimple_lexize
);`, `COMMENT ON TEXT SEARCH TEMPLATE public.testtemplate IS 'This is a text search template comment.';`)
})
})
Describe("PrintCreateTextSearchDictionaryStatement", func() {
It("prints a basic text search dictionary with comment", func() {
dictionary := backup.TextSearchDictionary{Oid: 1, Schema: "public", Name: "testdictionary", Template: "testschema.snowball", InitOption: "language = 'russian', stopwords = 'russian'"}
metadata := testutils.DefaultMetadata(toc.OBJ_TEXT_SEARCH_DICTIONARY, false, true, true, false)
backup.PrintCreateTextSearchDictionaryStatement(backupfile, tocfile, dictionary, metadata)
testutils.ExpectEntry(tocfile.PredataEntries, 0, "public", "", "testdictionary", toc.OBJ_TEXT_SEARCH_DICTIONARY)
testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE TEXT SEARCH DICTIONARY public.testdictionary (
TEMPLATE = testschema.snowball,
language = 'russian', stopwords = 'russian'
);`, `COMMENT ON TEXT SEARCH DICTIONARY public.testdictionary IS 'This is a text search dictionary comment.';`, `ALTER TEXT SEARCH DICTIONARY public.testdictionary OWNER TO testrole;`)
})
})
Describe("PrintCreateTextSearchConfigurationStatement", func() {
It("prints a basic text search configuration", func() {
configurations := backup.TextSearchConfiguration{Oid: 0, Schema: "public", Name: "testconfiguration", Parser: `pg_catalog."default"`, TokenToDicts: map[string][]string{}}
backup.PrintCreateTextSearchConfigurationStatement(backupfile, tocfile, configurations, backup.ObjectMetadata{})
testutils.AssertBufferContents(tocfile.PredataEntries, buffer, `CREATE TEXT SEARCH CONFIGURATION public.testconfiguration (
PARSER = pg_catalog."default"
);`)
})
It("prints a text search configuration with multiple mappings and comment", func() {
tokenToDicts := map[string][]string{"int": {"simple", "english_stem"}, "asciiword": {"english_stem"}}
configurations := backup.TextSearchConfiguration{Oid: 1, Schema: "public", Name: "testconfiguration", Parser: `pg_catalog."default"`, TokenToDicts: tokenToDicts}
metadata := testutils.DefaultMetadata(toc.OBJ_TEXT_SEARCH_CONFIGURATION, false, true, true, false)
backup.PrintCreateTextSearchConfigurationStatement(backupfile, tocfile, configurations, metadata)
testutils.ExpectEntry(tocfile.PredataEntries, 0, "public", "", "testconfiguration", toc.OBJ_TEXT_SEARCH_CONFIGURATION)
expectedStatements := []string{`CREATE TEXT SEARCH CONFIGURATION public.testconfiguration (
PARSER = pg_catalog."default"
);`, `ALTER TEXT SEARCH CONFIGURATION public.testconfiguration
ADD MAPPING FOR "asciiword" WITH english_stem;`,
`ALTER TEXT SEARCH CONFIGURATION public.testconfiguration
ADD MAPPING FOR "int" WITH simple, english_stem;`,
`COMMENT ON TEXT SEARCH CONFIGURATION public.testconfiguration IS 'This is a text search configuration comment.';`,
`ALTER TEXT SEARCH CONFIGURATION public.testconfiguration OWNER TO testrole;`}
testutils.AssertBufferContents(tocfile.PredataEntries, buffer, expectedStatements...)
})
})
})