sql

package
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 12, 2020 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// BitTypeMinBits returns the minimum number of bits for Bit.
	BitTypeMinBits = 1
	// BitTypeMaxBits returns the maximum number of bits for Bit.
	BitTypeMaxBits = 64
)
View Source
const (
	CharacterSet_armscii8 CharacterSet = "armscii8"
	CharacterSet_ascii    CharacterSet = "ascii"
	CharacterSet_big5     CharacterSet = "big5"
	CharacterSet_binary   CharacterSet = "binary"
	CharacterSet_cp1250   CharacterSet = "cp1250"
	CharacterSet_cp1251   CharacterSet = "cp1251"
	CharacterSet_cp1256   CharacterSet = "cp1256"
	CharacterSet_cp1257   CharacterSet = "cp1257"
	CharacterSet_cp850    CharacterSet = "cp850"
	CharacterSet_cp852    CharacterSet = "cp852"
	CharacterSet_cp866    CharacterSet = "cp866"
	CharacterSet_cp932    CharacterSet = "cp932"
	CharacterSet_dec8     CharacterSet = "dec8"
	CharacterSet_eucjpms  CharacterSet = "eucjpms"
	CharacterSet_euckr    CharacterSet = "euckr"
	CharacterSet_gb18030  CharacterSet = "gb18030"
	CharacterSet_gb2312   CharacterSet = "gb2312"
	CharacterSet_gbk      CharacterSet = "gbk"
	CharacterSet_geostd8  CharacterSet = "geostd8"
	CharacterSet_greek    CharacterSet = "greek"
	CharacterSet_hebrew   CharacterSet = "hebrew"
	CharacterSet_hp8      CharacterSet = "hp8"
	CharacterSet_keybcs2  CharacterSet = "keybcs2"
	CharacterSet_koi8r    CharacterSet = "koi8r"
	CharacterSet_koi8u    CharacterSet = "koi8u"
	CharacterSet_latin1   CharacterSet = "latin1"
	CharacterSet_latin2   CharacterSet = "latin2"
	CharacterSet_latin5   CharacterSet = "latin5"
	CharacterSet_latin7   CharacterSet = "latin7"
	CharacterSet_macce    CharacterSet = "macce"
	CharacterSet_macroman CharacterSet = "macroman"
	CharacterSet_sjis     CharacterSet = "sjis"
	CharacterSet_swe7     CharacterSet = "swe7"
	CharacterSet_tis620   CharacterSet = "tis620"
	CharacterSet_ucs2     CharacterSet = "ucs2"
	CharacterSet_ujis     CharacterSet = "ujis"
	CharacterSet_utf16    CharacterSet = "utf16"
	CharacterSet_utf16le  CharacterSet = "utf16le"
	CharacterSet_utf32    CharacterSet = "utf32"
	CharacterSet_utf8                  = CharacterSet_utf8mb3
	CharacterSet_utf8mb3  CharacterSet = "utf8mb3"
	CharacterSet_utf8mb4  CharacterSet = "utf8mb4"

	Collation_Default                               = Collation_utf8mb4_0900_ai_ci
	Collation_armscii8_general_ci         Collation = "armscii8_general_ci"
	Collation_armscii8_bin                Collation = "armscii8_bin"
	Collation_ascii_general_ci            Collation = "ascii_general_ci"
	Collation_ascii_bin                   Collation = "ascii_bin"
	Collation_big5_chinese_ci             Collation = "big5_chinese_ci"
	Collation_big5_bin                    Collation = "big5_bin"
	Collation_binary                      Collation = "binary"
	Collation_cp1250_general_ci           Collation = "cp1250_general_ci"
	Collation_cp1250_czech_cs             Collation = "cp1250_czech_cs"
	Collation_cp1250_croatian_ci          Collation = "cp1250_croatian_ci"
	Collation_cp1250_bin                  Collation = "cp1250_bin"
	Collation_cp1250_polish_ci            Collation = "cp1250_polish_ci"
	Collation_cp1251_bulgarian_ci         Collation = "cp1251_bulgarian_ci"
	Collation_cp1251_ukrainian_ci         Collation = "cp1251_ukrainian_ci"
	Collation_cp1251_bin                  Collation = "cp1251_bin"
	Collation_cp1251_general_ci           Collation = "cp1251_general_ci"
	Collation_cp1251_general_cs           Collation = "cp1251_general_cs"
	Collation_cp1256_general_ci           Collation = "cp1256_general_ci"
	Collation_cp1256_bin                  Collation = "cp1256_bin"
	Collation_cp1257_lithuanian_ci        Collation = "cp1257_lithuanian_ci"
	Collation_cp1257_bin                  Collation = "cp1257_bin"
	Collation_cp1257_general_ci           Collation = "cp1257_general_ci"
	Collation_cp850_general_ci            Collation = "cp850_general_ci"
	Collation_cp850_bin                   Collation = "cp850_bin"
	Collation_cp852_general_ci            Collation = "cp852_general_ci"
	Collation_cp852_bin                   Collation = "cp852_bin"
	Collation_cp866_general_ci            Collation = "cp866_general_ci"
	Collation_cp866_bin                   Collation = "cp866_bin"
	Collation_cp932_japanese_ci           Collation = "cp932_japanese_ci"
	Collation_cp932_bin                   Collation = "cp932_bin"
	Collation_dec8_swedish_ci             Collation = "dec8_swedish_ci"
	Collation_dec8_bin                    Collation = "dec8_bin"
	Collation_eucjpms_japanese_ci         Collation = "eucjpms_japanese_ci"
	Collation_eucjpms_bin                 Collation = "eucjpms_bin"
	Collation_euckr_korean_ci             Collation = "euckr_korean_ci"
	Collation_euckr_bin                   Collation = "euckr_bin"
	Collation_gb18030_chinese_ci          Collation = "gb18030_chinese_ci"
	Collation_gb18030_bin                 Collation = "gb18030_bin"
	Collation_gb18030_unicode_520_ci      Collation = "gb18030_unicode_520_ci"
	Collation_gb2312_chinese_ci           Collation = "gb2312_chinese_ci"
	Collation_gb2312_bin                  Collation = "gb2312_bin"
	Collation_gbk_chinese_ci              Collation = "gbk_chinese_ci"
	Collation_gbk_bin                     Collation = "gbk_bin"
	Collation_geostd8_general_ci          Collation = "geostd8_general_ci"
	Collation_geostd8_bin                 Collation = "geostd8_bin"
	Collation_greek_general_ci            Collation = "greek_general_ci"
	Collation_greek_bin                   Collation = "greek_bin"
	Collation_hebrew_general_ci           Collation = "hebrew_general_ci"
	Collation_hebrew_bin                  Collation = "hebrew_bin"
	Collation_hp8_english_ci              Collation = "hp8_english_ci"
	Collation_hp8_bin                     Collation = "hp8_bin"
	Collation_keybcs2_general_ci          Collation = "keybcs2_general_ci"
	Collation_keybcs2_bin                 Collation = "keybcs2_bin"
	Collation_koi8r_general_ci            Collation = "koi8r_general_ci"
	Collation_koi8r_bin                   Collation = "koi8r_bin"
	Collation_koi8u_general_ci            Collation = "koi8u_general_ci"
	Collation_koi8u_bin                   Collation = "koi8u_bin"
	Collation_latin1_german1_ci           Collation = "latin1_german1_ci"
	Collation_latin1_swedish_ci           Collation = "latin1_swedish_ci"
	Collation_latin1_danish_ci            Collation = "latin1_danish_ci"
	Collation_latin1_german2_ci           Collation = "latin1_german2_ci"
	Collation_latin1_bin                  Collation = "latin1_bin"
	Collation_latin1_general_ci           Collation = "latin1_general_ci"
	Collation_latin1_general_cs           Collation = "latin1_general_cs"
	Collation_latin1_spanish_ci           Collation = "latin1_spanish_ci"
	Collation_latin2_czech_cs             Collation = "latin2_czech_cs"
	Collation_latin2_general_ci           Collation = "latin2_general_ci"
	Collation_latin2_hungarian_ci         Collation = "latin2_hungarian_ci"
	Collation_latin2_croatian_ci          Collation = "latin2_croatian_ci"
	Collation_latin2_bin                  Collation = "latin2_bin"
	Collation_latin5_turkish_ci           Collation = "latin5_turkish_ci"
	Collation_latin5_bin                  Collation = "latin5_bin"
	Collation_latin7_estonian_cs          Collation = "latin7_estonian_cs"
	Collation_latin7_general_ci           Collation = "latin7_general_ci"
	Collation_latin7_general_cs           Collation = "latin7_general_cs"
	Collation_latin7_bin                  Collation = "latin7_bin"
	Collation_macce_general_ci            Collation = "macce_general_ci"
	Collation_macce_bin                   Collation = "macce_bin"
	Collation_macroman_general_ci         Collation = "macroman_general_ci"
	Collation_macroman_bin                Collation = "macroman_bin"
	Collation_sjis_japanese_ci            Collation = "sjis_japanese_ci"
	Collation_sjis_bin                    Collation = "sjis_bin"
	Collation_swe7_swedish_ci             Collation = "swe7_swedish_ci"
	Collation_swe7_bin                    Collation = "swe7_bin"
	Collation_tis620_thai_ci              Collation = "tis620_thai_ci"
	Collation_tis620_bin                  Collation = "tis620_bin"
	Collation_ucs2_general_ci             Collation = "ucs2_general_ci"
	Collation_ucs2_bin                    Collation = "ucs2_bin"
	Collation_ucs2_unicode_ci             Collation = "ucs2_unicode_ci"
	Collation_ucs2_icelandic_ci           Collation = "ucs2_icelandic_ci"
	Collation_ucs2_latvian_ci             Collation = "ucs2_latvian_ci"
	Collation_ucs2_romanian_ci            Collation = "ucs2_romanian_ci"
	Collation_ucs2_slovenian_ci           Collation = "ucs2_slovenian_ci"
	Collation_ucs2_polish_ci              Collation = "ucs2_polish_ci"
	Collation_ucs2_estonian_ci            Collation = "ucs2_estonian_ci"
	Collation_ucs2_spanish_ci             Collation = "ucs2_spanish_ci"
	Collation_ucs2_swedish_ci             Collation = "ucs2_swedish_ci"
	Collation_ucs2_turkish_ci             Collation = "ucs2_turkish_ci"
	Collation_ucs2_czech_ci               Collation = "ucs2_czech_ci"
	Collation_ucs2_danish_ci              Collation = "ucs2_danish_ci"
	Collation_ucs2_lithuanian_ci          Collation = "ucs2_lithuanian_ci"
	Collation_ucs2_slovak_ci              Collation = "ucs2_slovak_ci"
	Collation_ucs2_spanish2_ci            Collation = "ucs2_spanish2_ci"
	Collation_ucs2_roman_ci               Collation = "ucs2_roman_ci"
	Collation_ucs2_persian_ci             Collation = "ucs2_persian_ci"
	Collation_ucs2_esperanto_ci           Collation = "ucs2_esperanto_ci"
	Collation_ucs2_hungarian_ci           Collation = "ucs2_hungarian_ci"
	Collation_ucs2_sinhala_ci             Collation = "ucs2_sinhala_ci"
	Collation_ucs2_german2_ci             Collation = "ucs2_german2_ci"
	Collation_ucs2_croatian_ci            Collation = "ucs2_croatian_ci"
	Collation_ucs2_unicode_520_ci         Collation = "ucs2_unicode_520_ci"
	Collation_ucs2_vietnamese_ci          Collation = "ucs2_vietnamese_ci"
	Collation_ucs2_general_mysql500_ci    Collation = "ucs2_general_mysql500_ci"
	Collation_ujis_japanese_ci            Collation = "ujis_japanese_ci"
	Collation_ujis_bin                    Collation = "ujis_bin"
	Collation_utf16_general_ci            Collation = "utf16_general_ci"
	Collation_utf16_bin                   Collation = "utf16_bin"
	Collation_utf16_unicode_ci            Collation = "utf16_unicode_ci"
	Collation_utf16_icelandic_ci          Collation = "utf16_icelandic_ci"
	Collation_utf16_latvian_ci            Collation = "utf16_latvian_ci"
	Collation_utf16_romanian_ci           Collation = "utf16_romanian_ci"
	Collation_utf16_slovenian_ci          Collation = "utf16_slovenian_ci"
	Collation_utf16_polish_ci             Collation = "utf16_polish_ci"
	Collation_utf16_estonian_ci           Collation = "utf16_estonian_ci"
	Collation_utf16_spanish_ci            Collation = "utf16_spanish_ci"
	Collation_utf16_swedish_ci            Collation = "utf16_swedish_ci"
	Collation_utf16_turkish_ci            Collation = "utf16_turkish_ci"
	Collation_utf16_czech_ci              Collation = "utf16_czech_ci"
	Collation_utf16_danish_ci             Collation = "utf16_danish_ci"
	Collation_utf16_lithuanian_ci         Collation = "utf16_lithuanian_ci"
	Collation_utf16_slovak_ci             Collation = "utf16_slovak_ci"
	Collation_utf16_spanish2_ci           Collation = "utf16_spanish2_ci"
	Collation_utf16_roman_ci              Collation = "utf16_roman_ci"
	Collation_utf16_persian_ci            Collation = "utf16_persian_ci"
	Collation_utf16_esperanto_ci          Collation = "utf16_esperanto_ci"
	Collation_utf16_hungarian_ci          Collation = "utf16_hungarian_ci"
	Collation_utf16_sinhala_ci            Collation = "utf16_sinhala_ci"
	Collation_utf16_german2_ci            Collation = "utf16_german2_ci"
	Collation_utf16_croatian_ci           Collation = "utf16_croatian_ci"
	Collation_utf16_unicode_520_ci        Collation = "utf16_unicode_520_ci"
	Collation_utf16_vietnamese_ci         Collation = "utf16_vietnamese_ci"
	Collation_utf16le_general_ci          Collation = "utf16le_general_ci"
	Collation_utf16le_bin                 Collation = "utf16le_bin"
	Collation_utf32_general_ci            Collation = "utf32_general_ci"
	Collation_utf32_bin                   Collation = "utf32_bin"
	Collation_utf32_unicode_ci            Collation = "utf32_unicode_ci"
	Collation_utf32_icelandic_ci          Collation = "utf32_icelandic_ci"
	Collation_utf32_latvian_ci            Collation = "utf32_latvian_ci"
	Collation_utf32_romanian_ci           Collation = "utf32_romanian_ci"
	Collation_utf32_slovenian_ci          Collation = "utf32_slovenian_ci"
	Collation_utf32_polish_ci             Collation = "utf32_polish_ci"
	Collation_utf32_estonian_ci           Collation = "utf32_estonian_ci"
	Collation_utf32_spanish_ci            Collation = "utf32_spanish_ci"
	Collation_utf32_swedish_ci            Collation = "utf32_swedish_ci"
	Collation_utf32_turkish_ci            Collation = "utf32_turkish_ci"
	Collation_utf32_czech_ci              Collation = "utf32_czech_ci"
	Collation_utf32_danish_ci             Collation = "utf32_danish_ci"
	Collation_utf32_lithuanian_ci         Collation = "utf32_lithuanian_ci"
	Collation_utf32_slovak_ci             Collation = "utf32_slovak_ci"
	Collation_utf32_spanish2_ci           Collation = "utf32_spanish2_ci"
	Collation_utf32_roman_ci              Collation = "utf32_roman_ci"
	Collation_utf32_persian_ci            Collation = "utf32_persian_ci"
	Collation_utf32_esperanto_ci          Collation = "utf32_esperanto_ci"
	Collation_utf32_hungarian_ci          Collation = "utf32_hungarian_ci"
	Collation_utf32_sinhala_ci            Collation = "utf32_sinhala_ci"
	Collation_utf32_german2_ci            Collation = "utf32_german2_ci"
	Collation_utf32_croatian_ci           Collation = "utf32_croatian_ci"
	Collation_utf32_unicode_520_ci        Collation = "utf32_unicode_520_ci"
	Collation_utf32_vietnamese_ci         Collation = "utf32_vietnamese_ci"
	Collation_utf8_general_ci                       = Collation_utf8mb3_general_ci
	Collation_utf8_tolower_ci                       = Collation_utf8mb3_tolower_ci
	Collation_utf8_bin                              = Collation_utf8mb3_bin
	Collation_utf8_unicode_ci                       = Collation_utf8mb3_unicode_ci
	Collation_utf8_icelandic_ci                     = Collation_utf8mb3_icelandic_ci
	Collation_utf8_latvian_ci                       = Collation_utf8mb3_latvian_ci
	Collation_utf8_romanian_ci                      = Collation_utf8mb3_romanian_ci
	Collation_utf8_slovenian_ci                     = Collation_utf8mb3_slovenian_ci
	Collation_utf8_polish_ci                        = Collation_utf8mb3_polish_ci
	Collation_utf8_estonian_ci                      = Collation_utf8mb3_estonian_ci
	Collation_utf8_spanish_ci                       = Collation_utf8mb3_spanish_ci
	Collation_utf8_swedish_ci                       = Collation_utf8mb3_swedish_ci
	Collation_utf8_turkish_ci                       = Collation_utf8mb3_turkish_ci
	Collation_utf8_czech_ci                         = Collation_utf8mb3_czech_ci
	Collation_utf8_danish_ci                        = Collation_utf8mb3_danish_ci
	Collation_utf8_lithuanian_ci                    = Collation_utf8mb3_lithuanian_ci
	Collation_utf8_slovak_ci                        = Collation_utf8mb3_slovak_ci
	Collation_utf8_spanish2_ci                      = Collation_utf8mb3_spanish2_ci
	Collation_utf8_roman_ci                         = Collation_utf8mb3_roman_ci
	Collation_utf8_persian_ci                       = Collation_utf8mb3_persian_ci
	Collation_utf8_esperanto_ci                     = Collation_utf8mb3_esperanto_ci
	Collation_utf8_hungarian_ci                     = Collation_utf8mb3_hungarian_ci
	Collation_utf8_sinhala_ci                       = Collation_utf8mb3_sinhala_ci
	Collation_utf8_german2_ci                       = Collation_utf8mb3_german2_ci
	Collation_utf8_croatian_ci                      = Collation_utf8mb3_croatian_ci
	Collation_utf8_unicode_520_ci                   = Collation_utf8mb3_unicode_520_ci
	Collation_utf8_vietnamese_ci                    = Collation_utf8mb3_vietnamese_ci
	Collation_utf8_general_mysql500_ci              = Collation_utf8mb3_general_mysql500_ci
	Collation_utf8mb3_general_ci          Collation = "utf8mb3_general_ci"
	Collation_utf8mb3_tolower_ci          Collation = "utf8mb3_tolower_ci"
	Collation_utf8mb3_bin                 Collation = "utf8mb3_bin"
	Collation_utf8mb3_unicode_ci          Collation = "utf8mb3_unicode_ci"
	Collation_utf8mb3_icelandic_ci        Collation = "utf8mb3_icelandic_ci"
	Collation_utf8mb3_latvian_ci          Collation = "utf8mb3_latvian_ci"
	Collation_utf8mb3_romanian_ci         Collation = "utf8mb3_romanian_ci"
	Collation_utf8mb3_slovenian_ci        Collation = "utf8mb3_slovenian_ci"
	Collation_utf8mb3_polish_ci           Collation = "utf8mb3_polish_ci"
	Collation_utf8mb3_estonian_ci         Collation = "utf8mb3_estonian_ci"
	Collation_utf8mb3_spanish_ci          Collation = "utf8mb3_spanish_ci"
	Collation_utf8mb3_swedish_ci          Collation = "utf8mb3_swedish_ci"
	Collation_utf8mb3_turkish_ci          Collation = "utf8mb3_turkish_ci"
	Collation_utf8mb3_czech_ci            Collation = "utf8mb3_czech_ci"
	Collation_utf8mb3_danish_ci           Collation = "utf8mb3_danish_ci"
	Collation_utf8mb3_lithuanian_ci       Collation = "utf8mb3_lithuanian_ci"
	Collation_utf8mb3_slovak_ci           Collation = "utf8mb3_slovak_ci"
	Collation_utf8mb3_spanish2_ci         Collation = "utf8mb3_spanish2_ci"
	Collation_utf8mb3_roman_ci            Collation = "utf8mb3_roman_ci"
	Collation_utf8mb3_persian_ci          Collation = "utf8mb3_persian_ci"
	Collation_utf8mb3_esperanto_ci        Collation = "utf8mb3_esperanto_ci"
	Collation_utf8mb3_hungarian_ci        Collation = "utf8mb3_hungarian_ci"
	Collation_utf8mb3_sinhala_ci          Collation = "utf8mb3_sinhala_ci"
	Collation_utf8mb3_german2_ci          Collation = "utf8mb3_german2_ci"
	Collation_utf8mb3_croatian_ci         Collation = "utf8mb3_croatian_ci"
	Collation_utf8mb3_unicode_520_ci      Collation = "utf8mb3_unicode_520_ci"
	Collation_utf8mb3_vietnamese_ci       Collation = "utf8mb3_vietnamese_ci"
	Collation_utf8mb3_general_mysql500_ci Collation = "utf8mb3_general_mysql500_ci"
	Collation_utf8mb4_general_ci          Collation = "utf8mb4_general_ci"
	Collation_utf8mb4_bin                 Collation = "utf8mb4_bin"
	Collation_utf8mb4_unicode_ci          Collation = "utf8mb4_unicode_ci"
	Collation_utf8mb4_icelandic_ci        Collation = "utf8mb4_icelandic_ci"
	Collation_utf8mb4_latvian_ci          Collation = "utf8mb4_latvian_ci"
	Collation_utf8mb4_romanian_ci         Collation = "utf8mb4_romanian_ci"
	Collation_utf8mb4_slovenian_ci        Collation = "utf8mb4_slovenian_ci"
	Collation_utf8mb4_polish_ci           Collation = "utf8mb4_polish_ci"
	Collation_utf8mb4_estonian_ci         Collation = "utf8mb4_estonian_ci"
	Collation_utf8mb4_spanish_ci          Collation = "utf8mb4_spanish_ci"
	Collation_utf8mb4_swedish_ci          Collation = "utf8mb4_swedish_ci"
	Collation_utf8mb4_turkish_ci          Collation = "utf8mb4_turkish_ci"
	Collation_utf8mb4_czech_ci            Collation = "utf8mb4_czech_ci"
	Collation_utf8mb4_danish_ci           Collation = "utf8mb4_danish_ci"
	Collation_utf8mb4_lithuanian_ci       Collation = "utf8mb4_lithuanian_ci"
	Collation_utf8mb4_slovak_ci           Collation = "utf8mb4_slovak_ci"
	Collation_utf8mb4_spanish2_ci         Collation = "utf8mb4_spanish2_ci"
	Collation_utf8mb4_roman_ci            Collation = "utf8mb4_roman_ci"
	Collation_utf8mb4_persian_ci          Collation = "utf8mb4_persian_ci"
	Collation_utf8mb4_esperanto_ci        Collation = "utf8mb4_esperanto_ci"
	Collation_utf8mb4_hungarian_ci        Collation = "utf8mb4_hungarian_ci"
	Collation_utf8mb4_sinhala_ci          Collation = "utf8mb4_sinhala_ci"
	Collation_utf8mb4_german2_ci          Collation = "utf8mb4_german2_ci"
	Collation_utf8mb4_croatian_ci         Collation = "utf8mb4_croatian_ci"
	Collation_utf8mb4_unicode_520_ci      Collation = "utf8mb4_unicode_520_ci"
	Collation_utf8mb4_vietnamese_ci       Collation = "utf8mb4_vietnamese_ci"
	Collation_utf8mb4_0900_ai_ci          Collation = "utf8mb4_0900_ai_ci"
	Collation_utf8mb4_de_pb_0900_ai_ci    Collation = "utf8mb4_de_pb_0900_ai_ci"
	Collation_utf8mb4_is_0900_ai_ci       Collation = "utf8mb4_is_0900_ai_ci"
	Collation_utf8mb4_lv_0900_ai_ci       Collation = "utf8mb4_lv_0900_ai_ci"
	Collation_utf8mb4_ro_0900_ai_ci       Collation = "utf8mb4_ro_0900_ai_ci"
	Collation_utf8mb4_sl_0900_ai_ci       Collation = "utf8mb4_sl_0900_ai_ci"
	Collation_utf8mb4_pl_0900_ai_ci       Collation = "utf8mb4_pl_0900_ai_ci"
	Collation_utf8mb4_et_0900_ai_ci       Collation = "utf8mb4_et_0900_ai_ci"
	Collation_utf8mb4_es_0900_ai_ci       Collation = "utf8mb4_es_0900_ai_ci"
	Collation_utf8mb4_sv_0900_ai_ci       Collation = "utf8mb4_sv_0900_ai_ci"
	Collation_utf8mb4_tr_0900_ai_ci       Collation = "utf8mb4_tr_0900_ai_ci"
	Collation_utf8mb4_cs_0900_ai_ci       Collation = "utf8mb4_cs_0900_ai_ci"
	Collation_utf8mb4_da_0900_ai_ci       Collation = "utf8mb4_da_0900_ai_ci"
	Collation_utf8mb4_lt_0900_ai_ci       Collation = "utf8mb4_lt_0900_ai_ci"
	Collation_utf8mb4_sk_0900_ai_ci       Collation = "utf8mb4_sk_0900_ai_ci"
	Collation_utf8mb4_es_trad_0900_ai_ci  Collation = "utf8mb4_es_trad_0900_ai_ci"
	Collation_utf8mb4_la_0900_ai_ci       Collation = "utf8mb4_la_0900_ai_ci"
	Collation_utf8mb4_eo_0900_ai_ci       Collation = "utf8mb4_eo_0900_ai_ci"
	Collation_utf8mb4_hu_0900_ai_ci       Collation = "utf8mb4_hu_0900_ai_ci"
	Collation_utf8mb4_hr_0900_ai_ci       Collation = "utf8mb4_hr_0900_ai_ci"
	Collation_utf8mb4_vi_0900_ai_ci       Collation = "utf8mb4_vi_0900_ai_ci"
	Collation_utf8mb4_0900_as_cs          Collation = "utf8mb4_0900_as_cs"
	Collation_utf8mb4_de_pb_0900_as_cs    Collation = "utf8mb4_de_pb_0900_as_cs"
	Collation_utf8mb4_is_0900_as_cs       Collation = "utf8mb4_is_0900_as_cs"
	Collation_utf8mb4_lv_0900_as_cs       Collation = "utf8mb4_lv_0900_as_cs"
	Collation_utf8mb4_ro_0900_as_cs       Collation = "utf8mb4_ro_0900_as_cs"
	Collation_utf8mb4_sl_0900_as_cs       Collation = "utf8mb4_sl_0900_as_cs"
	Collation_utf8mb4_pl_0900_as_cs       Collation = "utf8mb4_pl_0900_as_cs"
	Collation_utf8mb4_et_0900_as_cs       Collation = "utf8mb4_et_0900_as_cs"
	Collation_utf8mb4_es_0900_as_cs       Collation = "utf8mb4_es_0900_as_cs"
	Collation_utf8mb4_sv_0900_as_cs       Collation = "utf8mb4_sv_0900_as_cs"
	Collation_utf8mb4_tr_0900_as_cs       Collation = "utf8mb4_tr_0900_as_cs"
	Collation_utf8mb4_cs_0900_as_cs       Collation = "utf8mb4_cs_0900_as_cs"
	Collation_utf8mb4_da_0900_as_cs       Collation = "utf8mb4_da_0900_as_cs"
	Collation_utf8mb4_lt_0900_as_cs       Collation = "utf8mb4_lt_0900_as_cs"
	Collation_utf8mb4_sk_0900_as_cs       Collation = "utf8mb4_sk_0900_as_cs"
	Collation_utf8mb4_es_trad_0900_as_cs  Collation = "utf8mb4_es_trad_0900_as_cs"
	Collation_utf8mb4_la_0900_as_cs       Collation = "utf8mb4_la_0900_as_cs"
	Collation_utf8mb4_eo_0900_as_cs       Collation = "utf8mb4_eo_0900_as_cs"
	Collation_utf8mb4_hu_0900_as_cs       Collation = "utf8mb4_hu_0900_as_cs"
	Collation_utf8mb4_hr_0900_as_cs       Collation = "utf8mb4_hr_0900_as_cs"
	Collation_utf8mb4_vi_0900_as_cs       Collation = "utf8mb4_vi_0900_as_cs"
	Collation_utf8mb4_ja_0900_as_cs       Collation = "utf8mb4_ja_0900_as_cs"
	Collation_utf8mb4_ja_0900_as_cs_ks    Collation = "utf8mb4_ja_0900_as_cs_ks"
	Collation_utf8mb4_0900_as_ci          Collation = "utf8mb4_0900_as_ci"
	Collation_utf8mb4_ru_0900_ai_ci       Collation = "utf8mb4_ru_0900_ai_ci"
	Collation_utf8mb4_ru_0900_as_cs       Collation = "utf8mb4_ru_0900_as_cs"
	Collation_utf8mb4_zh_0900_as_cs       Collation = "utf8mb4_zh_0900_as_cs"
	Collation_utf8mb4_0900_bin            Collation = "utf8mb4_0900_bin"
)

Character sets and collations were obtained from a fresh install of MySQL 8.0.17. The character sets were obtained by running `SHOW CHARACTER SET;`. The collations were obtained by running `SHOW COLLATION;`. utf8mb3 is not listed from the above commands, and was obtained from: https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

View Source
const (
	// DateLayout is the layout of the MySQL date format in the representation
	// Go understands.
	DateLayout = "2006-01-02"

	// TimestampDatetimeLayout is the formatting string with the layout of the timestamp
	// using the format of Go "time" package.
	TimestampDatetimeLayout = "2006-01-02 15:04:05.999999"
)
View Source
const (
	// DecimalTypeMaxPrecision returns the maximum precision allowed for the Decimal type.
	DecimalTypeMaxPrecision = 65
	// DecimalTypeMaxScale returns the maximum scale allowed for the Decimal type, assuming the
	// maximum precision is used. For a maximum scale that is relative to the precision of a given
	// decimal type, use its MaximumScale function.
	DecimalTypeMaxScale = 30
)
View Source
const (
	// EnumTypeMinElements returns the minimum number of enumerations for the Enum type.
	EnumTypeMinElements = 1
	// EnumTypeMaxElements returns the maximum number of enumerations for the Enum type.
	EnumTypeMaxElements = 65535
)
View Source
const (
	// InformationSchemaDatabaseName is the name of the information schema database.
	InformationSchemaDatabaseName = "information_schema"
	// FilesTableName is the name of the files table.
	FilesTableName = "files"
	// ColumnStatisticsTableName is the name of the column statistics table.
	ColumnStatisticsTableName = "column_statistics"
	// TablesTableName is the name of tables table.
	TablesTableName = "tables"
	// ColumnsTableName is the name of columns table.
	ColumnsTableName = "columns"
	// SchemataTableName is the name of the schemata table.
	SchemataTableName = "schemata"
	// CollationsTableName is the name of the collations table.
	CollationsTableName = "collations"
	// StatisticsTableName is the name of the statistics table.
	StatisticsTableName = "statistics"
	// TableConstraintsTableName is the name of the table_constraints table.
	TableConstraintsTableName = "table_constraints"
	// ReferentialConstraintsTableName is the name of the table_constraints table.
	ReferentialConstraintsTableName = "referential_constraints"
	// KeyColumnUsageTableName is the name of the key_column_usage table.
	KeyColumnUsageTableName = "key_column_usage"
	// TriggersTableName is the name of the triggers table.
	TriggersTableName = "triggers"
	// EventsTableName is the name of the events table.
	EventsTableName = "events"
	// RoutinesTableName is the name of the routines table.
	RoutinesTableName = "routines"
	// ViewsTableName is the name of the views table.
	ViewsTableName = "views"
	// UserPrivilegesTableName is the name of the user_privileges table
	UserPrivilegesTableName = "user_privileges"
)
View Source
const (
	DefaultCollation    = "utf8_bin"
	DefaultCharacterSet = "utf8mb4"
)
View Source
const (
	// Numeric representation of False as defined by MySQL.
	False = int8(0)
	// Numeric representation of True as defined by MySQL.
	True = int8(1)
)
View Source
const (
	CurrentDBSessionVar  = "current_database"
	AutoCommitSessionVar = "autocommit"
)
View Source
const ChecksumKey = "checksum"

ChecksumKey is the key in an index config to store the checksum.

View Source
const IndexBatchSize = uint64(10000)

IndexBatchSize is the number of rows to save at a time when creating indexes.

View Source
const OkResultColumnName = "__ok_result__"

OkResultColumnName should be used as the schema column name for Nodes that return an OkResult

View Source
const (
	// QueryKey to access query in the context.
	QueryKey key = iota
)
View Source
const (
	// SetTypeMaxElements returns the maximum number of elements for the Set type.
	SetTypeMaxElements = 64
)

Variables

View Source
var (
	ErrCharacterSetNotSupported = errors.NewKind("Unknown character set: %v")
	ErrCollationNotSupported    = errors.NewKind("Unknown collation: %v")
)
View Source
var (
	// ErrInvalidType is thrown when there is an unexpected type at some part of
	// the execution tree.
	ErrInvalidType = errors.NewKind("invalid type: %s")

	// ErrTableAlreadyExists is thrown when someone tries to create a
	// table with a name of an existing one
	ErrTableAlreadyExists = errors.NewKind("table with name %s already exists")

	// ErrTableNotFound is returned when the table is not available from the
	// current scope.
	ErrTableNotFound = errors.NewKind("table not found: %s")

	//ErrUnexpectedRowLength is thrown when the obtained row has more columns than the schema
	ErrUnexpectedRowLength = errors.NewKind("expected %d values, got %d")

	// ErrInvalidChildrenNumber is returned when the WithChildren method of a
	// node or expression is called with an invalid number of arguments.
	ErrInvalidChildrenNumber = errors.NewKind("%T: invalid children number, got %d, expected %d")

	// ErrInvalidChildType is returned when the WithChildren method of a
	// node or expression is called with an invalid child type. This error is indicative of a bug.
	ErrInvalidChildType = errors.NewKind("%T: invalid child type, got %T, expected %T")

	// ErrDeleteRowNotFound
	ErrDeleteRowNotFound = errors.NewKind("row was not found when attempting to delete")

	// ErrDuplicateAlias should be returned when a query contains a duplicate alias / table name.
	ErrDuplicateAliasOrTable = errors.NewKind("Not unique table/alias: %s")

	// ErrUniqueKeyViolation is returned when a unique key constraint is violated
	ErrUniqueKeyViolation = errors.NewKind("duplicate unique key for %s")
)
View Source
var (
	// ErrConvertingToTime is thrown when a value cannot be converted to a Time
	ErrConvertingToTime = errors.NewKind("value %q can't be converted to time.Time")

	ErrConvertingToTimeOutOfRange = errors.NewKind("value %q is outside of %v range")

	// TimestampDatetimeLayouts hold extra timestamps allowed for parsing. It does
	// not have all the layouts supported by mysql. Missing are two digit year
	// versions of common cases and dates that use non common separators.
	//
	// https://github.com/MariaDB/server/blob/mysql-5.5.36/sql-common/my_time.c#L124
	TimestampDatetimeLayouts = []string{
		"2006-01-02 15:04:05.999999",
		"2006-01-02",
		time.RFC3339,
		time.RFC3339Nano,
		"20060102150405",
		"20060102",
	}

	// Date is a date with day, month and year.
	Date = MustCreateDatetimeType(sqltypes.Date)
	// Datetime is a date and a time
	Datetime = MustCreateDatetimeType(sqltypes.Datetime)
	// Timestamp is an UNIX timestamp.
	Timestamp = MustCreateDatetimeType(sqltypes.Timestamp)
)
View Source
var (
	ErrConvertingToDecimal   = errors.NewKind("value %v is not a valid Decimal")
	ErrConvertToDecimalLimit = errors.NewKind("value of Decimal is too large for type")
	ErrMarshalNullDecimal    = errors.NewKind("Decimal cannot marshal a null value")
)
View Source
var (
	ErrConvertingToEnum  = errors.NewKind("value %v is not valid for this Enum")
	ErrUnmarshallingEnum = errors.NewKind("value %v is not a marshalled value for this Enum")
)
View Source
var (
	// ErrIndexIDAlreadyRegistered is the error returned when there is already
	// an index with the same ID.
	ErrIndexIDAlreadyRegistered = errors.NewKind("an index with id %q has already been registered")

	// ErrIndexExpressionAlreadyRegistered is the error returned when there is
	// already an index with the same expression.
	ErrIndexExpressionAlreadyRegistered = errors.NewKind("there is already an index registered for the expressions: %s")

	// ErrIndexNotFound is returned when the index could not be found.
	ErrIndexNotFound = errors.NewKind("index %q	was not found")

	// ErrIndexDeleteInvalidStatus is returned when the index trying to delete
	// does not have a ready or outdated state.
	ErrIndexDeleteInvalidStatus = errors.NewKind("can't delete index %q because it's not ready for removal")
)
View Source
var (
	ErrOutOfRange = errors.NewKind("%v out of range for %v")

	// Boolean is a synonym for TINYINT
	Boolean = Int8
	// Int8 is an integer of 8 bits
	Int8 = MustCreateNumberType(sqltypes.Int8)
	// Uint8 is an unsigned integer of 8 bits
	Uint8 = MustCreateNumberType(sqltypes.Uint8)
	// Int16 is an integer of 16 bits
	Int16 = MustCreateNumberType(sqltypes.Int16)
	// Uint16 is an unsigned integer of 16 bits
	Uint16 = MustCreateNumberType(sqltypes.Uint16)
	// Int24 is an integer of 24 bits.
	Int24 = MustCreateNumberType(sqltypes.Int24)
	// Uint24 is an unsigned integer of 24 bits.
	Uint24 = MustCreateNumberType(sqltypes.Uint24)
	// Int32 is an integer of 32 bits.
	Int32 = MustCreateNumberType(sqltypes.Int32)
	// Uint32 is an unsigned integer of 32 bits.
	Uint32 = MustCreateNumberType(sqltypes.Uint32)
	// Int64 is an integer of 64 bytes.
	Int64 = MustCreateNumberType(sqltypes.Int64)
	// Uint64 is an unsigned integer of 64 bits.
	Uint64 = MustCreateNumberType(sqltypes.Uint64)
	// Float32 is a floating point number of 32 bits.
	Float32 = MustCreateNumberType(sqltypes.Float32)
	// Float64 is a floating point number of 64 bits.
	Float64 = MustCreateNumberType(sqltypes.Float64)
)
View Source
var (
	ErrConvertingToSet   = errors.NewKind("value %v is not valid for this set")
	ErrDuplicateEntrySet = errors.NewKind("duplicate entry: %v")
	ErrInvalidSetValue   = errors.NewKind("value %v was not found in the set")
	ErrTooLargeForSet    = errors.NewKind(`value "%v" is too large for this set`)
)
View Source
var (
	// ErrLengthTooLarge is thrown when a string's length is too large given the other parameters.
	ErrLengthTooLarge    = errors.NewKind("length is %v but max allowed is %v")
	ErrLengthBeyondLimit = errors.NewKind("string is too large for column")
	ErrBinaryCollation   = errors.NewKind("binary types must have the binary collation")

	TinyText   = MustCreateStringWithDefaults(sqltypes.Text, tinyTextBlobMax/Collation_Default.CharacterSet().MaxLength())
	Text       = MustCreateStringWithDefaults(sqltypes.Text, textBlobMax/Collation_Default.CharacterSet().MaxLength())
	MediumText = MustCreateStringWithDefaults(sqltypes.Text, mediumTextBlobMax/Collation_Default.CharacterSet().MaxLength())
	LongText   = MustCreateStringWithDefaults(sqltypes.Text, longTextBlobMax)
	TinyBlob   = MustCreateBinary(sqltypes.Blob, tinyTextBlobMax)
	Blob       = MustCreateBinary(sqltypes.Blob, textBlobMax)
	MediumBlob = MustCreateBinary(sqltypes.Blob, mediumTextBlobMax)
	LongBlob   = MustCreateBinary(sqltypes.Blob, longTextBlobMax)
)
View Source
var (
	// ErrNodeNotWritten is returned when the children are printed before the node.
	ErrNodeNotWritten = errors.New("treeprinter: a child was written before the node")
	// ErrNodeAlreadyWritten is returned when the node has already been written.
	ErrNodeAlreadyWritten = errors.New("treeprinter: node already written")
	// ErrChildrenAlreadyWritten is returned when the children have already been written.
	ErrChildrenAlreadyWritten = errors.New("treeprinter: children already written")
)
View Source
var (
	// ErrNotTuple is returned when the value is not a tuple.
	ErrNotTuple = errors.NewKind("value of type %T is not a tuple")

	// ErrInvalidColumnNumber is returned when a tuple has an invalid number of
	// arguments.
	ErrInvalidColumnNumber = errors.NewKind("tuple should contain %d column(s), but has %d")

	ErrInvalidBaseType = errors.NewKind("%v is not a valid %v base type")

	// ErrNotArray is returned when the value is not an array.
	ErrNotArray = errors.NewKind("value of type %T is not an array")

	// ErrConvertToSQL is returned when Convert failed.
	// It makes an error less verbose comparing to what spf13/cast returns.
	ErrConvertToSQL = errors.NewKind("incompatible conversion to SQL type: %s")
)
View Source
var (
	ErrExistingView    = errors.NewKind("the view %s.%s already exists in the registry")
	ErrNonExistingView = errors.NewKind("the view %s.%s does not exist in the registry")
)
View Source
var ErrAsOfNotSupported = errors.NewKind("AS OF not supported for database %s")

ErrAsOfNotSupported is thrown when an AS OF query is run on a database that can't support it

View Source
var ErrDatabaseNotFound = errors.NewKind("database not found: %s")

ErrDatabaseNotFound is thrown when a database is not found

View Source
var ErrFunctionAlreadyRegistered = errors.NewKind("function '%s' is already registered")

ErrFunctionAlreadyRegistered is thrown when a function is already registered

View Source
var ErrFunctionNotFound = errors.NewKind("function: '%s' not found")

ErrFunctionNotFound is thrown when a function is not found

View Source
var ErrIncompatibleAsOf = errors.NewKind("incompatible use of AS OF: %s")

ErrIncompatibleAsOf is thrown when an AS OF clause is used in an incompatible manner, such as when using an AS OF expression with a view when the view definition has its own AS OF expressions.

View Source
var ErrInvalidArgumentNumber = errors.NewKind("function '%s' expected %v arguments, %v received")

ErrInvalidArgumentNumber is returned when the number of arguments to call a function is different from the function arity.

View Source
var ErrKeyNotFound = errors.NewKind("memory: key %d not found in cache")

ErrKeyNotFound is returned when the key could not be found in the cache.

View Source
var ErrNoDatabaseSelected = errors.NewKind("no database selected")

ErrNoDatabaseSelected is thrown when a database is not selected and the query requires one

View Source
var ErrNoMemoryAvailable = errors.NewKind("no memory available")

ErrNoMemoryAvailable is returned when there is no more available memory.

View Source
var ErrNotGenerator = errors.NewKind("cannot convert value of type %T to a generator")

ErrNotGenerator is returned when the value cannot be converted to a generator.

View Source
var ErrPidAlreadyUsed = errors.NewKind("pid %d is already in use")

ErrPidAlreadyUsed is returned when the pid is already registered.

View Source
var (
	// ErrUnexpectedType is thrown when a received type is not the expected
	ErrUnexpectedType = errors.NewKind("value at %d has unexpected type: %s")
)
View Source
var OkResultColumnType = Int64

OkResultColumnType should be used as the schema column type for Nodes that return an OkResult

View Source
var OkResultSchema = Schema{
	{
		Name: OkResultColumnName,
		Type: OkResultColumnType,
	},
}

OkResultSchema should be used as the schema of Nodes that return an OkResult

Functions

func AreComparable

func AreComparable(types ...Type) bool

AreComparable returns whether the given types are either the same or similar enough that values can meaningfully be compared across all permutations. Int8 and Int64 are comparable types, where as VarChar and Int64 are not. In the case of the latter example, not all possible values of a VarChar are comparable to an Int64, while this is true for the former example.

func CacheKey

func CacheKey(v interface{}) uint64

CacheKey returns a hash of the given value to be used as key in a cache.

func ConvertToBool

func ConvertToBool(v interface{}) (bool, error)

func DBTableIter

func DBTableIter(ctx *Context, db Database, cb func(Table) (cont bool, err error)) error

DBTableIter iterates over all tables returned by db.GetTableNames() calling cb for each one until all tables have been processed, or an error is returned from the callback, or the cont flag is false when returned from the callback.

func DefaultSessionConfig

func DefaultSessionConfig() map[string]TypedValue

DefaultSessionConfig returns default values for session variables

func EvaluateCondition

func EvaluateCondition(ctx *Context, cond Expression, row Row) (bool, error)

EvaluateCondition evaluates a condition, which is an expression whose value will be coerced to boolean.

func GetTableNameInsensitive

func GetTableNameInsensitive(tblName string, tableNames []string) (string, bool)

GetTableNameInsensitive implements a case insensitive search of a slice of table names. It looks for exact matches first. If no exact matches are found then any table matching the name case insensitively should be returned. If there is more than one table that matches a case insensitive comparison the resolution strategy is not defined.

func HasAvailableMemory

func HasAvailableMemory(r Reporter) bool

HasAvailableMemory reports whether more memory is available to the program if it hasn't reached the max memory limit.

func HasDefaultValue

func HasDefaultValue(s Session, key string) (bool, interface{})

HasDefaultValue checks if session variable value is the default one.

func Inspect

func Inspect(expr Expression, f func(Expression) bool)

Inspect traverses the plan in depth-first order: It starts by calling f(expr); expr must not be nil. If f returns true, Inspect invokes f recursively for each of the children of expr, followed by a call of f(nil).

func IsArray

func IsArray(t Type) bool

IsArray returns whether the given type is an array.

func IsBlob

func IsBlob(t Type) bool

IsBlob checks if t is BINARY, VARBINARY, or BLOB

func IsDecimal

func IsDecimal(t Type) bool

IsDecimal checks if t is a DECIMAL type.

func IsFloat

func IsFloat(t Type) bool

IsFloat checks if t is float type.

func IsInteger

func IsInteger(t Type) bool

IsInteger checks if t is an integer type.

func IsNull

func IsNull(ex Expression) bool

IsNull returns true if expression is nil or is Null Type, otherwise false.

func IsNumber

func IsNumber(t Type) bool

IsNumber checks if t is a number type

func IsSigned

func IsSigned(t Type) bool

IsSigned checks if t is a signed type.

func IsText

func IsText(t Type) bool

IsText checks if t is a text type.

func IsTextOnly

func IsTextOnly(t Type) bool

IsTextOnly checks if t is CHAR, VARCHAR, or one of the TEXTs.

func IsTime

func IsTime(t Type) bool

IsTime checks if t is a timestamp, date or datetime

func IsTuple

func IsTuple(t Type) bool

IsTuple checks if t is a tuple type. Note that tupleType instances with just 1 value are not considered as a tuple, but a parenthesized value.

func IsUnsigned

func IsUnsigned(t Type) bool

IsUnsigned checks if t is an unsigned type.

func NumColumns

func NumColumns(t Type) int

NumColumns returns the number of columns in a type. This is one for all types, except tuples.

func ValidateTime

func ValidateTime(t time.Time) interface{}

ValidateTime receives a time and returns either that time or nil if it's not a valid time.

func Walk

func Walk(v Visitor, expr Expression)

Walk traverses the plan tree in depth-first order. It starts by calling v.Visit(expr); expr must not be nil. If the visitor returned by v.Visit(expr) is not nil, Walk is invoked recursively with the returned visitor for each children of the expr, followed by a call of v.Visit(nil) to the returned visitor.

Types

type Aggregation

type Aggregation interface {
	Expression
	// NewBuffer creates a new aggregation buffer and returns it as a Row.
	NewBuffer() Row
	// Update updates the given buffer with the given row.
	Update(ctx *Context, buffer, row Row) error
	// Merge merges a partial buffer into a global one.
	Merge(ctx *Context, buffer, partial Row) error
}

Aggregation implements an aggregation expression, where an aggregation buffer is created for each grouping (NewBuffer) and rows in the grouping are fed to the buffer (Update). Multiple buffers can be merged (Merge), making partial aggregations possible. Note that Eval must be called with the final aggregation buffer in order to get the final result.

type AlterableTable

type AlterableTable interface {
	Table
	// AddColumn adds a column to this table as given. If non-nil, order specifies where in the schema to add the column.
	AddColumn(ctx *Context, column *Column, order *ColumnOrder) error
	// DropColumn drops the column with the name given.
	DropColumn(ctx *Context, columnName string) error
	// ModifyColumn modifies the column with the name given, replacing with the new column definition provided (which may
	// include a name change). If non-nil, order specifies where in the schema to move the column.
	ModifyColumn(ctx *Context, columnName string, column *Column, order *ColumnOrder) error
}

AlterableTable should be implemented by tables that can receive ALTER TABLE statements to modify their schemas.

type AscendIndex

type AscendIndex interface {
	// AscendGreaterOrEqual returns an IndexLookup for keys that are greater
	// or equal to the given keys.
	AscendGreaterOrEqual(keys ...interface{}) (IndexLookup, error)
	// AscendLessThan returns an IndexLookup for keys that are less than the
	// given keys.
	AscendLessThan(keys ...interface{}) (IndexLookup, error)
	// AscendRange returns an IndexLookup for keys that are within the given
	// range.
	AscendRange(greaterOrEqual, lessThan []interface{}) (IndexLookup, error)
}

AscendIndex is an index that is sorted in ascending order.

type AsyncNode

type AsyncNode interface {
	// IsAsync reports whether the node is async or not.
	IsAsync() bool
}

AsyncNode is a node that can be executed asynchronously.

type BaseSession

type BaseSession struct {
	// contains filtered or unexported fields
}

BaseSession is the basic session type.

func (*BaseSession) Address

func (s *BaseSession) Address() string

Address returns the server address.

func (*BaseSession) ClearWarnings

func (s *BaseSession) ClearWarnings()

ClearWarnings cleans up session warnings

func (*BaseSession) Client

func (s *BaseSession) Client() Client

Client returns session's client information.

func (*BaseSession) CommitTransaction

func (s *BaseSession) CommitTransaction(*Context) error

CommitTransaction commits the current transaction for the current database.

func (*BaseSession) Get

func (s *BaseSession) Get(key string) (Type, interface{})

Get implements the Session interface.

func (*BaseSession) GetAll

func (s *BaseSession) GetAll() map[string]TypedValue

GetAll returns a copy of session configuration

func (*BaseSession) GetCurrentDatabase

func (s *BaseSession) GetCurrentDatabase() string

GetCurrentDatabase gets the current database for this session

func (*BaseSession) ID

func (s *BaseSession) ID() uint32

ID implements the Session interface.

func (*BaseSession) Set

func (s *BaseSession) Set(ctx context.Context, key string, typ Type, value interface{}) error

Set implements the Session interface.

func (*BaseSession) SetCurrentDatabase

func (s *BaseSession) SetCurrentDatabase(dbName string)

SetCurrentDatabase sets the current database for this session

func (*BaseSession) Warn

func (s *BaseSession) Warn(warn *Warning)

Warn stores the warning in the session.

func (*BaseSession) WarningCount

func (s *BaseSession) WarningCount() uint16

WarningCount returns a number of session warnings

func (*BaseSession) Warnings

func (s *BaseSession) Warnings() []*Warning

Warnings returns a copy of session warnings (from the most recent - the last one) The function implements sql.Session interface

type BitType

type BitType interface {
	Type
	NumberOfBits() uint8
}

Represents the BIT type. https://dev.mysql.com/doc/refman/8.0/en/bit-type.html

func CreateBitType

func CreateBitType(numOfBits uint8) (BitType, error)

CreateBitType creates a BitType.

func MustCreateBitType

func MustCreateBitType(numOfBits uint8) BitType

MustCreateBitType is the same as CreateBitType except it panics on errors.

type Catalog

type Catalog struct {
	FunctionRegistry
	*ProcessList
	*MemoryManager
	// contains filtered or unexported fields
}

Catalog holds databases, tables and functions.

func NewCatalog

func NewCatalog() *Catalog

NewCatalog returns a new empty Catalog.

func (*Catalog) AddDatabase

func (c *Catalog) AddDatabase(db Database)

AddDatabase adds a new database to the catalog.

func (*Catalog) AllDatabases

func (c *Catalog) AllDatabases() Databases

AllDatabases returns all databases in the catalog.

func (*Catalog) Database

func (c *Catalog) Database(db string) (Database, error)

Database returns the database with the given name.

func (*Catalog) HasDB

func (c *Catalog) HasDB(db string) bool

func (*Catalog) LockTable

func (c *Catalog) LockTable(ctx *Context, table string)

LockTable adds a lock for the given table and session client. It is assumed the database is the current database in use.

func (*Catalog) Table

func (c *Catalog) Table(ctx *Context, db, table string) (Table, error)

Table returns the table in the given database with the given name.

func (*Catalog) TableAsOf

func (c *Catalog) TableAsOf(ctx *Context, db, table string, time interface{}) (Table, error)

TableAsOf returns the table in the given database with the given name, as it existed at the time given. The database named must support timed queries.

func (*Catalog) UnlockTables

func (c *Catalog) UnlockTables(ctx *Context, id uint32) error

UnlockTables unlocks all tables for which the given session client has a lock.

type CharacterSet

type CharacterSet string

CharacterSet represents the character set of a string.

func ParseCharacterSet

func ParseCharacterSet(str string) (CharacterSet, error)

ParseCharacterSet takes in a string representing a CharacterSet and returns the result if a match is found, or an error if not.

func (CharacterSet) BinaryCollation

func (cs CharacterSet) BinaryCollation() Collation

func (CharacterSet) DefaultCollation

func (cs CharacterSet) DefaultCollation() Collation

DefaultCollation returns the default Collation for this CharacterSet.

func (CharacterSet) Description

func (cs CharacterSet) Description() string

Description returns the plain-English description for the CharacterSet.

func (CharacterSet) MaxLength

func (cs CharacterSet) MaxLength() int64

MaxLength returns the maximum size of a single character in the CharacterSet.

func (CharacterSet) String

func (cs CharacterSet) String() string

String returns the string representation of the CharacterSet.

type Checksumable

type Checksumable interface {
	// Checksum returns a checksum and an error if there was any problem
	// computing or obtaining the checksum.
	Checksum() (string, error)
}

Checksumable provides the checksum of some data.

type Client

type Client struct {
	// User of the session.
	User string
	// Address of the client.
	Address string
}

Client holds session user information.

type Closer

type Closer interface {
	Close(*Context) error
}

type Collation

type Collation string

Collation represents the collation of a string.

func ParseCollation

func ParseCollation(characterSetStr *string, collationStr *string, binaryAttribute bool) (Collation, error)

ParseCollation takes in an optional character set and collation, along with the binary attribute if present, and returns a valid collation or error. A nil character set and collation will return the default collation.

func (Collation) CharacterSet

func (c Collation) CharacterSet() CharacterSet

CharacterSet returns the CharacterSet belonging to this Collation.

func (Collation) String

func (c Collation) String() string

String returns the string representation of the Collation.

func (Collation) WorksWithCharacterSet

func (c Collation) WorksWithCharacterSet(cs CharacterSet) bool

WorksWithCharacterSet returns whether the Collation is valid for the given CharacterSet.

type Column

type Column struct {
	// Name is the name of the column.
	Name string
	// Type is the data type of the column.
	Type Type
	// Default contains the default value of the column or nil if it is NULL.
	Default interface{}
	// Nullable is true if the column can contain NULL values, or false
	// otherwise.
	Nullable bool
	// Source is the name of the table this column came from.
	Source string
	// PrimaryKey is true if the column is part of the primary key for its table.
	PrimaryKey bool
	// Comment contains the string comment for this column
	Comment string
}

Column is the definition of a table column. As SQL:2016 puts it:

A column is a named component of a table. It has a data type, a default,
and a nullability characteristic.

func (*Column) Check

func (c *Column) Check(v interface{}) bool

Check ensures the value is correct for this column.

func (*Column) Equals

func (c *Column) Equals(c2 *Column) bool

Equals checks whether two columns are equal.

type ColumnOrder

type ColumnOrder struct {
	First       bool   // True if this column should come first
	AfterColumn string // Set to the name of the column after which this column should appear
}

ColumnOrder is used in ALTER TABLE statements to change the order of inserted / modified columns.

type Context

type Context struct {
	context.Context
	Session
	*IndexRegistry
	*ViewRegistry
	Memory *MemoryManager
	// contains filtered or unexported fields
}

Context of the query execution.

func NewContext

func NewContext(
	ctx context.Context,
	opts ...ContextOption,
) *Context

NewContext creates a new query context. Options can be passed to configure the context. If some aspect of the context is not configure, the default value will be used. By default, the context will have an empty base session, a noop tracer and a memory manager using the process reporter.

func NewEmptyContext

func NewEmptyContext() *Context

NewEmptyContext returns a default context with default values.

func (*Context) ApplyOpts

func (c *Context) ApplyOpts(opts ...ContextOption)

Applys the options given to the context. Mostly for tests, not safe for use after construction of the context.

func (*Context) Error

func (c *Context) Error(code int, msg string, args ...interface{})

Error adds an error as warning to the session.

func (*Context) Pid

func (c *Context) Pid() uint64

Pid returns the process id associated with this context.

func (*Context) Query

func (c *Context) Query() string

Query returns the query string associated with this context.

func (*Context) RootSpan

func (c *Context) RootSpan() opentracing.Span

RootSpan returns the root span, if any.

func (*Context) Span

func (c *Context) Span(
	opName string,
	opts ...opentracing.StartSpanOption,
) (opentracing.Span, *Context)

Span creates a new tracing span with the given context. It will return the span and a new context that should be passed to all childrens of this span.

func (*Context) Warn

func (c *Context) Warn(code int, msg string, args ...interface{})

Warn adds a warning to the session.

func (*Context) WithContext

func (c *Context) WithContext(ctx context.Context) *Context

WithContext returns a new context with the given underlying context.

func (*Context) WithCurrentDB

func (c *Context) WithCurrentDB(db string) *Context

type ContextOption

type ContextOption func(*Context)

ContextOption is a function to configure the context.

func WithIndexRegistry

func WithIndexRegistry(ir *IndexRegistry) ContextOption

func WithMemoryManager

func WithMemoryManager(m *MemoryManager) ContextOption

WithMemoryManager adds the given memory manager to the context.

func WithPid

func WithPid(pid uint64) ContextOption

WithPid adds the given pid to the context.

func WithQuery

func WithQuery(q string) ContextOption

WithQuery adds the given query to the context.

func WithRootSpan

func WithRootSpan(s opentracing.Span) ContextOption

WithRootSpan sets the root span of the context.

func WithSession

func WithSession(s Session) ContextOption

WithSession adds the given session to the context.

func WithTracer

func WithTracer(t opentracing.Tracer) ContextOption

WithTracer adds the given tracer to the context.

func WithViewRegistry

func WithViewRegistry(vr *ViewRegistry) ContextOption

type Database

type Database interface {
	Nameable

	// GetTableInsensitive retrieves a table by its case insensitive name.  Implementations should look for exact
	// (case-sensitive matches) first.  If no exact matches are found then any table matching the name case insensitively
	// should be returned.  If there is more than one table that matches a case insensitive comparison the resolution
	// strategy is not defined.
	GetTableInsensitive(ctx *Context, tblName string) (Table, bool, error)

	// GetTableNames returns the table names of every table in the database
	GetTableNames(ctx *Context) ([]string, error)
}

Database represents the database.

func NewInformationSchemaDatabase

func NewInformationSchemaDatabase(cat *Catalog) Database

NewInformationSchemaDatabase creates a new INFORMATION_SCHEMA Database.

type Databaser

type Databaser interface {
	// Database the current database.
	Database() Database
	// WithDatabase returns a new node instance with the database replaced with
	// the one given as parameter.
	WithDatabase(Database) (Node, error)
}

Databaser is a node that contains a reference to a database.

type Databases

type Databases []Database

Databases is a collection of Database.

func (*Databases) Add

func (d *Databases) Add(db Database)

Add adds a new database.

func (Databases) Database

func (d Databases) Database(name string) (Database, error)

Database returns the Database with the given name if it exists.

func (Databases) Table

func (d Databases) Table(ctx *Context, dbName string, tableName string) (Table, error)

Table returns the Table with the given name if it exists.

func (Databases) TableAsOf

func (d Databases) TableAsOf(ctx *Context, dbName string, tableName string, asOf interface{}) (Table, error)

TableAsOf returns the table with the name given at the time given, if it existed. The database named must implement sql.VersionedDatabase or an error is returned.

type DatetimeType

type DatetimeType interface {
	Type
	ConvertWithoutRangeCheck(v interface{}) (time.Time, error)
	MaximumTime() time.Time
	MinimumTime() time.Time
}

Represents DATE, DATETIME, and TIMESTAMP. https://dev.mysql.com/doc/refman/8.0/en/datetime.html

func CreateDatetimeType

func CreateDatetimeType(baseType query.Type) (DatetimeType, error)

CreateDatetimeType creates a Type dealing with all temporal types that are not TIME nor YEAR.

func MustCreateDatetimeType

func MustCreateDatetimeType(baseType query.Type) DatetimeType

MustCreateDatetimeType is the same as CreateDatetimeType except it panics on errors.

type DecimalType

type DecimalType interface {
	Type
	ConvertToDecimal(v interface{}) (decimal.NullDecimal, error)
	ExclusiveUpperBound() decimal.Decimal
	MaximumScale() uint8
	Precision() uint8
	Scale() uint8
}

func CreateDecimalType

func CreateDecimalType(precision uint8, scale uint8) (DecimalType, error)

CreateDecimalType creates a DecimalType.

func MustCreateDecimalType

func MustCreateDecimalType(precision uint8, scale uint8) DecimalType

MustCreateDecimalType is the same as CreateDecimalType except it panics on errors.

type DeletableTable

type DeletableTable interface {
	Table
	// Deleter returns a RowDeleter for this table. The RowDeleter will get one call to Delete for each row to be deleted,
	// and will end with a call to Close() to finalize the delete operation.
	Deleter(*Context) RowDeleter
}

DeleteableTable is a table that can process the deletion of rows

type DescendIndex

type DescendIndex interface {
	// DescendGreater returns an IndexLookup for keys that are greater
	// than the given keys.
	DescendGreater(keys ...interface{}) (IndexLookup, error)
	// DescendLessOrEqual returns an IndexLookup for keys that are less than or
	// equal to the given keys.
	DescendLessOrEqual(keys ...interface{}) (IndexLookup, error)
	// DescendRange returns an IndexLookup for keys that are within the given
	// range.
	DescendRange(lessOrEqual, greaterThan []interface{}) (IndexLookup, error)
}

DescendIndex is an index that is sorted in descending order.

type Disposable

type Disposable interface {
	// Dispose the contents.
	Dispose()
}

Disposable objects can erase all their content when they're no longer in use. They should not be used again after they've been disposed.

type DisposeFunc

type DisposeFunc func()

DisposeFunc is a function to completely erase a cache and remove it from the manager.

type DriverIndex

type DriverIndex interface {
	Index
	// Driver ID of the index.
	Driver() string
}

An indexed managed by a driver, as opposed to natively by a DB table.

type DriverIndexLookup

type DriverIndexLookup interface {
	IndexLookup

	// Values returns the values in the subset of the index. These are used to populate the index via the driver.
	Values(Partition) (IndexValueIter, error)

	// Indexes returns the IDs of all indexes involved in this lookup.
	Indexes() []string
}

DriverIndexLookup is a subset of an index. More specific interfaces can be implemented to grant more capabilities to the index lookup.

type DriverIndexableTable

type DriverIndexableTable interface {
	IndexAddressableTable
	// IndexKeyValues returns an iterator over partitions and ultimately the rows of the table to compute the value of an
	// index for every row in this table. Used when creating an index for access through an IndexDriver.
	IndexKeyValues(*Context, []string) (PartitionIndexKeyValueIter, error)
}

DriverIndexableTable represents a table that supports being indexed and receiving indexes to be able to speed up its execution.

type EnumType

type EnumType interface {
	Type
	At(index int) (string, bool)
	CharacterSet() CharacterSet
	Collation() Collation
	ConvertToIndex(v interface{}) (int, error)
	IndexOf(v string) int
	//TODO: move this out of go-mysql-server and into the Dolt layer
	Marshal(v interface{}) (int64, error)
	NumberOfElements() uint16
	Unmarshal(v int64) (string, error)
	Values() []string
}

Represents the ENUM type. https://dev.mysql.com/doc/refman/8.0/en/enum.html

func CreateEnumType

func CreateEnumType(values []string, collation Collation) (EnumType, error)

CreateEnumType creates a EnumType.

func MustCreateEnumType

func MustCreateEnumType(values []string, collation Collation) EnumType

MustCreateEnumType is the same as CreateEnumType except it panics on errors.

type Expression

type Expression interface {
	Resolvable
	fmt.Stringer
	// Type returns the expression type.
	Type() Type
	// IsNullable returns whether the expression can be null.
	IsNullable() bool
	// Eval evaluates the given row and returns a result.
	Eval(*Context, Row) (interface{}, error)
	// Children returns the children expressions of this expression.
	Children() []Expression
	// WithChildren returns a copy of the expression with children replaced.
	// It will return an error if the number of children is different than
	// the current number of children. They must be given in the same order
	// as they are returned by Children.
	WithChildren(...Expression) (Expression, error)
}

Expression is a combination of one or more SQL expressions.

type Expressioner

type Expressioner interface {
	// Expressions returns the list of expressions contained by the node.
	Expressions() []Expression
	// WithExpressions returns a copy of the node with expressions replaced.
	// It will return an error if the number of expressions is different than
	// the current number of expressions. They must be given in the same order
	// as they are returned by Expressions.
	WithExpressions(...Expression) (Node, error)
}

Expressioner is a node that contains expressions.

type FilteredTable

type FilteredTable interface {
	Table
	HandledFilters(filters []Expression) []Expression
	WithFilters(filters []Expression) Table
	Filters() []Expression
}

FilteredTable is a table that can produce a specific RowIter that's more optimized given the filters.

type ForeignKeyAlterableTable

type ForeignKeyAlterableTable interface {
	Table
	// CreateForeignKey creates an index for this table, using the provided parameters.
	// Returns an error if the foreign key name already exists.
	CreateForeignKey(ctx *Context, fkName string, columns []string, referencedTable string, referencedColumns []string,
		onUpdate, onDelete ForeignKeyReferenceOption) error
	// DropForeignKey removes a foreign key from the database.
	DropForeignKey(ctx *Context, fkName string) error
}

ForeignKeyAlterableTable represents a table that supports foreign key modification operations.

type ForeignKeyReferenceOption

type ForeignKeyReferenceOption string

ForeignKeyReferenceOption is the behavior for this foreign key with the relevant action is performed on the foreign table.

const (
	ForeignKeyReferenceOption_DefaultAction ForeignKeyReferenceOption = "DEFAULT" // No explicit action was specified
	ForeignKeyReferenceOption_Restrict      ForeignKeyReferenceOption = "RESTRICT"
	ForeignKeyReferenceOption_Cascade       ForeignKeyReferenceOption = "CASCADE"
	ForeignKeyReferenceOption_NoAction      ForeignKeyReferenceOption = "NO ACTION"
	ForeignKeyReferenceOption_SetNull       ForeignKeyReferenceOption = "SET NULL"
	ForeignKeyReferenceOption_SetDefault    ForeignKeyReferenceOption = "SET DEFAULT"
)

type Freeable

type Freeable interface {
	// Free the memory.
	Free()
}

Freeable objects can free their memory.

type Function

type Function interface {
	// Call invokes the function.
	Call(...Expression) (Expression, error)
	// contains filtered or unexported methods
}

Function is a function defined by the user that can be applied in a SQL query.

type Function0

type Function0 struct {
	Name string
	Fn   func() Expression
}

Function0 is a function with 0 arguments.

func (Function0) Call

func (fn Function0) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function1

type Function1 struct {
	Name string
	Fn   func(e Expression) Expression
}

Function1 is a function with 1 argument.

func (Function1) Call

func (fn Function1) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function2

type Function2 struct {
	Name string
	Fn   func(e1, e2 Expression) Expression
}

Function2 is a function with 2 arguments.

func (Function2) Call

func (fn Function2) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function3

type Function3 struct {
	Name string
	Fn   func(e1, e2, e3 Expression) Expression
}

Function3 is a function with 3 arguments.

func (Function3) Call

func (fn Function3) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function4

type Function4 struct {
	Name string
	Fn   func(e1, e2, e3, e4 Expression) Expression
}

Function4 is a function with 4 arguments.

func (Function4) Call

func (fn Function4) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function5

type Function5 struct {
	Name string
	Fn   func(e1, e2, e3, e4, e5 Expression) Expression
}

Function5 is a function with 5 arguments.

func (Function5) Call

func (fn Function5) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function6

type Function6 struct {
	Name string
	Fn   func(e1, e2, e3, e4, e5, e6 Expression) Expression
}

Function6 is a function with 6 arguments.

func (Function6) Call

func (fn Function6) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type Function7

type Function7 struct {
	Name string
	Fn   func(e1, e2, e3, e4, e5, e6, e7 Expression) Expression
}

Function7 is a function with 7 arguments.

func (Function7) Call

func (fn Function7) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type FunctionN

type FunctionN struct {
	Name string
	Fn   func(...Expression) (Expression, error)
}

FunctionN is a function with variable number of arguments. This function is expected to return ErrInvalidArgumentNumber if the arity does not match, since the check has to be done in the implementation.

func (FunctionN) Call

func (fn FunctionN) Call(args ...Expression) (Expression, error)

Call implements the Function interface.

type FunctionRegistry

type FunctionRegistry map[string]Function

FunctionRegistry is used to register functions. It is used both for builtin and User-Defined Functions.

func NewFunctionRegistry

func NewFunctionRegistry() FunctionRegistry

NewFunctionRegistry creates a new FunctionRegistry.

func (FunctionRegistry) Function

func (r FunctionRegistry) Function(name string) (Function, error)

Function returns a function with the given name.

func (FunctionRegistry) MustRegister

func (r FunctionRegistry) MustRegister(fn ...Function)

MustRegister registers functions. If function with that name is already registered, it will panic!

func (FunctionRegistry) Register

func (r FunctionRegistry) Register(fn ...Function) error

Register registers functions. If function with that name is already registered, the ErrFunctionAlreadyRegistered will be returned

type Generator

type Generator interface {
	// Next value in the generator.
	Next() (interface{}, error)
	// Close the generator and dispose resources.
	Close() error
}

Generator will generate a set of values for a given row.

func NewArrayGenerator

func NewArrayGenerator(array []interface{}) Generator

NewArrayGenerator creates a generator for a given array.

func ToGenerator

func ToGenerator(v interface{}) (Generator, error)

ToGenerator converts a value to a generator if possible.

type Index

type Index interface {
	// Get returns an IndexLookup for the given key in the index.
	Get(key ...interface{}) (IndexLookup, error)
	// Has checks if the given key is present in the index.
	Has(partition Partition, key ...interface{}) (bool, error)
	// ID returns the identifier of the index.
	ID() string
	// Database returns the database name this index belongs to.
	Database() string
	// Table returns the table name this index belongs to.
	Table() string
	// Expressions returns the indexed expressions. If the result is more than
	// one expression, it means the index has multiple columns indexed. If it's
	// just one, it means it may be an expression or a column.
	Expressions() []string
}

Index is the basic representation of an index. It can be extended with more functionality by implementing more specific interfaces.

type IndexAddressableTable

type IndexAddressableTable interface {
	Table
	// WithIndexLookup returns a version of the table that will return only the rows specified by the given IndexLookup,
	// which was in turn created by a call to Index.Get() for a set of keys for this table.
	WithIndexLookup(IndexLookup) Table
}

IndexAddressableTable is a table that can restrict its row iteration to only the rows that match a given index lookup.

type IndexAlterableTable

type IndexAlterableTable interface {
	Table
	// CreateIndex creates an index for this table, using the provided parameters.
	// Returns an error if the index name already exists, or an index with the same columns already exists.
	CreateIndex(ctx *Context, indexName string, using IndexUsing, constraint IndexConstraint, columns []IndexColumn, comment string) error
	// DropIndex removes an index from this table, if it exists.
	// Returns an error if the removal failed or the index does not exist.
	DropIndex(ctx *Context, indexName string) error
	// RenameIndex renames an existing index to another name that is not already taken by another index on this table.
	RenameIndex(ctx *Context, fromIndexName string, toIndexName string) error
}

IndexAlterableTable represents a table that supports index modification operations.

type IndexColumn

type IndexColumn struct {
	Name string
	// Length represents the index prefix length. If zero, then no length was specified.
	Length int64
}

IndexColumn is the column by which to add to an index.

type IndexConstraint

type IndexConstraint byte

IndexConstraint represents any constraints that should be applied to the index.

const (
	IndexConstraint_None IndexConstraint = iota
	IndexConstraint_Unique
	IndexConstraint_Fulltext
	IndexConstraint_Spatial
)

type IndexDriver

type IndexDriver interface {
	// ID returns the unique name of the driver.
	ID() string
	// Create a new index. If exprs is more than one expression, it means the
	// index has multiple columns indexed. If it's just one, it means it may
	// be an expression or a column.
	Create(db, table, id string, expressions []Expression, config map[string]string) (DriverIndex, error)
	// LoadAll loads all indexes for given db and table.
	LoadAll(ctx *Context, db, table string) ([]DriverIndex, error)
	// Save the given index for all partitions.
	Save(*Context, DriverIndex, PartitionIndexKeyValueIter) error
	// Delete the given index for all partitions in the iterator.
	Delete(DriverIndex, PartitionIter) error
}

IndexDriver manages the coordination between the indexes and their representation on disk.

type IndexKeyValueIter

type IndexKeyValueIter interface {
	// Next returns the next tuple of index key values. The length of the
	// returned slice will be the same as the number of columns used to
	// create this iterator. The second returned parameter is a repo's location.
	Next() ([]interface{}, []byte, error)
	io.Closer
}

IndexKeyValueIter is an iterator of index key values, that is, a tuple of the values that will be index keys.

type IndexLookup

type IndexLookup interface {
	fmt.Stringer
}

IndexLookup is the implementation-specific definition of an index lookup, created by calls to Index.Get(). The IndexLookup must contain all necessary information to retrieve exactly the rows in the table specified by key(s) specified in Index.Get(). Implementors are responsible for all semantics of correctly returning rows that match an index lookup. By default, only a single index can be used for a given table access. Implementors can implement the Mergeable interface to optionally allow IndexLookups to be merged with others.

type IndexRegistry

type IndexRegistry struct {
	// Root path where all the data of the indexes is stored on disk.
	Root string
	// contains filtered or unexported fields
}

IndexRegistry keeps track of all driver-provided indexes in the engine.

func NewIndexRegistry

func NewIndexRegistry() *IndexRegistry

NewIndexRegistry returns a new Index Registry.

func (*IndexRegistry) AddIndex

func (r *IndexRegistry) AddIndex(
	idx DriverIndex,
) (created chan<- struct{}, ready <-chan struct{}, err error)

AddIndex adds the given index to the registry. The added index will be marked as creating, so nobody can't register two indexes with the same expression or id while the other is still being created. When something is sent through the returned channel, it means the index has finished its creation and will be marked as ready. Another channel is returned to notify the user when the index is ready.

func (*IndexRegistry) CanRemoveIndex

func (r *IndexRegistry) CanRemoveIndex(idx Index) bool

CanRemoveIndex returns whether the given index is ready to be removed.

func (*IndexRegistry) CanUseIndex

func (r *IndexRegistry) CanUseIndex(idx Index) bool

CanUseIndex returns whether the given index is ready to use or not.

func (*IndexRegistry) DefaultIndexDriver

func (r *IndexRegistry) DefaultIndexDriver() IndexDriver

DefaultIndexDriver returns the default index driver, which is the only driver when there is 1 driver in the registry. If there are more than 1 drivers in the registry, this will return the empty string, as there is no clear default driver.

func (*IndexRegistry) DeleteIndex

func (r *IndexRegistry) DeleteIndex(db, id string, force bool) (<-chan struct{}, error)

DeleteIndex deletes an index from the registry by its id. First, it marks the index for deletion but does not remove it, so queries that are using it may still do so. The returned channel will send a message when the index can be deleted from disk. If force is true, it will delete the index even if it's not ready for usage. Only use that parameter if you know what you're doing.

func (*IndexRegistry) ExpressionsWithIndexes

func (r *IndexRegistry) ExpressionsWithIndexes(
	db string,
	exprs ...Expression,
) [][]Expression

ExpressionsWithIndexes finds all the combinations of expressions with matching indexes. This only matches multi-column indexes.

func (*IndexRegistry) HasIndexes

func (r *IndexRegistry) HasIndexes() bool

HasIndexes returns whether the index registry has any registered indexes. Not thread safe, so the answer is approximate in the face of drivers and indexes being added and removed.

func (*IndexRegistry) Index

func (r *IndexRegistry) Index(db, id string) DriverIndex

Index returns the index with the given id. It may return nil if the index is not found.

func (*IndexRegistry) IndexByExpression

func (r *IndexRegistry) IndexByExpression(ctx *Context, db string, expr ...Expression) Index

IndexByExpression returns an index by the given expression. It will return nil if the index is not found. If more than one expression is given, all of them must match for the index to be matched.

func (*IndexRegistry) IndexDriver

func (r *IndexRegistry) IndexDriver(id string) IndexDriver

IndexDriver returns the IndexDriver with the given ID.

func (*IndexRegistry) IndexesByTable

func (r *IndexRegistry) IndexesByTable(db, table string) []DriverIndex

IndexesByTable returns a slice of all the indexes existing on the given table.

func (*IndexRegistry) LoadIndexes

func (r *IndexRegistry) LoadIndexes(ctx *Context, dbs Databases) error

LoadIndexes creates load functions for all indexes for all dbs, tables and drivers. These functions are called as needed by the query

func (*IndexRegistry) MarkOutdated

func (r *IndexRegistry) MarkOutdated(idx Index)

MarkOutdated sets the index status as outdated. This method is not thread safe and should not be used directly except for testing.

func (*IndexRegistry) RegisterIndexDriver

func (r *IndexRegistry) RegisterIndexDriver(driver IndexDriver)

RegisterIndexDriver registers a new index driver.

func (*IndexRegistry) ReleaseIndex

func (r *IndexRegistry) ReleaseIndex(idx Index)

ReleaseIndex releases an index after it's been used.

type IndexStatus

type IndexStatus byte

IndexStatus represents the current status in which the index is.

const (
	// IndexNotReady means the index is not ready to be used.
	IndexNotReady IndexStatus = iota
	// IndexReady means the index can be used.
	IndexReady
	// IndexOutdated means the index is loaded but will not be used because the
	// contents in it are outdated.
	IndexOutdated
)

func (IndexStatus) IsUsable

func (s IndexStatus) IsUsable() bool

IsUsable returns whether the index can be used or not based on the status.

func (IndexStatus) String

func (s IndexStatus) String() string

type IndexUsing

type IndexUsing byte

IndexUsing is the desired storage type.

const (
	IndexUsing_Default IndexUsing = iota
	IndexUsing_BTree
	IndexUsing_Hash
)

type IndexValueIter

type IndexValueIter interface {
	// Next returns the next value (repo's location) - see IndexKeyValueIter.
	Next() ([]byte, error)
	io.Closer
}

IndexValueIter is an iterator of index values.

type IndexedTable

type IndexedTable interface {
	IndexAddressableTable
	// GetIndexes returns all indexes on this table.
	GetIndexes(ctx *Context) ([]Index, error)
}

IndexedTable represents a table that has one or more native indexes on its columns, and can use those indexes to speed up execution of queries that reference those columns. Unlike DriverIndexableTable, IndexedTable doesn't need a separate index driver to function.

type InsertableTable

type InsertableTable interface {
	Table
	// Inserter returns an Inserter for this table. The Inserter will get one call to Insert() for each row to be
	// inserted, and will end with a call to Close() to finalize the insert operation.
	Inserter(*Context) RowInserter
}

InsertableTable is a table that can process insertion of new rows.

type JsonType

type JsonType interface {
	Type
}
var JSON JsonType = jsonType{}

type KeyValueCache

type KeyValueCache interface {
	// Put a new value in the cache.
	Put(uint64, interface{}) error
	// Get the value with the given key.
	Get(uint64) (interface{}, error)
}

KeyValueCache is a cache of key value pairs.

type Lockable

type Lockable interface {
	Nameable
	// Lock locks the table either for reads or writes. Any session clients can
	// read while the table is locked for read, but not write.
	// When the table is locked for write, nobody can write except for the
	// session client that requested the lock.
	Lock(ctx *Context, write bool) error
	// Unlock releases the lock for the current session client. It blocks until
	// all reads or writes started during the lock are finished.
	// Context may be nil if the unlock it's because the connection was closed.
	// The id will always be provided, since in some cases context is not
	// available.
	Unlock(ctx *Context, id uint32) error
}

Lockable should be implemented by tables that can be locked and unlocked.

type MemoryManager

type MemoryManager struct {
	// contains filtered or unexported fields
}

MemoryManager is in charge of keeping track and managing all the components that operate in memory. There should only be one instance of a memory manager running at the same time in each process.

func NewMemoryManager

func NewMemoryManager(r Reporter) *MemoryManager

NewMemoryManager creates a new manager with the given memory reporter. If nil is given, then the Process reporter will be used by default.

func (*MemoryManager) Free

func (m *MemoryManager) Free()

Free the memory of all freeable caches.

func (*MemoryManager) HasAvailable

func (m *MemoryManager) HasAvailable() bool

HasAvailable reports whether the memory manager has any available memory.

func (*MemoryManager) NewHistoryCache

func (m *MemoryManager) NewHistoryCache() (KeyValueCache, DisposeFunc)

NewHistoryCache returns an empty history cache and a function to dispose it when it's no longer needed.

func (*MemoryManager) NewLRUCache

func (m *MemoryManager) NewLRUCache(size uint) (KeyValueCache, DisposeFunc)

NewLRUCache returns an empty LRU cache and a function to dispose it when it's no longer needed.

func (*MemoryManager) NewRowsCache

func (m *MemoryManager) NewRowsCache() (RowsCache, DisposeFunc)

NewRowsCache returns an empty rows cache and a function to dispose it when it's no longer needed.

type MergeableIndexLookup

type MergeableIndexLookup interface {
	IndexLookup
	// IsMergeable checks whether the current IndexLookup can be merged with the given one. If true, then all other
	// methods in the interface are expected to return a new IndexLookup that represents the given set operation of the
	// two operands.
	IsMergeable(IndexLookup) bool
	// Intersection returns a new IndexLookup with the intersection of the current IndexLookup and the ones given.
	Intersection(...IndexLookup) IndexLookup
	// Union returns a new IndexLookup with the union of the current IndexLookup and the ones given.
	Union(...IndexLookup) IndexLookup
	// Difference returns a new IndexLookup with the difference between the current IndexLookup and the ones given.
	// Currently unused.
	Difference(...IndexLookup) IndexLookup
}

MergeableIndexLookup is a specialization of IndexLookup that allows IndexLookups to be merged together. This allows multiple indexes to be used for a single table access, if the implementor can support it via merging the lookups of the two indexes.

type Nameable

type Nameable interface {
	// Name returns the name.
	Name() string
}

Nameable is something that has a name.

type NegateIndex

type NegateIndex interface {
	// Not returns an IndexLookup for keys that are not equal
	// to the given keys.
	Not(keys ...interface{}) (IndexLookup, error)
}

NegateIndex is an index that supports retrieving negated values.

type Node

type Node interface {
	Resolvable
	fmt.Stringer
	// Schema of the node.
	Schema() Schema
	// Children nodes.
	Children() []Node
	// RowIter produces a row iterator from this node.
	RowIter(*Context) (RowIter, error)
	// WithChildren returns a copy of the node with children replaced.
	// It will return an error if the number of children is different than
	// the current number of children. They must be given in the same order
	// as they are returned by Children.
	WithChildren(...Node) (Node, error)
}

Node is a node in the execution plan tree.

type NullType

type NullType interface {
	Type
}
var (
	Null NullType = nullType{}

	// ErrValueNotNil is thrown when a value that was expected to be nil, is not
	ErrValueNotNil = errors.NewKind("value not nil: %#v")
)

type NumberType

type NumberType interface {
	Type
	IsSigned() bool
	IsFloat() bool
}

Represents all integer and floating point types. https://dev.mysql.com/doc/refman/8.0/en/integer-types.html https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html

func CreateNumberType

func CreateNumberType(baseType query.Type) (NumberType, error)

CreateNumberType creates a NumberType.

func MustCreateNumberType

func MustCreateNumberType(baseType query.Type) NumberType

MustCreateNumberType is the same as CreateNumberType except it panics on errors.

type OkResult

type OkResult struct {
	RowsAffected uint64       // Number of rows affected by this operation
	InsertID     uint64       // Inserted ID, if any, or -1 if not
	Info         fmt.Stringer // Human-readable status string for extra status info, echoed verbatim to clients.
}

OkResult is a representation of the OK packet MySQL sends for non-select queries such as UPDATE, INSERT, etc. It can be returned as the only element in the row for a Node that doesn't select anything. See https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html

func NewOkResult

func NewOkResult(rowsAffected int) OkResult

NewOKResult returns a new OkResult with the given number of rows affected.

type OpaqueNode

type OpaqueNode interface {
	Node
	// Opaque reports whether the node is opaque or not.
	Opaque() bool
}

OpaqueNode is a node that doesn't allow transformations to its children and acts a a black box.

type Partition

type Partition interface {
	Key() []byte
}

Partition represents a partition from a SQL table.

type PartitionCounter

type PartitionCounter interface {
	// PartitionCount returns the number of partitions.
	PartitionCount(*Context) (int64, error)
}

PartitionCounter can return the number of partitions.

type PartitionIndexKeyValueIter

type PartitionIndexKeyValueIter interface {
	// Next returns the next partition and the IndexKeyValueIter for that
	// partition.
	Next() (Partition, IndexKeyValueIter, error)
	io.Closer
}

PartitionIndexKeyValueIter is an iterator of partitions that will return the partition and the IndexKeyValueIter of that partition.

type PartitionIter

type PartitionIter interface {
	io.Closer
	Next() (Partition, error)
}

PartitionIter is an iterator that retrieves partitions.

type PartitionProgress

type PartitionProgress struct {
	Progress
}

PartitionProgress keeps track of a partition progress

func (PartitionProgress) String

func (p PartitionProgress) String() string

type Process

type Process struct {
	Pid        uint64
	Connection uint32
	User       string
	Type       ProcessType
	Query      string
	Progress   map[string]TableProgress
	StartedAt  time.Time
	Kill       context.CancelFunc
}

Process represents a process in the SQL server.

func (*Process) Done

func (p *Process) Done()

Done needs to be called when this process has finished.

func (*Process) Seconds

func (p *Process) Seconds() uint64

Seconds returns the number of seconds this process has been running.

type ProcessList

type ProcessList struct {
	// contains filtered or unexported fields
}

ProcessList is a structure that keeps track of all the processes and their status.

func NewProcessList

func NewProcessList() *ProcessList

NewProcessList creates a new process list.

func (*ProcessList) AddPartitionProgress

func (pl *ProcessList) AddPartitionProgress(pid uint64, tableName, partitionName string, total int64)

AddPartitionProgress adds a new item to track progress from to the process with the given pid. If the pid or the table does not exist, it will do nothing.

func (*ProcessList) AddProcess

func (pl *ProcessList) AddProcess(
	ctx *Context,
	typ ProcessType,
	query string,
) (*Context, error)

AddProcess adds a new process to the list given a process type and a query. Steps is a map between the name of the items that need to be completed and the total amount in these items. -1 means unknown. It returns a new context that should be passed around from now on. That context will be cancelled if the process is killed.

func (*ProcessList) AddTableProgress

func (pl *ProcessList) AddTableProgress(pid uint64, name string, total int64)

AddTableProgress adds a new item to track progress from to the process with the given pid. If the pid does not exist, it will do nothing.

func (*ProcessList) Done

func (pl *ProcessList) Done(pid uint64)

Done removes the finished process with the given pid from the process list. If the process does not exist, it will do nothing.

func (*ProcessList) Kill

func (pl *ProcessList) Kill(connID uint32)

Kill terminates all queries for a given connection id.

func (*ProcessList) KillOnlyQueries

func (pl *ProcessList) KillOnlyQueries(connID uint32)

KillOnlyQueries kills all queries, but not index creation queries, for a given connection id.

func (*ProcessList) Processes

func (pl *ProcessList) Processes() []Process

Processes returns the list of current running processes.

func (*ProcessList) RemovePartitionProgress

func (pl *ProcessList) RemovePartitionProgress(pid uint64, tableName, partitionName string)

RemovePartitionProgress removes an existing item tracking progress from the process with the given pid, if it exists.

func (*ProcessList) RemoveTableProgress

func (pl *ProcessList) RemoveTableProgress(pid uint64, name string)

RemoveTableProgress removes an existing item tracking progress from the process with the given pid, if it exists.

func (*ProcessList) UpdatePartitionProgress

func (pl *ProcessList) UpdatePartitionProgress(pid uint64, tableName, partitionName string, delta int64)

UpdatePartitionProgress updates the progress of the table partition with the given name for the process with the given pid.

func (*ProcessList) UpdateTableProgress

func (pl *ProcessList) UpdateTableProgress(pid uint64, name string, delta int64)

UpdateTableProgress updates the progress of the table with the given name for the process with the given pid.

type ProcessType

type ProcessType byte

ProcessType is the type of process.

const (
	// QueryProcess is a query process.
	QueryProcess ProcessType = iota
	// CreateIndexProcess is a process to create an index.
	CreateIndexProcess
)

func (ProcessType) String

func (p ProcessType) String() string

type Progress

type Progress struct {
	Name  string
	Done  int64
	Total int64
}

Progress between done items and total items.

type ProjectedTable

type ProjectedTable interface {
	Table
	WithProjection(colNames []string) Table
	Projection() []string
}

ProjectedTable is a table that can produce a specific RowIter that's more optimized given the columns that are projected.

type ReplaceableTable

type ReplaceableTable interface {
	Table
	// Replacer returns a RowReplacer for this table. The RowReplacer will have Insert and optionally Delete called once
	// for each row, followed by a call to Close() when all rows have been processed.
	Replacer(ctx *Context) RowReplacer
}

Replacer allows rows to be replaced through a Delete (if applicable) then Insert.

type Reporter

type Reporter interface {
	// MaxMemory returns the maximum number of memory allowed in bytes.
	MaxMemory() uint64
	// UsedMemory returns the memory in use in bytes.
	UsedMemory() uint64
}

Reporter is a component that gives information about the memory usage.

var ProcessMemory Reporter = new(processReporter)

ProcessMemory is a reporter for the memory used by the process and the maximum amount of memory allowed controlled by the MAX_MEMORY environment variable.

type Resolvable

type Resolvable interface {
	// Resolved returns whether the node is resolved.
	Resolved() bool
}

Resolvable is something that can be resolved or not.

type Row

type Row []interface{}

Row is a tuple of values.

func NewRow

func NewRow(values ...interface{}) Row

NewRow creates a row from the given values.

func NodeToRows

func NodeToRows(ctx *Context, n Node) ([]Row, error)

NodeToRows converts a node to a slice of rows.

func RowIterToRows

func RowIterToRows(i RowIter) ([]Row, error)

RowIterToRows converts a row iterator to a slice of rows.

func (Row) Copy

func (r Row) Copy() Row

Copy creates a new row with the same values as the current one.

func (Row) Equals

func (r Row) Equals(row Row, schema Schema) (bool, error)

Equals checks whether two rows are equal given a schema.

type RowDeleter

type RowDeleter interface {
	// Delete deletes the given row. Returns ErrDeleteRowNotFound if the row was not found. Delete will be called once for
	// each row to process for the delete operation, which may involve many rows. After all rows have been processed,
	// Close is called.
	Delete(*Context, Row) error
	// Close finalizes the delete operation, persisting the result.
	Closer
}

RowDeleter is a delete cursor that can delete one or more rows from a table.

type RowInserter

type RowInserter interface {
	// Insert inserts the row given, returning an error if it cannot. Insert will be called once for each row to process
	// for the insert operation, which may involve many rows. After all rows in an operation have been processed, Close
	// is called.
	Insert(*Context, Row) error
	// Close finalizes the insert operation, persisting its result.
	Closer
}

RowInserter is an insert cursor that can insert one or more values to a table.

type RowIter

type RowIter interface {
	// Next retrieves the next row. It will return io.EOF if it's the last row.
	// After retrieving the last row, Close will be automatically closed.
	Next() (Row, error)
	// Close the iterator.
	Close() error
}

RowIter is an iterator that produces rows.

func NewSpanIter

func NewSpanIter(span opentracing.Span, iter RowIter) RowIter

NewSpanIter creates a RowIter executed in the given span.

func RowsToRowIter

func RowsToRowIter(rows ...Row) RowIter

RowsToRowIter creates a RowIter that iterates over the given rows.

type RowReplacer

type RowReplacer interface {
	// Insert inserts the row given, returning an error if it cannot. Insert will be called once for each row to process
	// for the replace operation, which may involve many rows. After all rows in an operation have been processed, Close
	// is called.
	Insert(*Context, Row) error
	// Delete deletes the given row. Returns ErrDeleteRowNotFound if the row was not found. Delete will be called once for
	// each row to process for the delete operation, which may involve many rows. After all rows have been processed,
	// Close is called.
	Delete(*Context, Row) error
	// Close finalizes the replace operation, persisting the result.
	Closer
}

RowReplacer is a combination of RowDeleter and RowInserter. TODO: We can't embed those interfaces because go 1.13 doesn't allow for overlapping interfaces (they both declare

Close). Go 1.14 fixes this problem, but we aren't ready to drop support for 1.13 yet.

type RowUpdater

type RowUpdater interface {
	// Update the given row. Provides both the old and new rows.
	Update(ctx *Context, old Row, new Row) error
	// Close finalizes the update operation, persisting the result.
	Closer
}

RowUpdater is an update cursor that can update one or more rows in a table.

type RowsCache

type RowsCache interface {
	// Add a new row to the cache. If there is no memory available, it will try to
	// free some memory. If after that there is still no memory available, it
	// will return an error and erase all the content of the cache.
	Add(Row) error
	// Get all rows.
	Get() []Row
}

RowsCache is a cache of rows.

type Schema

type Schema []*Column

Schema is the definition of a table.

func (Schema) CheckRow

func (s Schema) CheckRow(row Row) error

CheckRow checks the row conforms to the schema.

func (Schema) Contains

func (s Schema) Contains(column string, source string) bool

Contains returns whether the schema contains a column with the given name.

func (Schema) Equals

func (s Schema) Equals(s2 Schema) bool

Equals checks whether the given schema is equal to this one.

func (Schema) IndexOf

func (s Schema) IndexOf(column, source string) int

IndexOf returns the index of the given column in the schema or -1 if it's not present.

type Session

type Session interface {
	// Address of the server.
	Address() string
	// User of the session.
	Client() Client
	// Set session configuration.
	Set(ctx context.Context, key string, typ Type, value interface{}) error
	// Get session configuration.
	Get(key string) (Type, interface{})
	// GetCurrentDatabase gets the current database for this session
	GetCurrentDatabase() string
	// SetDefaultDatabase sets the current database for this session
	SetCurrentDatabase(dbName string)
	// CommitTransaction commits the current transaction for this session for the current database
	CommitTransaction(*Context) error
	// GetAll returns a copy of session configuration
	GetAll() map[string]TypedValue
	// ID returns the unique ID of the connection.
	ID() uint32
	// Warn stores the warning in the session.
	Warn(warn *Warning)
	// Warnings returns a copy of session warnings (from the most recent).
	Warnings() []*Warning
	// ClearWarnings cleans up session warnings.
	ClearWarnings()
	// WarningCount returns a number of session warnings
	WarningCount() uint16
}

Session holds the session data.

func NewBaseSession

func NewBaseSession() Session

NewBaseSession creates a new empty session.

func NewSession

func NewSession(server, client, user string, id uint32) Session

NewSession creates a new session with data.

type SetType

type SetType interface {
	Type
	CharacterSet() CharacterSet
	Collation() Collation
	//TODO: move this out of go-mysql-server and into the Dolt layer
	Marshal(v interface{}) (uint64, error)
	NumberOfElements() uint16
	Unmarshal(bits uint64) (string, error)
	Values() []string
}

Represents the SET type. https://dev.mysql.com/doc/refman/8.0/en/set.html

func CreateSetType

func CreateSetType(values []string, collation Collation) (SetType, error)

CreateSetType creates a SetType.

func MustCreateSetType

func MustCreateSetType(values []string, collation Collation) SetType

MustCreateSetType is the same as CreateSetType except it panics on errors.

type StringType

type StringType interface {
	Type
	CharacterSet() CharacterSet
	Collation() Collation
	MaxCharacterLength() int64
	MaxByteLength() int64
}

StringType represents all string types, including VARCHAR and BLOB. https://dev.mysql.com/doc/refman/8.0/en/char.html https://dev.mysql.com/doc/refman/8.0/en/binary-varbinary.html https://dev.mysql.com/doc/refman/8.0/en/blob.html

func CreateBinary

func CreateBinary(baseType query.Type, lengthHint int64) (StringType, error)

CreateBinary creates a StringType with a binary collation and character set of the given size.

func CreateLongText

func CreateLongText(collation Collation) StringType

CreateLongText creates a LONGTEXT with the given collation.

func CreateMediumText

func CreateMediumText(collation Collation) StringType

CreateMediumText creates a MEDIUMTEXT with the given collation.

func CreateString

func CreateString(baseType query.Type, length int64, collation Collation) (StringType, error)

CreateString creates a StringType.

func CreateStringWithDefaults

func CreateStringWithDefaults(baseType query.Type, length int64) (StringType, error)

CreateStringWithDefaults creates a StringType with the default character set and collation of the given size.

func CreateText

func CreateText(collation Collation) StringType

CreateText creates a TEXT with the given collation.

func CreateTinyText

func CreateTinyText(collation Collation) StringType

CreateTinyText creates a TINYTEXT with the given collation.

func MustCreateBinary

func MustCreateBinary(baseType query.Type, lengthHint int64) StringType

MustCreateBinary is the same as CreateBinary except it panics on errors.

func MustCreateString

func MustCreateString(baseType query.Type, length int64, collation Collation) StringType

MustCreateString is the same as CreateString except it panics on errors.

func MustCreateStringWithDefaults

func MustCreateStringWithDefaults(baseType query.Type, length int64) StringType

MustCreateStringWithDefaults creates a StringType with the default CharacterSet and Collation.

type Table

type Table interface {
	Nameable
	String() string
	Schema() Schema
	Partitions(*Context) (PartitionIter, error)
	PartitionRows(*Context, Partition) (RowIter, error)
}

Table represents the backend of a SQL table.

func GetTableInsensitive

func GetTableInsensitive(tblName string, tables map[string]Table) (Table, bool)

GetTableInsensitive implements a case insensitive map lookup for tables keyed off of the table name. Looks for exact matches first. If no exact matches are found then any table matching the name case insensitively should be returned. If there is more than one table that matches a case insensitive comparison the resolution strategy is not defined.

type TableCreator

type TableCreator interface {
	// Creates the table with the given name and schema. If a table with that name already exists, must return
	// sql.ErrTableAlreadyExists.
	CreateTable(ctx *Context, name string, schema Schema) error
}

TableCreator should be implemented by databases that can create new tables.

type TableDropper

type TableDropper interface {
	DropTable(ctx *Context, name string) error
}

TableDropper should be implemented by databases that can drop tables.

type TableProgress

type TableProgress struct {
	Progress
	PartitionsProgress map[string]PartitionProgress
}

TableProgress keeps track of a table progress, and for each of its partitions

func NewTableProgress

func NewTableProgress(name string, total int64) TableProgress

func (TableProgress) String

func (p TableProgress) String() string

type TableRenamer

type TableRenamer interface {
	// Renames a table from oldName to newName as given. If a table with newName already exists, must return
	// sql.ErrTableAlreadyExists.
	RenameTable(ctx *Context, oldName, newName string) error
}

TableRenamer should be implemented by databases that can rename tables.

type TableRowIter

type TableRowIter struct {
	// contains filtered or unexported fields
}

TableRowIter is an iterator over the partitions in a table.

func NewTableRowIter

func NewTableRowIter(ctx *Context, table Table, partitions PartitionIter) *TableRowIter

NewTableRowIter returns a new iterator over the rows in the partitions of the table given.

func (*TableRowIter) Close

func (i *TableRowIter) Close() error

func (*TableRowIter) Next

func (i *TableRowIter) Next() (Row, error)

type TableWrapper

type TableWrapper interface {
	// Underlying returns the underlying table.
	Underlying() Table
}

TableWrapper is a node that wraps the real table. This is needed because wrappers cannot implement some methods the table may implement.

type Tableable

type Tableable interface {
	// Table returns the table name.
	Table() string
}

Tableable is something that has a table.

type TimeType

type TimeType interface {
	Type
	//TODO: move this out of go-mysql-server and into the Dolt layer
	Marshal(v interface{}) (int64, error)
	Unmarshal(v int64) string
}

Represents the TIME type. https://dev.mysql.com/doc/refman/8.0/en/time.html

var (
	Time TimeType = timespanType{}

	ErrConvertingToTimeType = errors.NewKind("value %v is not a valid Time")
)

type TransformExprFunc

type TransformExprFunc func(Expression) (Expression, error)

TransformExprFunc is a function that given an expression will return that expression as is or transformed along with an error, if any.

type TransformNodeFunc

type TransformNodeFunc func(Node) (Node, error)

TransformNodeFunc is a function that given a node will return that node as is or transformed along with an error, if any.

type TreePrinter

type TreePrinter struct {
	// contains filtered or unexported fields
}

TreePrinter is a printer for tree nodes.

func NewTreePrinter

func NewTreePrinter() *TreePrinter

NewTreePrinter creates a new tree printer.

func (*TreePrinter) String

func (p *TreePrinter) String() string

String returns the output of the printed tree.

func (*TreePrinter) WriteChildren

func (p *TreePrinter) WriteChildren(children ...string) error

WriteChildren writes a children of the tree.

func (*TreePrinter) WriteNode

func (p *TreePrinter) WriteNode(format string, args ...interface{}) error

WriteNode writes the main node.

type Type

type Type interface {
	// Compare returns an integer comparing two values.
	// The result will be 0 if a==b, -1 if a < b, and +1 if a > b.
	Compare(interface{}, interface{}) (int, error)
	// Convert a value of a compatible type to a most accurate type.
	Convert(interface{}) (interface{}, error)
	// MustConvert converts a value of a compatible type to a most accurate type, causing a panic on failure.
	MustConvert(interface{}) interface{}
	// Promote will promote the current type to the largest representing type of the same kind, such as Int8 to Int64.
	Promote() Type
	// SQL returns the sqltypes.Value for the given value.
	SQL(interface{}) (sqltypes.Value, error)
	// Type returns the query.Type for the given Type.
	Type() query.Type
	// Zero returns the golang zero value for this type
	Zero() interface{}
	fmt.Stringer
}

Type represents a SQL type.

func ColumnTypeToType

func ColumnTypeToType(ct *sqlparser.ColumnType) (Type, error)

ColumnTypeToType gets the column type using the column definition.

func CreateArray

func CreateArray(underlying Type) Type

CreateArray returns a new CreateArray type of the given underlying type.

func CreateTuple

func CreateTuple(types ...Type) Type

CreateTuple returns a new tuple type with the given element types.

func UnderlyingType

func UnderlyingType(t Type) Type

UnderlyingType returns the underlying type of an array if the type is an array, or the type itself in any other case.

type TypedValue

type TypedValue struct {
	Typ   Type
	Value interface{}
}

TypedValue is a value along with its type.

type UnresolvedDatabase

type UnresolvedDatabase string

UnresolvedDatabase is a database which has not been resolved yet.

func (UnresolvedDatabase) GetTableInsensitive

func (UnresolvedDatabase) GetTableInsensitive(ctx *Context, tblName string) (Table, bool, error)

func (UnresolvedDatabase) GetTableNames

func (UnresolvedDatabase) GetTableNames(ctx *Context) ([]string, error)

func (UnresolvedDatabase) Name

func (d UnresolvedDatabase) Name() string

Name returns the database name.

func (UnresolvedDatabase) Tables

func (UnresolvedDatabase) Tables() map[string]Table

Tables returns the tables in the database.

type UpdatableTable

type UpdatableTable interface {
	Table
	// Updater returns a RowUpdater for this table. The RowUpdater will have Update called once for each row to be
	// updated, followed by a call to Close() when all rows have been processed.
	Updater(ctx *Context) RowUpdater
}

UpdateableTable is a table that can process updates of existing rows via update statements.

type VersionedDatabase

type VersionedDatabase interface {
	Database

	// GetTableInsensitiveAsOf retrieves a table by its case-insensitive name with the same semantics as
	// Database.GetTableInsensitive, but at a particular revision of the database. Implementors must choose which types
	// of expressions to accept as revision names.
	GetTableInsensitiveAsOf(ctx *Context, tblName string, asOf interface{}) (Table, bool, error)

	// GetTableNamesAsOf returns the table names of every table in the database as of the revision given. Implementors
	// must choose which types of expressions to accept as revision names.
	GetTableNamesAsOf(ctx *Context, asOf interface{}) ([]string, error)
}

VersionedDatabase is a Database that can return tables as they existed at different points in time. The engine supports queries on historical table data via the AS OF construct introduced in SQL 2011.

type View

type View struct {
	// contains filtered or unexported fields
}

View is defined by a Node and has a name.

func NewView

func NewView(name string, definition Node, textDefinition string) View

NewView creates a View with the specified name and definition.

func (*View) Definition

func (v *View) Definition() Node

Definition returns the definition of the view.

func (*View) Name

func (v *View) Name() string

Name returns the name of the view.

func (*View) TextDefinition

func (v *View) TextDefinition() string

TextDefinition returns the text definition of the view as originally defined.

type ViewCreator

type ViewCreator interface {
	// Notifies the database that a view with the given name and the given
	// select statement as been created.
	CreateView(ctx *Context, name string, selectStatement string) error
}

ViewCreator should be implemented by databases that want to know when a view has been created.

type ViewDropper

type ViewDropper interface {
	DropView(ctx *Context, name string) error
}

ViewDropper should be implemented by databases that want to know when a view is dropped.

type ViewKey

type ViewKey struct {
	// contains filtered or unexported fields
}

Views are scoped by the databases in which they were defined, so a key in the view registry is a pair of names: database and view.

func NewViewKey

func NewViewKey(databaseName, viewName string) ViewKey

NewViewKey creates a ViewKey ensuring both names are lowercase.

type ViewRegistry

type ViewRegistry struct {
	// contains filtered or unexported fields
}

ViewRegistry is a map of ViewKey to View whose access is protected by a RWMutex.

func NewViewRegistry

func NewViewRegistry() *ViewRegistry

NewViewRegistry creates an empty ViewRegistry.

func (*ViewRegistry) AllViews

func (r *ViewRegistry) AllViews() map[ViewKey]View

AllViews returns the map of all views in the registry.

func (*ViewRegistry) Delete

func (r *ViewRegistry) Delete(databaseName, viewName string) error

Delete deletes the view specified by the pair {databaseName, viewName}, returning an error if it does not exist.

func (*ViewRegistry) DeleteList

func (r *ViewRegistry) DeleteList(keys []ViewKey, errIfNotExists bool) error

DeleteList tries to delete a list of view keys. If the list contains views that do exist and views that do not, the existing views are deleted if and only if the errIfNotExists flag is set to false; if it is set to true, no views are deleted and an error is returned.

func (*ViewRegistry) Exists

func (r *ViewRegistry) Exists(databaseName, viewName string) bool

Exists returns whether the specified key is already registered

func (*ViewRegistry) Register

func (r *ViewRegistry) Register(database string, view View) error

Register adds the view specified by the pair {database, view.Name()}, returning an error if there is already an element with that key.

func (*ViewRegistry) View

func (r *ViewRegistry) View(databaseName, viewName string) (*View, error)

View returns a pointer to the view specified by the pair {databaseName, viewName}, returning an error if it does not exist.

func (*ViewRegistry) ViewsInDatabase

func (r *ViewRegistry) ViewsInDatabase(databaseName string) (views []View)

ViewsInDatabase returns an array of all the views registered under the specified database.

type Visitor

type Visitor interface {
	// Visit method is invoked for each expr encountered by Walk.
	// If the result Visitor is not nul, Walk visits each of the children
	// of the expr with that visitor, followed by a call of Visit(nil)
	// to the returned visitor.
	Visit(expr Expression) Visitor
}

Visitor visits exprs in the plan.

type Warning

type Warning struct {
	Level   string
	Message string
	Code    int
}

Warning stands for mySQL warning record.

type YearType

type YearType interface {
	Type
}

Represents the YEAR type. https://dev.mysql.com/doc/refman/8.0/en/year.html

var (
	Year YearType = yearType{}

	ErrConvertingToYear = errors.NewKind("value %v is not a valid Year")
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL