Help us shape the future of Go! Take the 2026 Go Developer Survey

adapters

package
v1.26.6 Latest Latest
Warning

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

Go to latest
Published: Oct 10, 2026 License: MIT Imports: 6 Imported by: 0

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetRegisteredTypes

func GetRegisteredTypes() []string

GetRegisteredTypes возвращает типы из глобальной фабрики

func IsRegistered

func IsRegistered(dbType string) bool

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{}
    })
}

func Unregister

func Unregister(dbType string)

Unregister удаляет адаптер из глобальной фабрики

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

func MustNew(ctx context.Context, cfg Config) Adapter

MustNew создает адаптер или паникует при ошибке Использовать только в init() или main() где паника допустима

func New

func New(ctx context.Context, cfg Config) (Adapter, error)

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

func NewWithoutConnect(dbType string) (Adapter, error)

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 NewFactory

func NewFactory() *Factory

NewFactory создает новую фабрику адаптеров

func (*Factory) Create

func (f *Factory) Create(ctx context.Context, cfg Config) (Adapter, error)

Create создает и подключает адаптер по конфигурации Возвращает готовый к работе адаптер или ошибку

Пример:

adapter, err := factory.Create(ctx, adapters.Config{
    Type: "postgres",
    DSN:  "postgresql://user:pass@localhost:5432/db",
})

func (*Factory) CreateWithoutConnect

func (f *Factory) CreateWithoutConnect(dbType string) (Adapter, error)

CreateWithoutConnect создает адаптер БЕЗ подключения к БД Полезно для тестирования или отложенного подключения

func (*Factory) GetRegisteredTypes

func (f *Factory) GetRegisteredTypes() []string

GetRegisteredTypes возвращает список всех зарегистрированных типов БД

func (*Factory) IsRegistered

func (f *Factory) IsRegistered(dbType string) bool

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

func (f *Factory) Unregister(dbType string)

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 и специфичными типами СУБД

type ViewInfo

type ViewInfo struct {
	// Name - имя view
	Name string

	// IsUpdatable - можно ли выполнять INSERT/UPDATE/DELETE на этом view
	// true  = updatable view (можно импортировать)
	// false = read-only view (только экспорт)
	IsUpdatable bool
}

ViewInfo - информация о database view

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.

Jump to

Keyboard shortcuts

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