Documentation
¶
Overview ¶
Package adapters предоставляет универсальный интерфейс для работы с различными СУБД.
Архитектура двухуровневого адаптера ¶
Пакет реализует паттерн "двухуровневый адаптер":
┌─────────────────────────────────────────┐
│ Business Logic (TDTP Core) │
│ - packet.DataPacket │
│ - schema.Schema │
│ - tdtql.Query │
└─────────────────┬───────────────────────┘
│
┌─────────────────▼───────────────────────┐
│ Level 1: Universal Adapter Interface │ ← pkg/adapters/adapter.go
│ │
│ type Adapter interface { │
│ Connect(ctx, Config) error │
│ ExportTable(ctx, name) (...) │
│ ImportPacket(ctx, pkt, strategy) │
│ ... │
│ } │
└─────────────────┬───────────────────────┘
│
┌─────────┼─────────┐
│ │ │
┌───────▼────┐ ┌──▼──────┐ ┌▼────────┐
│ SQLite │ │PostgreSQL│ │MS SQL │ ← Level 2: Specific
│ Adapter │ │ Adapter │ │Adapter │ Implementations
└────────────┘ └──────────┘ └─────────┘
Level 1: Универсальный интерфейс ¶
Level 1 определяет единый API для всех операций с БД:
- Lifecycle: Connect, Close, Ping
- Export: ExportTable, ExportTableWithQuery
- Import: ImportPacket, ImportPackets
- Schema: GetTableSchema, TableExists, GetTableNames
- Transactions: BeginTx
- Metadata: GetDatabaseVersion, GetDatabaseType
Level 2: Специфичные реализации ¶
Каждая СУБД имеет свою реализацию адаптера:
- pkg/adapters/sqlite - SQLite адаптер
- pkg/adapters/postgres - PostgreSQL адаптер
- pkg/adapters/mssql - MS SQL Server адаптер (будущее)
Каждая реализация оптимизирована для своей СУБД:
- PostgreSQL: поддержка COPY, JSONB, массивов, схем
- SQLite: оптимизация для embedded БД
- MS SQL: MERGE для UPSERT, специфика типов
Использование ¶
Основной способ создания адаптера - через фабрику:
import "github.com/ruslano69/tdtp-framework/pkg/adapters"
// Создание PostgreSQL адаптера
adapter, err := adapters.New(ctx, adapters.Config{
Type: "postgres",
DSN: "postgresql://user:pass@localhost:5432/db",
Schema: "public",
})
if err != nil {
log.Fatal(err)
}
defer adapter.Close(ctx)
// Экспорт таблицы
packets, err := adapter.ExportTable(ctx, "users")
if err != nil {
log.Fatal(err)
}
// Импорт в другую БД
targetAdapter, _ := adapters.New(ctx, adapters.Config{
Type: "sqlite",
DSN: "file:app.db",
})
defer targetAdapter.Close(ctx)
err = targetAdapter.ImportPackets(ctx, packets, adapters.StrategyReplace)
Регистрация адаптеров ¶
Адаптеры регистрируются автоматически через init():
// В pkg/adapters/postgres/adapter.go
func init() {
adapters.Register("postgres", func() adapters.Adapter {
return &Adapter{}
})
}
После импорта пакета адаптера он становится доступен через фабрику:
import _ "github.com/ruslano69/tdtp-framework/pkg/adapters/postgres" import _ "github.com/ruslano69/tdtp-framework/pkg/adapters/sqlite"
Стратегии импорта ¶
Поддерживаются 4 стратегии:
- StrategyReplace: UPSERT (вставить или обновить)
- StrategyIgnore: пропустить дубликаты
- StrategyFail: ошибка при дубликатах
- StrategyCopy: массовая вставка (PostgreSQL COPY)
Пример:
// UPSERT: обновить существующие строки adapter.ImportPacket(ctx, packet, adapters.StrategyReplace) // Игнорировать дубликаты adapter.ImportPacket(ctx, packet, adapters.StrategyIgnore) // Максимальная производительность (только PostgreSQL) adapter.ImportPacket(ctx, packet, adapters.StrategyCopy)
Транзакции ¶
Для атомарного импорта используйте транзакции:
tx, err := adapter.BeginTx(ctx)
if err != nil {
log.Fatal(err)
}
defer tx.Rollback(ctx)
// Импорт в рамках транзакции
for _, packet := range packets {
if err := adapter.ImportPacket(ctx, packet, strategy); err != nil {
return err // автоматический Rollback
}
}
tx.Commit(ctx)
Или используйте ImportPackets для автоматической транзакции:
// Автоматически создает транзакцию adapter.ImportPackets(ctx, packets, adapters.StrategyReplace)
Маппинг типов ¶
Каждый адаптер реализует TypeMapper для конвертации типов:
TDTP Type → PostgreSQL → SQLite → MS SQL ───────────────────────────────────────────────────────── INTEGER → INTEGER → INTEGER → INT INTEGER (bigint) → BIGINT → INTEGER → BIGINT INTEGER (smallint)→ SMALLINT → INTEGER → SMALLINT REAL → DOUBLE PRECISION → REAL → FLOAT DECIMAL(10,2) → NUMERIC(10,2)→ REAL → DECIMAL(10,2) TEXT → TEXT → TEXT → NVARCHAR(MAX) TEXT(100) → VARCHAR(100) → TEXT → NVARCHAR(100) BOOLEAN → BOOLEAN → INTEGER → BIT DATETIME → TIMESTAMP → TEXT → DATETIME2 TEXT (uuid) → UUID → TEXT → UNIQUEIDENTIFIER TEXT (json) → JSONB → TEXT → NVARCHAR(MAX) TEXT (array:*) → ARRAY → TEXT → не поддерживается
Производительность ¶
Для оптимальной производительности:
1. Используйте StrategyCopy для PostgreSQL:
- COPY в 5-10x быстрее обычного INSERT
- Идеально для начального импорта больших объемов данных
2. Используйте батчинг:
- ImportPackets автоматически батчирует INSERT запросы
- Размер батча: 1000 строк (настраиваемо)
3. Используйте транзакции:
- ImportPackets автоматически оборачивает в транзакцию
- Для ручного контроля используйте BeginTx
Benchmark результаты (PostgreSQL, 100k строк):
- INSERT (StrategyFail): ~45s
- UPSERT (StrategyReplace): ~50s
- COPY (StrategyCopy): ~8s
Создание нового адаптера ¶
Для добавления поддержки новой СУБД:
1. Создайте пакет pkg/adapters/yourdb
2. Реализуйте интерфейс Adapter:
type Adapter struct {
// Ваши поля (БЕЗ context.Context!)
}
func (a *Adapter) Connect(ctx context.Context, cfg adapters.Config) error
func (a *Adapter) ExportTable(ctx context.Context, tableName string) ([]*packet.DataPacket, error)
// ... остальные методы интерфейса
3. Зарегистрируйте адаптер в init():
func init() {
adapters.Register("yourdb", func() adapters.Adapter {
return &Adapter{}
})
}
4. Реализуйте TypeMapper и QueryBuilder для вашей СУБД
5. Добавьте тесты:
- Unit тесты с моками
- Integration тесты с testcontainers
Смотрите pkg/adapters/sqlite и pkg/adapters/postgres как примеры.
Совместимость ¶
Feature │ SQLite │ PostgreSQL │ MS SQL ─────────────────────┼────────┼────────────┼──────── Export │ ✅ │ ✅ │ 🚧 Import │ ✅ │ ✅ │ 🚧 UPSERT │ ✅ │ ✅ │ 🚧 Bulk COPY │ ❌ │ ✅ │ 🚧 Transactions │ ✅ │ ✅ │ 🚧 Arrays │ ❌ │ ✅ │ 🚧 JSON/JSONB │ ✅ │ ✅ │ 🚧 UUID │ ❌ │ ✅ │ 🚧 Custom Schema │ ❌ │ ✅ │ 🚧 ✅ Полная поддержка 🚧 В разработке ❌ Не поддерживается
Changelog ¶
v1.0 (текущая версия):
- Двухуровневая архитектура адаптеров
- Единый интерфейс Adapter
- Фабрика для создания адаптеров
- SQLite и PostgreSQL адаптеры
- Поддержка стратегий импорта
- Транзакции
- TypeMapper и QueryBuilder интерфейсы
v0.9 (предыдущая):
- Отдельные адаптеры без общего интерфейса
- context.Context в struct (анти-паттерн)
- Разные API для каждого адаптера
Index ¶
- func GetRegisteredTypes() []string
- func IsRegistered(dbType string) bool
- func Register(dbType string, constructor AdapterConstructor)
- func Unregister(dbType string)
- type Adapter
- type AdapterConstructor
- type ColumnInfo
- type ColumnReport
- type Config
- type DatabaseInfo
- type ExportOptions
- type Factory
- func (f *Factory) Create(ctx context.Context, cfg Config) (Adapter, error)
- func (f *Factory) CreateWithoutConnect(dbType string) (Adapter, error)
- func (f *Factory) GetRegisteredTypes() []string
- func (f *Factory) IsRegistered(dbType string) bool
- func (f *Factory) Register(dbType string, constructor AdapterConstructor)
- func (f *Factory) Unregister(dbType string)
- type ForeignKeyReport
- type ImportOptions
- type ImportStrategy
- type IncrementalConfig
- type QueryBuilder
- type SSLConfig
- type SchemaInfo
- type TableInfo
- type TableReport
- type TableStats
- type Tx
- type TypeMapper
- type ViewInfo
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetRegisteredTypes ¶
func GetRegisteredTypes() []string
GetRegisteredTypes возвращает типы из глобальной фабрики
func IsRegistered ¶
IsRegistered проверяет регистрацию в глобальной фабрике
func Register ¶
func Register(dbType string, constructor AdapterConstructor)
Register регистрирует адаптер в глобальной фабрике Эта функция обычно вызывается в init() функциях адаптеров
Пример (в pkg/adapters/postgres/adapter.go):
func init() {
adapters.Register("postgres", func() adapters.Adapter {
return &Adapter{}
})
}
Types ¶
type Adapter ¶
type Adapter interface {
// Connect устанавливает подключение к БД
Connect(ctx context.Context, cfg Config) error
// Close закрывает подключение к БД
Close(ctx context.Context) error
// Ping проверяет доступность БД
Ping(ctx context.Context) error
// ExportTable экспортирует всю таблицу в TDTP пакеты
ExportTable(ctx context.Context, tableName string) ([]*packet.DataPacket, error)
// ExportTableWithQuery экспортирует таблицу с фильтрацией через TDTQL
ExportTableWithQuery(
ctx context.Context,
tableName string,
query *packet.Query,
sender, recipient string,
) ([]*packet.DataPacket, error)
// ExportTableIncremental экспортирует только измененные записи с момента последней синхронизации
// Использует IncrementalConfig для отслеживания изменений
// Возвращает пакеты и последнее значение tracking поля для следующей синхронизации
ExportTableIncremental(
ctx context.Context,
tableName string,
incrementalConfig IncrementalConfig,
) ([]*packet.DataPacket, string, error)
// ImportPacket импортирует один TDTP пакет в БД
ImportPacket(ctx context.Context, pkt *packet.DataPacket, strategy ImportStrategy) error
// ImportPackets импортирует множество пакетов атомарно (в одной транзакции)
ImportPackets(ctx context.Context, packets []*packet.DataPacket, strategy ImportStrategy) error
// GetTableSchema возвращает схему таблицы в формате TDTP
GetTableSchema(ctx context.Context, tableName string) (packet.Schema, error)
// GetTableNames возвращает список всех таблиц в БД
GetTableNames(ctx context.Context) ([]string, error)
// GetViewNames возвращает список всех views в БД с информацией об updatable/read-only
GetViewNames(ctx context.Context) ([]ViewInfo, error)
// TableExists проверяет существование таблицы
TableExists(ctx context.Context, tableName string) (bool, error)
// BeginTx начинает транзакцию
BeginTx(ctx context.Context) (Tx, error)
// GetDatabaseVersion возвращает версию СУБД
GetDatabaseVersion(ctx context.Context) (string, error)
// GetDatabaseType возвращает тип СУБД: "sqlite", "postgres", "mssql"
GetDatabaseType() string
// InspectTable returns extended metadata for a live DB table:
// native column types, FK relationships, row count, and a sample record.
// Unlike GetTableSchema (which returns TDTP-typed schema),
// InspectTable is optimized for agentic discovery — it reveals the
// "raw" database view of a table without any TDTP abstraction.
InspectTable(ctx context.Context, tableName string) (*TableReport, error)
}
Adapter - универсальный интерфейс для всех адаптеров БД Этот интерфейс реализуется каждым специфичным адаптером (SQLite, PostgreSQL, MS SQL)
func MustNew ¶
MustNew создает адаптер или паникует при ошибке Использовать только в init() или main() где паника допустима
func New ¶
New создает адаптер через глобальную фабрику Это основной способ создания адаптеров в приложении
Пример:
adapter, err := adapters.New(ctx, adapters.Config{
Type: "sqlite",
DSN: "file:app.db",
})
if err != nil {
log.Fatal(err)
}
defer adapter.Close(ctx)
func NewWithoutConnect ¶
NewWithoutConnect создает адаптер БЕЗ подключения через глобальную фабрику
type AdapterConstructor ¶
type AdapterConstructor func() Adapter
AdapterConstructor - функция-конструктор адаптера Возвращает новый экземпляр адаптера (еще не подключенный к БД)
type ColumnInfo ¶
type ColumnInfo struct {
Name string // Имя колонки
Type string // SQL тип
TDTPField packet.Field // TDTP представление
Nullable bool // Допускает NULL
DefaultValue *string // Значение по умолчанию
IsPrimaryKey bool // Является ли Primary Key
IsAutoIncr bool // Auto increment/SERIAL
Comment string // Комментарий (если поддерживается)
}
ColumnInfo - расширенная информация о колонке
type ColumnReport ¶
type ColumnReport struct {
Name string `yaml:"name" json:"name"`
NativeType string `yaml:"native_type" json:"native_type"`
TDTPType string `yaml:"tdtp_type" json:"tdtp_type"`
Nullable bool `yaml:"nullable" json:"nullable"`
PrimaryKey bool `yaml:"primary_key" json:"primary_key"`
Identity bool `yaml:"identity,omitempty" json:"identity,omitempty"` // auto-increment / IDENTITY column
Computed bool `yaml:"computed,omitempty" json:"computed,omitempty"` // computed / generated column
Default string `yaml:"default,omitempty" json:"default,omitempty"` // default expression; empty if none
Length int `yaml:"length,omitempty" json:"length,omitempty"` // char/varchar max length
Precision int `yaml:"precision,omitempty" json:"precision,omitempty"` // numeric precision
Scale int `yaml:"scale,omitempty" json:"scale,omitempty"` // numeric scale
}
ColumnReport describes a single column in a live DB table.
type Config ¶
type Config struct {
// Type - тип СУБД: "sqlite", "postgres", "mssql"
Type string
// DSN - строка подключения (connection string)
// Примеры:
// SQLite: "file:app.db"
// PostgreSQL: "postgresql://user:pass@localhost:5432/dbname"
// MS SQL: "sqlserver://user:pass@localhost:1433?database=dbname"
DSN string
// Schema - схема по умолчанию (для PostgreSQL/MS SQL)
// SQLite игнорирует это поле
Schema string
// Timeout - таймаут для запросов
Timeout time.Duration
// MaxConns - максимальное количество подключений в пуле
MaxConns int
// MinConns - минимальное количество idle подключений
MinConns int
// SSL - настройки SSL/TLS
SSL SSLConfig
// CompatibilityMode - режим совместимости для MS SQL Server
// Значения: "2012", "2016", "2019", "auto" (по умолчанию)
// Используется только для MS SQL Server adapter
CompatibilityMode string
// StrictCompatibility - строгий режим совместимости
// Если true, ошибка при попытке использовать недоступные функции
// Если false, предупреждение и fallback на альтернативные методы
StrictCompatibility bool
// WarnOnIncompatible - предупреждать о несовместимых функциях
// Показывает предупреждения когда используются функции недоступные
// в текущем compatibility mode
WarnOnIncompatible bool
// NoDateSentinels — список дат-заглушек для "нет даты" (DB-specific conventions).
// При экспорте: если дата в поле совпадает с sentinel → кодируется как "0000-00-00" в TDTP.
// Пример для MSSQL: ["1900-01-01", "1753-01-01"]
NoDateSentinels []string
// Charset — кодировка строковых данных в БД.
// Оставить пустым если драйвер конвертирует в UTF-8 автоматически (pgx, go-mssqldb, modernc/sqlite).
// Указать явно для адаптеров где auto-conversion отсутствует (ODBC, JDBC, legacy drivers).
// Примеры: "windows-1251", "koi8-r", "iso-8859-1"
Charset string
// StrictSchema — при CreateTable восстанавливать заявленную длину
// текстовых полей (VARCHAR(n)/CHAR(n)) вместо безусловного TEXT.
// По умолчанию false: TEXT без ограничений, чтобы импорт не падал на
// обрезании (см. историю в pkg/adapters/postgres/types.go — этот же
// откат уже случился один раз). При true колонка получает то же
// ограничение длины, что было на источнике, и вставка строки длиннее
// n падает с ошибкой БД сразу, вместо молчаливого расширения до TEXT —
// то есть обменивает удобство на "падать вовремя, а не после".
//
// Точное совпадение длины гарантировано только когда пакет
// импортируется в ту же СУБД, из которой был экспортирован: единица
// длины (символы/байты) и правила усечения различаются между
// движками. Сейчас читается только адаптером PostgreSQL.
StrictSchema bool
}
Config - универсальная конфигурация подключения к БД
type DatabaseInfo ¶
type DatabaseInfo struct {
Type string // "sqlite", "postgres", "mssql"
Version string // Версия СУБД
Schemas []SchemaInfo // Схемы (для PostgreSQL/MS SQL)
Tables []TableInfo // Таблицы
TotalSize int64 // Общий размер БД
Encoding string // Кодировка
}
DatabaseInfo - информация о БД
type ExportOptions ¶
type ExportOptions struct {
// BatchSize - размер батча (количество строк в одном пакете)
BatchSize int
// IncludeSchema - включать ли схему в пакеты
IncludeSchema bool
// Sender - отправитель (для заполнения Header.Sender)
Sender string
// Recipient - получатель (для заполнения Header.Recipient)
Recipient string
// Compression - использовать ли сжатие (будущая функциональность)
Compression bool
}
ExportOptions - опции для экспорта данных
func DefaultExportOptions ¶
func DefaultExportOptions() ExportOptions
DefaultExportOptions возвращает опции экспорта по умолчанию
type Factory ¶
type Factory struct {
// contains filtered or unexported fields
}
Factory - фабрика для создания адаптеров Управляет регистрацией и созданием адаптеров различных типов
func (*Factory) Create ¶
Create создает и подключает адаптер по конфигурации Возвращает готовый к работе адаптер или ошибку
Пример:
adapter, err := factory.Create(ctx, adapters.Config{
Type: "postgres",
DSN: "postgresql://user:pass@localhost:5432/db",
})
func (*Factory) CreateWithoutConnect ¶
CreateWithoutConnect создает адаптер БЕЗ подключения к БД Полезно для тестирования или отложенного подключения
func (*Factory) GetRegisteredTypes ¶
GetRegisteredTypes возвращает список всех зарегистрированных типов БД
func (*Factory) IsRegistered ¶
IsRegistered проверяет, зарегистрирован ли адаптер для данного типа БД
func (*Factory) Register ¶
func (f *Factory) Register(dbType string, constructor AdapterConstructor)
Register регистрирует конструктор адаптера для определенного типа БД dbType должен быть одним из: "sqlite", "postgres", "mssql" constructor - функция, которая создает новый экземпляр адаптера
Пример:
factory.Register("postgres", func() adapters.Adapter {
return &postgres.Adapter{}
})
func (*Factory) Unregister ¶
Unregister удаляет конструктор адаптера
type ForeignKeyReport ¶
type ForeignKeyReport struct {
Column string `yaml:"column" json:"column"`
ReferencesTable string `yaml:"references_table" json:"references_table"`
ReferencesColumn string `yaml:"references_column" json:"references_column"`
OnDelete string `yaml:"on_delete,omitempty" json:"on_delete,omitempty"`
}
ForeignKeyReport describes a single FK constraint column reference.
type ImportOptions ¶
type ImportOptions struct {
// Strategy - стратегия импорта
Strategy ImportStrategy
// CreateTable - создавать ли таблицу автоматически
CreateTable bool
// TruncateFirst - очистить таблицу перед импортом
TruncateFirst bool
// BatchSize - размер батча для массовых вставок
BatchSize int
// UseTransaction - использовать транзакцию
UseTransaction bool
// ContinueOnError - продолжать при ошибках (не рекомендуется)
ContinueOnError bool
}
ImportOptions - опции для импорта данных
func DefaultImportOptions ¶
func DefaultImportOptions() ImportOptions
DefaultImportOptions возвращает опции импорта по умолчанию
type ImportStrategy ¶
type ImportStrategy string
ImportStrategy - стратегия импорта данных
const ( // StrategyReplace - UPSERT (вставить или обновить) // SQLite: INSERT OR REPLACE // PostgreSQL: INSERT ... ON CONFLICT DO UPDATE // MS SQL: MERGE StrategyReplace ImportStrategy = "replace" // StrategyIgnore - пропустить дубликаты // SQLite: INSERT OR IGNORE // PostgreSQL: INSERT ... ON CONFLICT DO NOTHING // MS SQL: MERGE с пропуском StrategyIgnore ImportStrategy = "ignore" // StrategyFail - ошибка при дубликатах // Все СУБД: обычный INSERT StrategyFail ImportStrategy = "fail" // StrategyCopy - массовая вставка (если поддерживается) // SQLite: не поддерживается (fallback на StrategyFail) // PostgreSQL: COPY FROM // MS SQL: BULK INSERT StrategyCopy ImportStrategy = "copy" )
type IncrementalConfig ¶
type IncrementalConfig = sync.IncrementalConfig
IncrementalConfig is an alias for sync.IncrementalConfig.
type QueryBuilder ¶
type QueryBuilder interface {
// BuildSelectAll строит SELECT * FROM table
BuildSelectAll(tableName string) string
// BuildSelectWithFilter строит SELECT с WHERE/LIMIT/OFFSET
// Возвращает SQL запрос и массив параметров
BuildSelectWithFilter(tableName string, query *packet.Query) (sql string, args []any, err error)
// BuildInsert строит INSERT INTO table (cols) VALUES (...)
BuildInsert(tableName string, fields []packet.Field) string
// BuildUpsert строит запрос для UPSERT операции
// pkFields - список колонок Primary Key
// Синтаксис зависит от СУБД:
// PostgreSQL: INSERT ... ON CONFLICT DO UPDATE
// SQLite: INSERT OR REPLACE
// MS SQL: MERGE
BuildUpsert(tableName string, fields []packet.Field, pkFields []string) string
// BuildCreateTable строит CREATE TABLE запрос
BuildCreateTable(tableName string, schema packet.Schema) string
// QuoteIdentifier экранирует идентификатор (имя таблицы/колонки)
// PostgreSQL: "table_name"
// SQLite: "table_name" или `table_name`
// MS SQL: [table_name]
QuoteIdentifier(identifier string) string
}
QueryBuilder - интерфейс для построения SQL запросов Каждый адаптер реализует свой QueryBuilder с учетом синтаксиса СУБД
type SSLConfig ¶
type SSLConfig struct {
// Mode - режим SSL:
// "disable" - без SSL
// "require" - требовать SSL
// "verify-ca" - проверять CA сертификат
// "verify-full" - полная проверка сертификата
Mode string
// CertPath - путь к клиентскому сертификату
CertPath string
// KeyPath - путь к приватному ключу
KeyPath string
// CAPath - путь к CA сертификату
CAPath string
}
SSLConfig - настройки SSL/TLS подключения
type SchemaInfo ¶
type SchemaInfo struct {
Name string // Имя схемы
Tables []string // Список таблиц в схеме
Description string // Описание схемы (если есть)
}
SchemaInfo - информация о схеме таблицы (для СУБД с поддержкой схем)
type TableInfo ¶
type TableInfo struct {
Name string // Имя таблицы
Schema string // Схема (для PostgreSQL/MS SQL)
Columns []ColumnInfo // Колонки
RowCount int64 // Примерное количество строк
SizeBytes int64 // Размер таблицы в байтах (если доступно)
Comment string // Комментарий таблицы
}
TableInfo - расширенная информация о таблице
type TableReport ¶
type TableReport struct {
Table string `yaml:"table" json:"table"`
DBType string `yaml:"db_type" json:"db_type"`
DBVersion string `yaml:"db_version" json:"db_version"`
Schema string `yaml:"schema,omitempty" json:"schema,omitempty"`
Columns []ColumnReport `yaml:"columns" json:"columns"`
ForeignKeys []ForeignKeyReport `yaml:"foreign_keys,omitempty" json:"foreign_keys,omitempty"`
Stats TableStats `yaml:"stats" json:"stats"`
Sample map[string]string `yaml:"sample,omitempty" json:"sample,omitempty"`
}
TableReport is the full introspection result of a live DB table, returned by Adapter.InspectTable.
type TableStats ¶
type TableStats struct {
TotalRows int64 `yaml:"total_rows" json:"total_rows"`
}
TableStats contains table-level statistics.
type Tx ¶
type Tx interface {
// Commit фиксирует изменения транзакции
Commit(ctx context.Context) error
// Rollback откатывает изменения транзакции
Rollback(ctx context.Context) error
}
Tx - интерфейс транзакции Позволяет выполнять операции атомарно
type TypeMapper ¶
type TypeMapper interface {
// TDTPToSQL конвертирует поле TDTP в SQL тип
// Пример:
// PostgreSQL: Field{Type:"INTEGER", Subtype:"bigint"} → "BIGINT"
// SQLite: Field{Type:"INTEGER"} → "INTEGER"
TDTPToSQL(field packet.Field) string
// SQLToTDTP конвертирует SQL тип в поле TDTP
// Пример:
// PostgreSQL: "VARCHAR(100)" → Field{Type:"TEXT", Length:100}
// SQLite: "INTEGER" → Field{Type:"INTEGER"}
SQLToTDTP(sqlType string, nullable bool) (packet.Field, error)
// ValueToString конвертирует значение БД в строку для TDTP пакета
// Обрабатывает специфичные типы каждой СУБД (UUID, JSON, массивы и т.д.)
ValueToString(value any) string
// StringToValue конвертирует строку из TDTP пакета в значение для БД
// Используется при импорте данных
StringToValue(str string, field packet.Field) (any, error)
}
TypeMapper - интерфейс для маппинга типов данных Каждый адаптер должен реализовать свой TypeMapper для конвертации типов между TDTP и специфичными типами СУБД
Directories
¶
| Path | Synopsis |
|---|---|
|
Package access provides a TDTP adapter for Microsoft Access (.mdb/.accdb) via ODBC.
|
Package access provides a TDTP adapter for Microsoft Access (.mdb/.accdb) via ODBC. |
|
Package base предоставляет общие хелперы и утилиты для всех адаптеров БД
|
Package base предоставляет общие хелперы и утилиты для всех адаптеров БД |
|
Package mssql provides a Microsoft SQL Server adapter for TDTP Framework.
|
Package mssql provides a Microsoft SQL Server adapter for TDTP Framework. |
|
Package mysql provides functionality for the TDTP framework.
|
Package mysql provides functionality for the TDTP framework. |
|
Package oracle implements the TDTP adapter for Oracle Database 18c and 21c.
|
Package oracle implements the TDTP adapter for Oracle Database 18c and 21c. |
|
Package postgres provides functionality for the TDTP framework.
|
Package postgres provides functionality for the TDTP framework. |
|
Package sqlite provides functionality for the TDTP framework.
|
Package sqlite provides functionality for the TDTP framework. |