blob: d6d1f742568766123569eadf36848df2086882dc [file]
package backup
/*
* This file contains structs and functions related to backing up metadata on the
* coordinator for objects relating to built-in text search that needs to be restored
* before data is restored.
*/
import (
"sort"
"strings"
"github.com/apache/cloudberry-backup/toc"
"github.com/apache/cloudberry-backup/utils"
)
func PrintCreateTextSearchParserStatement(metadataFile *utils.FileWithByteCount, objToc *toc.TOC, parser TextSearchParser, parserMetadata ObjectMetadata) {
start := metadataFile.ByteCount
metadataFile.MustPrintf("\n\nCREATE TEXT SEARCH PARSER %s (", parser.FQN())
metadataFile.MustPrintf("\n\tSTART = %s,", parser.StartFunc)
metadataFile.MustPrintf("\n\tGETTOKEN = %s,", parser.TokenFunc)
metadataFile.MustPrintf("\n\tEND = %s,", parser.EndFunc)
metadataFile.MustPrintf("\n\tLEXTYPES = %s", parser.LexTypesFunc)
if parser.HeadlineFunc != "" {
metadataFile.MustPrintf(",\n\tHEADLINE = %s", parser.HeadlineFunc)
}
metadataFile.MustPrintf("\n);")
section, entry := parser.GetMetadataEntry()
tier := globalTierMap[parser.GetUniqueID()]
objToc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount, tier)
PrintObjectMetadata(metadataFile, objToc, parserMetadata, parser, "", tier)
}
func PrintCreateTextSearchTemplateStatement(metadataFile *utils.FileWithByteCount, objToc *toc.TOC, template TextSearchTemplate, templateMetadata ObjectMetadata) {
start := metadataFile.ByteCount
metadataFile.MustPrintf("\n\nCREATE TEXT SEARCH TEMPLATE %s (", template.FQN())
if template.InitFunc != "" {
metadataFile.MustPrintf("\n\tINIT = %s,", template.InitFunc)
}
metadataFile.MustPrintf("\n\tLEXIZE = %s", template.LexizeFunc)
metadataFile.MustPrintf("\n);")
section, entry := template.GetMetadataEntry()
tier := globalTierMap[template.GetUniqueID()]
objToc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount, tier)
PrintObjectMetadata(metadataFile, objToc, templateMetadata, template, "", tier)
}
func PrintCreateTextSearchDictionaryStatement(metadataFile *utils.FileWithByteCount, objToc *toc.TOC, dictionary TextSearchDictionary, dictionaryMetadata ObjectMetadata) {
start := metadataFile.ByteCount
metadataFile.MustPrintf("\n\nCREATE TEXT SEARCH DICTIONARY %s (", dictionary.FQN())
metadataFile.MustPrintf("\n\tTEMPLATE = %s", dictionary.Template)
if dictionary.InitOption != "" {
metadataFile.MustPrintf(",\n\t%s", dictionary.InitOption)
}
metadataFile.MustPrintf("\n);")
section, entry := dictionary.GetMetadataEntry()
tier := globalTierMap[dictionary.GetUniqueID()]
objToc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount, tier)
PrintObjectMetadata(metadataFile, objToc, dictionaryMetadata, dictionary, "", tier)
}
func PrintCreateTextSearchConfigurationStatement(metadataFile *utils.FileWithByteCount, objToc *toc.TOC, configuration TextSearchConfiguration, configurationMetadata ObjectMetadata) {
start := metadataFile.ByteCount
metadataFile.MustPrintf("\n\nCREATE TEXT SEARCH CONFIGURATION %s (", configuration.FQN())
metadataFile.MustPrintf("\n\tPARSER = %s", configuration.Parser)
metadataFile.MustPrintf("\n);")
section, entry := configuration.GetMetadataEntry()
tier := globalTierMap[configuration.GetUniqueID()]
objToc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount, tier)
tokens := make([]string, 0)
for token := range configuration.TokenToDicts {
tokens = append(tokens, token)
}
sort.Strings(tokens)
for _, token := range tokens {
start := metadataFile.ByteCount
dicts := configuration.TokenToDicts[token]
metadataFile.MustPrintf("\n\nALTER TEXT SEARCH CONFIGURATION %s", configuration.FQN())
metadataFile.MustPrintf("\n\tADD MAPPING FOR \"%s\" WITH %s;", token, strings.Join(dicts, ", "))
objToc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount, tier)
}
PrintObjectMetadata(metadataFile, objToc, configurationMetadata, configuration, "", tier)
}