Documentation
¶
Overview ¶
Package access provides a TDTP adapter for Microsoft Access (.mdb/.accdb) via ODBC.
IMPORTANT CONSTRAINTS:
- Windows only: uses Win32 COM (ADOX), MDAC ODBC and SysWOW64\cscript.exe.
- 32-bit only: Microsoft Jet 4.0 ODBC is a 32-bit component. Always build with GOARCH=386: $env:GOARCH="386"; go build -tags nokafka -o tdtpcli_x86.exe ./cmd/tdtpcli/
Schema introspection uses ADOX (ActiveX Data Objects Extensions) via an embedded VBScript running under C:\Windows\SysWOW64\cscript.exe. The ADOX path requires 32-bit COM regardless of the host process bitness, so x64 builds are not supported.
Index ¶
- 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) DB() *sql.DB
- 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, cfg adapters.IncrementalConfig) ([]*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(_ context.Context, _ *packet.DataPacket, _ adapters.ImportStrategy) error
- func (a *Adapter) ImportPackets(_ context.Context, _ []*packet.DataPacket, _ adapters.ImportStrategy) 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, schema packet.Schema) ([][]string, error)
- func (a *Adapter) ReadRowsWithSQL(ctx context.Context, sqlQuery string, schema packet.Schema) ([][]string, error)
- func (a *Adapter) SetMaxMessageSize(size int)
- func (a *Adapter) TableExists(ctx context.Context, tableName string) (bool, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Adapter ¶
type Adapter struct {
// contains filtered or unexported fields
}
Adapter implements adapters.Adapter for Microsoft Access via ODBC. Column names arrive as UTF-8 via ODBC Unicode API (SQLDescribeColW). Cell data from old Jet 2.x databases may arrive as ANSI bytes — use charset config to convert.
func (*Adapter) Connect ¶
Connect opens an ODBC connection to an Access .mdb/.accdb file. DSN format (connection string):
Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\db.mdb;SystemDB=C:\path\to\system.mda;UID=Admin;PWD=secret;
Config.Charset: set to "windows-1251" (or other) if text data needs conversion to UTF-8.
func (*Adapter) ExecuteRawQuery ¶
ExecuteRawQuery runs an arbitrary SELECT and returns a DataPacket.
func (*Adapter) ExportTable ¶
ExportTable exports a full table.
func (*Adapter) ExportTableIncremental ¶
func (a *Adapter) ExportTableIncremental(ctx context.Context, tableName string, cfg adapters.IncrementalConfig) ([]*packet.DataPacket, string, error)
ExportTableIncremental is not implemented for Access.
func (*Adapter) ExportTableWithQuery ¶
func (a *Adapter) ExportTableWithQuery(ctx context.Context, tableName string, query *packet.Query, sender, recipient string) ([]*packet.DataPacket, error)
ExportTableWithQuery exports with TDTQL filters.
func (*Adapter) GetDatabaseType ¶
func (*Adapter) GetDatabaseVersion ¶
func (*Adapter) GetRowCount ¶
GetRowCount returns the number of rows in a table.
func (*Adapter) GetTableNames ¶
GetTableNames returns all user table names (excludes MSys* system tables).
func (*Adapter) GetTableSchema ¶
GetTableSchema reads column metadata. Column ORDER comes from ODBC (SELECT * — table definition order). Column TYPES come from ADOX via VBScript (exact Access catalog types). Fallback when ADOX unavailable: infer types from a sample row.
func (*Adapter) GetViewNames ¶
GetViewNames returns views — Access calls them queries.
func (*Adapter) ImportPacket ¶
func (a *Adapter) ImportPacket(_ context.Context, _ *packet.DataPacket, _ adapters.ImportStrategy) error
ImportPacket is not implemented for Access (read-only source).
func (*Adapter) ImportPackets ¶
func (a *Adapter) ImportPackets(_ context.Context, _ []*packet.DataPacket, _ adapters.ImportStrategy) error
ImportPackets is not implemented for Access (read-only source).
func (*Adapter) InspectTable ¶
func (a *Adapter) InspectTable(ctx context.Context, tableName string) (*adapters.TableReport, error)
InspectTable returns extended metadata for a live Access table. Implements adapters.Adapter.
Column metadata is obtained via ADOX (VBScript + cscript.exe) which provides native types, AutoNumber flag, nullable flag, and FK relationships. If ADOX is unavailable (no cscript, no Jet provider), falls back to column inference from a sample row — FK and identity info will be empty.
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, schema packet.Schema) ([][]string, error)
ReadAllRows reads all rows from a table. Uses SELECT * to avoid re-encoding column names back into SQL (ODBC Unicode mismatch).
func (*Adapter) ReadRowsWithSQL ¶
func (a *Adapter) ReadRowsWithSQL(ctx context.Context, sqlQuery string, schema packet.Schema) ([][]string, error)
ReadRowsWithSQL reads rows using an arbitrary SQL query.
func (*Adapter) SetMaxMessageSize ¶
SetMaxMessageSize задаёт максимальный размер одного TDTP пакета (в байтах). Вызывается из CLI при указании --packet-size.
Единственный setter экспорта у этого адаптера: --fast и --columnar он не поддерживает. Метод есть, чтобы --packet-size вёл себя одинаково у всех пяти адаптеров — иначе Access остался бы единственным, где флаг молча ничего не делает.