Documentation
¶
Overview ¶
Package mysql provides functionality for the TDTP framework.
Index ¶
- Constants
- func BuildFieldFromColumn(columnName, dataType string, isPrimaryKey bool) (packet.Field, error)
- func TDTPToMySQL(field packet.Field) string
- type Adapter
- func (a *Adapter) BeginTx(ctx context.Context) (adapters.Tx, error)
- func (a *Adapter) Close(ctx context.Context) error
- func (a *Adapter) Connect(ctx context.Context, cfg adapters.Config) error
- func (a *Adapter) CreateTable(ctx context.Context, tableName string, schema packet.Schema) error
- func (a *Adapter) DropTable(ctx context.Context, tableName string) error
- func (a *Adapter) ExecuteRawQuery(ctx context.Context, query string) (*packet.DataPacket, error)
- func (a *Adapter) ExportTable(ctx context.Context, tableName string) ([]*packet.DataPacket, error)
- func (a *Adapter) ExportTableIncremental(ctx context.Context, tableName string, ...) ([]*packet.DataPacket, string, error)
- func (a *Adapter) ExportTableWithQuery(ctx context.Context, tableName string, query *packet.Query, ...) ([]*packet.DataPacket, error)
- func (a *Adapter) GetDatabaseType() string
- func (a *Adapter) GetDatabaseVersion(ctx context.Context) (string, error)
- func (a *Adapter) GetRowCount(ctx context.Context, tableName string) (int64, error)
- func (a *Adapter) GetTableNames(ctx context.Context) ([]string, error)
- func (a *Adapter) GetTableSchema(ctx context.Context, tableName string) (packet.Schema, error)
- func (a *Adapter) GetViewNames(ctx context.Context) ([]adapters.ViewInfo, error)
- func (a *Adapter) ImportPacket(ctx context.Context, pkt *packet.DataPacket, strategy adapters.ImportStrategy) error
- func (a *Adapter) ImportPackets(ctx context.Context, packets []*packet.DataPacket, ...) error
- func (a *Adapter) InsertRows(ctx context.Context, tableName string, schema packet.Schema, rows []packet.Row, ...) error
- func (a *Adapter) InspectTable(ctx context.Context, tableName string) (*adapters.TableReport, error)
- func (a *Adapter) ParseFailures() []base.ParseFailure
- func (a *Adapter) Ping(ctx context.Context) error
- func (a *Adapter) ReadAllRows(ctx context.Context, tableName string, pkgSchema packet.Schema) ([][]string, error)
- func (a *Adapter) ReadAllRowsStream(ctx context.Context, tableName string, pkgSchema packet.Schema) (packet.Schema, <-chan []string, <-chan error, error)
- func (a *Adapter) ReadRowsWithSQL(ctx context.Context, sqlQuery string, pkgSchema packet.Schema) ([][]string, error)
- func (a *Adapter) RenameTable(ctx context.Context, oldName, newName string) error
- func (a *Adapter) SetColumnarLayout(on bool)
- func (a *Adapter) SetMaxFallbackRows(n int64)
- func (a *Adapter) SetMaxMessageSize(size int)
- func (a *Adapter) SetSkipSpecialValues(skip bool)
- func (a *Adapter) TableExists(ctx context.Context, tableName string) (bool, error)
Constants ¶
const AdapterType = "mysql"
AdapterType идентификатор MySQL адаптера
const MaxFractionalPrecision = 6
MaxFractionalPrecision — предел MySQL на дробную часть DATETIME/TIMESTAMP/TIME.
Variables ¶
This section is empty.
Functions ¶
func BuildFieldFromColumn ¶
BuildFieldFromColumn создает packet.Field из информации о колонке MySQL
func TDTPToMySQL ¶
TDTPToMySQL конвертирует TDTP тип в MySQL тип
Types ¶
type Adapter ¶
type Adapter struct {
// contains filtered or unexported fields
}
Adapter реализует adapters.Adapter для MySQL Написан с нуля с использованием base helpers для минимального дублирования
func (*Adapter) CreateTable ¶
CreateTable создает таблицу из TDTP схемы
func (*Adapter) ExecuteRawQuery ¶
ExecuteRawQuery выполняет произвольный SQL запрос
func (*Adapter) ExportTable ¶
ExportTable экспортирует всю таблицу - просто делегируем
func (*Adapter) ExportTableIncremental ¶
func (a *Adapter) ExportTableIncremental(ctx context.Context, tableName string, incrementalConfig adapters.IncrementalConfig) ([]*packet.DataPacket, string, error)
ExportTableIncremental - пока не реализовано
func (*Adapter) ExportTableWithQuery ¶
func (a *Adapter) ExportTableWithQuery(ctx context.Context, tableName string, query *packet.Query, sender, recipient string) ([]*packet.DataPacket, error)
ExportTableWithQuery экспортирует с TDTQL фильтрацией - просто делегируем
func (*Adapter) GetDatabaseType ¶
GetDatabaseType возвращает тип базы данных
func (*Adapter) GetDatabaseVersion ¶
GetDatabaseVersion возвращает версию MySQL
func (*Adapter) GetRowCount ¶
GetRowCount возвращает количество строк в таблице
func (*Adapter) GetTableNames ¶
GetTableNames возвращает список таблиц
func (*Adapter) GetTableSchema ¶
GetTableSchema читает схему таблицы из information_schema
func (*Adapter) GetViewNames ¶
GetViewNames возвращает список всех views с информацией об updatable/read-only
func (*Adapter) ImportPacket ¶
func (a *Adapter) ImportPacket(ctx context.Context, pkt *packet.DataPacket, strategy adapters.ImportStrategy) error
ImportPacket импортирует один пакет - просто делегируем
func (*Adapter) ImportPackets ¶
func (a *Adapter) ImportPackets(ctx context.Context, packets []*packet.DataPacket, strategy adapters.ImportStrategy) error
ImportPackets импортирует несколько пакетов - просто делегируем
func (*Adapter) InsertRows ¶
func (a *Adapter) InsertRows(ctx context.Context, tableName string, schema packet.Schema, rows []packet.Row, strategy adapters.ImportStrategy) error
InsertRows вставляет строки с учетом strategy Это ЕДИНСТВЕННОЕ место где MySQL-специфичная логика!
func (*Adapter) InspectTable ¶
func (a *Adapter) InspectTable(ctx context.Context, tableName string) (*adapters.TableReport, error)
InspectTable returns extended metadata for a live MySQL table. Implements adapters.Adapter.
func (*Adapter) ParseFailures ¶
func (a *Adapter) ParseFailures() []base.ParseFailure
ParseFailures implements base.ParseFailureReporter: values this adapter's exports could not convert to their declared type, since the previous call.
func (*Adapter) ReadAllRows ¶
func (a *Adapter) ReadAllRows(ctx context.Context, tableName string, pkgSchema packet.Schema) ([][]string, error)
ReadAllRows читает все строки из таблицы
func (*Adapter) ReadAllRowsStream ¶
func (a *Adapter) ReadAllRowsStream(ctx context.Context, tableName string, pkgSchema packet.Schema) (packet.Schema, <-chan []string, <-chan error, error)
ReadAllRowsStream читает таблицу потоком, реализуя base.StreamingDataReader.
Значения те же, что у ReadAllRows: обе дороги идут через base.cellToTDTP. Схему возвращает без изменений — MySQL, в отличие от MSSQL, ничего из неё не выкидывает (read-only колонки там режет PostProcessRows, которого здесь нет).
go-sql-driver действительно отдаёт строки по мере поступления, а не читает результат целиком. Это проверено, а не взято из документации: пик RSS экспорта одинаков на 524 288 и на 4 194 304 строках — 62 МБ в обоих случаях, при том что обычный путь на тех же данных вырос с 388 МБ до 2 823 МБ. Контейнер MySQL при этом держал те же ~617 МБ, что и до выборки, то есть проблема не переехала на сервер.
Признак настоящего потока — именно плоский пик при росте данных. Если он растёт линейно, драйвер материализует результат и поток декоративен.
func (*Adapter) ReadRowsWithSQL ¶
func (a *Adapter) ReadRowsWithSQL(ctx context.Context, sqlQuery string, pkgSchema packet.Schema) ([][]string, error)
ReadRowsWithSQL выполняет SQL и возвращает строки
func (*Adapter) RenameTable ¶
RenameTable переименовывает таблицу
func (*Adapter) SetColumnarLayout ¶
SetColumnarLayout включает колоночную раскладку Data (--columnar).
func (*Adapter) SetMaxFallbackRows ¶
SetMaxFallbackRows задаёт лимит строк для in-memory fallback при провале SQL pushdown.
func (*Adapter) SetMaxMessageSize ¶
SetMaxMessageSize задаёт максимальный размер одного TDTP пакета (в байтах). Вызывается из CLI при указании --packet-size.
func (*Adapter) SetSkipSpecialValues ¶
SetSkipSpecialValues включает режим --fast: DetectAndApply пропускается.