From bce3df549ff4ccc8895697a3222269bd14fc22a4 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Fri, 10 Apr 2026 14:55:26 +0200 Subject: start reflecting on types to build a query plan --- markers.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 markers.go (limited to 'markers.go') diff --git a/markers.go b/markers.go new file mode 100644 index 0000000..e62fe52 --- /dev/null +++ b/markers.go @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: 2026 Stefan Majewsky +// SPDX-License-Identifier: Apache-2.0 + +package oblast + +// seal is a private type that appears in interface definitions below, +// to ensure that only types from this package can implement these interfaces. +type seal struct{} + +// TableInfo is a marker for struct types that correspond to tables. +// Put this as an embedded field on your struct type and put the table name in the field's `db` tag. +// +// // For example, this struct type... +// type LogEntry struct { +// oblast.TableInfo `db:"log_entries"` +// oblast.PrimaryKeyInfo `db:"id"` +// ID int64 `db:"id,auto"` +// CreatedAt time.Time `db:"created_at"` +// Message string `db:"message"` +// } +// // ...corresponds to this table schema (shown here in PostgreSQL syntax): +// CREATE TABLE log_entries ( +// id BIGSERIAL NOT NULL PRIMARY KEY, +// created_at TIMESTAMPTZ NOT NULL, +// message TEXT NOT NULL +// ); +// +// This marker is required for all operations that use autogenerated SQL statements. +type TableInfo struct{} + +// isTable implements the IsTable interface. +func (TableInfo) isTable(seal) {} + +// IsTable is implemented by all types that have an embedded field of type [TableInfo]. +type IsTable interface { + isTable(seal) +} + +// PrimaryKeyInfo is a marker for struct types that correspond to tables with a primary key. +// Put this as an embedded field on your struct type and list the columns of the primary key in the field's `db` tag, +// as shown on the example for type [TableInfo]. +// +// This marker is required for all UPDATE and DELETE operations that use autogenerated SQL statements. +type PrimaryKeyInfo struct{} -- cgit v1.2.3