Documentation
¶
Overview ¶
Package genpatch owns the shared high-level generation acceptance fixture.
Index ¶
- Constants
- Variables
- func DestinationDQL(module string) string
- func ObserveHooks(t testing.TB, directory string) string
- func ObserveResolvedHooks(t testing.TB, directory string) string
- func OuterProjectionDQL(module, operation, root, child string, split bool) string
- func PreparationCostRuntime(wideOptions ...bool) string
- func PreparationWideSchema() []string
- func ResolvedCompositeRuntime() string
- func ResolvedIdentityRuntime(deep bool) string
- func Run(t testing.TB, root, directory, source string, options ...string)
- func SplitResolvedRuntime(t testing.TB, root string) string
Constants ¶
const ChildHooks = `` /* 640-byte string literal not displayed */
const CompositeDQL = PackageDirective + `
#setting($_ = $route('/orders','PATCH'))
SELECT o.*,Kinds.* FROM ORDERS o JOIN (ORDER_KINDS) Kinds ON Kinds.TENANT_ID=o.KIND_TENANT_ID AND Kinds.ID=o.KIND_ID`
const DQL = PackageDirective + `
#setting($_ = $route('/orders','PATCH'))
SELECT o.*, Items.*, Kinds.*,
tag(o.START,'invariant:"Interval"'),
tag(o.END,'invariant:"Interval" validate:"gtfield(Start)"')
FROM ORDERS o
JOIN ITEMS Items ON Items.ORDER_ID = o.ID
JOIN (ORDER_KINDS) Kinds ON Kinds.ID = o.KIND_ID`
const NamedGraphDQL = PackageDirective + `
#setting($_ = $route('/orders','PATCH'))
SELECT orders.*, items.*, kind.*
FROM (SELECT o.* FROM ORDERS o) orders
LEFT JOIN (SELECT i.* FROM ITEMS i) items ON items.ORDER_ID = orders.ID
LEFT JOIN (SELECT k.* FROM (ORDER_KINDS) k) kind ON kind.ID = orders.KIND_ID AND 1=1
`
NamedGraphDQL keeps the client-facing graph on named outer views. The inner table marker makes kind a lookup, independently of its one-cardinality join.
const OuterProjectionWriterImports = `` /* 327-byte string literal not displayed */
const OuterProjectionWriterTest = `` /* 1354-byte string literal not displayed */
const PackageDirective = `#package('api/orders')`
const RootHooks = `package roothooks
import (
"context"
"fmt"
requests "github.com/viant/datly/genfixture/requests"
responses "github.com/viant/datly/genfixture/responses"
rows "github.com/viant/datly/genfixture/entities"
h "github.com/viant/xdatly/handler"
)
type Hooks struct { Input *requests.OrdersInput ` + "`bind:\"kind=input\"`" + ` }
var HookObservedOriginal,LookupRead bool
var Calls,Completions int
const Version=1
func(hooks *Hooks)Init(_ context.Context,entity *rows.Order,state h.LifecycleContext[rows.Order,h.NoParent,responses.OrdersOutput])error{
Calls++
if hooks.Input==nil{return fmt.Errorf("authored root hook input missing")}
if entity.Has!=nil && entity.Has.KindId && entity.KindId==nil{
if len(hooks.Input.CurrentKinds)!=0{return fmt.Errorf("explicit null acquired previous lookup")}
}else{
current:=hooks.Input.CurrentKinds
if len(current)!=1||current[0].Id==nil||*current[0].Id!=7||current[0].Name==nil||*current[0].Name!="standard"{return fmt.Errorf("authored root hook lookup missing")}
LookupRead=true
}
if state.Original!=nil && state.Original.Has("Start")&&!state.Original.Has("End"){
if entity.End==nil||entity.End.IsZero(){return fmt.Errorf("invariant backfill missing")};HookObservedOriginal=true
}
return nil
}
func(*Hooks)Validate(context.Context,*rows.Order,h.LifecycleContext[rows.Order,h.NoParent,responses.OrdersOutput])error{return nil}
func(*Hooks)Finalize(_ context.Context,_ *requests.OrdersInput,_ *responses.OrdersOutput,outcome h.Outcome)error{if outcome.CommitConfirmed(){Completions++};return nil}
`
Variables ¶
var BatchRuntimeSource string
var CompositeRuntimeSource string
var CompositeSchema = []string{
"PRAGMA foreign_keys=ON",
"CREATE TABLE ORDERS(TENANT_ID INTEGER NOT NULL,ID INTEGER NOT NULL,KIND_TENANT_ID INTEGER,KIND_ID INTEGER,NAME TEXT,PRIMARY KEY(TENANT_ID,ID))",
"CREATE TABLE ORDER_KINDS(TENANT_ID INTEGER NOT NULL,ID INTEGER NOT NULL,NAME TEXT,PRIMARY KEY(TENANT_ID,ID))",
"INSERT INTO ORDERS VALUES(1,5,10,7,'a'),(2,5,20,8,'b')",
"INSERT INTO ORDER_KINDS VALUES(10,7,'a'),(10,8,'hybrid'),(20,7,'hybrid'),(20,8,'b')",
}
var DeepIdentitySchema = []string{
`CREATE TABLE DETAILS(ID INTEGER PRIMARY KEY AUTOINCREMENT,ITEM_ID INTEGER NOT NULL REFERENCES ITEMS(ID),NOTE TEXT NOT NULL)`,
`INSERT INTO ITEMS VALUES(30,1,'hidden')`,
`INSERT INTO DETAILS VALUES(100,10,'old detail'),(200,20,'old detail'),(300,10,'hidden'),(301,30,'visible under hidden child')`,
}
var LifecycleDQL = strings.Replace(DQL, "SELECT o.*, Items.*, Kinds.*,", "SELECT o.*, Items.*, Kinds.*, lifecycle_type(o,'OrderRules'), lifecycle_type(Items,'ItemRules'),", 1)
LifecycleDQL explicitly requests application hooks for the writable roles.
var NamedIdentityDQL = strings.NewReplacer( "FROM ORDERS o", "FROM (SELECT base.* FROM ORDERS base WHERE base.ID<>2) o", "JOIN ITEMS Items", "LEFT JOIN (SELECT base.* FROM ITEMS base WHERE base.NAME<>'hidden') Items", "SELECT o.*, Items.*, Kinds.*,", "SELECT o.*, Items.*, Details.*, Kinds.*, lifecycle_type(Details,'DetailRules'),", "JOIN (ORDER_KINDS) Kinds", "LEFT JOIN (SELECT d.* FROM DETAILS d WHERE d.NOTE<>'hidden') Details ON Details.ITEM_ID=Items.ID LEFT JOIN (SELECT k.* FROM (ORDER_KINDS) k WHERE k.ID=7) Kinds", ).Replace(LifecycleDQL)
NamedIdentityDQL uses only authored application shape and scope. GEN derives the body, key projections, Previous reads and FK-scoped child reads.
var NamedSplitIdentityDQL = strings.NewReplacer(PackageDirective, PackageDirective+` #import('requests','github.com/viant/datly/genfixture/requests') #import('responses','github.com/viant/datly/genfixture/responses') #import('rows','github.com/viant/datly/genfixture/entities') #import('items','github.com/viant/datly/genfixture/items') #import('details','github.com/viant/datly/genfixture/details') #setting($_ = $input_type('requests.OrdersInput')) #setting($_ = $output_type('responses.OrdersOutput')) `, "SELECT o.*, Items.*, Details.*, Kinds.*,", "SELECT o.*, Items.*, Details.*, Kinds.*,type(o,'rows.Order'),type(Items,'items.Item'),type(Details,'details.Detail'),").Replace(NamedIdentityDQL)
NamedSplitIdentityDQL keeps all request/current/key plumbing generated.
var OuterProjectionDecoys = []string{
`INSERT INTO ORDERS SELECT 2,KIND_ID,'hidden',START,END FROM ORDERS WHERE ID=1`,
`INSERT INTO ITEMS VALUES(11,1,'hidden child'),(12,2,'other parent')`,
}
var OuterProjectionRuntime string
var ResolvedCompositeDQL = strings.NewReplacer( "SELECT o.*,Kinds.*", "SELECT o.*,Items.*,Kinds.*,lifecycle_type(o,'OrderRules'),lifecycle_type(Items,'ItemRules'),CAST(Items.ID AS int),CAST(Items.TENANT_ID AS int),CAST(Items.ORDER_ID AS int)", "FROM ORDERS o", "FROM ORDERS o LEFT JOIN ITEMS Items ON Items.TENANT_ID=o.TENANT_ID AND Items.ORDER_ID=o.ID", ).Replace(CompositeDQL)
var ResolvedCompositeSchema = []string{
`CREATE TABLE ITEMS(TENANT_ID INTEGER NOT NULL,ORDER_ID INTEGER NOT NULL,ID INTEGER NOT NULL,NAME TEXT,PRIMARY KEY(TENANT_ID,ID),FOREIGN KEY(TENANT_ID,ORDER_ID) REFERENCES ORDERS(TENANT_ID,ID))`,
`INSERT INTO ITEMS VALUES(1,5,0,'old'),(2,5,0,'outside')`,
}
var ResolvedIdentitySchema = []string{
`INSERT INTO ORDERS VALUES(2,7,'outside','2026-09-01T00:00:00Z','2026-09-30T00:00:00Z')`,
`INSERT INTO ITEMS VALUES(20,2,'old')`,
}
var RuntimeSource string
var Schema = []string{
`PRAGMA foreign_keys=ON`,
`CREATE TABLE ORDERS(ID INTEGER PRIMARY KEY AUTOINCREMENT, KIND_ID INTEGER NOT NULL REFERENCES ORDER_KINDS(ID), NAME TEXT NOT NULL, START DATETIME NOT NULL, END DATETIME NOT NULL)`,
`CREATE TABLE ITEMS(ID INTEGER PRIMARY KEY AUTOINCREMENT, ORDER_ID INTEGER NOT NULL REFERENCES ORDERS(ID), NAME TEXT NOT NULL)`,
`CREATE TABLE ORDER_KINDS(ID INTEGER PRIMARY KEY, NAME TEXT NOT NULL)`,
`INSERT INTO ORDER_KINDS VALUES(7,'standard'),(1,'decoy')`,
`INSERT INTO ORDERS VALUES(1,7,'before','2026-09-01T00:00:00Z','2026-09-30T00:00:00Z')`,
`INSERT INTO ITEMS VALUES(10,1,'old')`,
`CREATE TRIGGER no_kind_insert BEFORE INSERT ON ORDER_KINDS BEGIN SELECT RAISE(ABORT,'auxiliary insert'); END`,
`CREATE TRIGGER no_kind_update BEFORE UPDATE ON ORDER_KINDS BEGIN SELECT RAISE(ABORT,'auxiliary update'); END`,
`CREATE TRIGGER no_kind_delete BEFORE DELETE ON ORDER_KINDS BEGIN SELECT RAISE(ABORT,'auxiliary delete'); END`,
}
var ValidAliasRuntime string
Functions ¶
func DestinationDQL ¶
func ObserveHooks ¶
ObserveHooks edits only the generator's create-once application hook file.
func ObserveResolvedHooks ¶
ObserveResolvedHooks authors application behavior in the existing create-once lifecycle file. Regeneration must preserve this file byte for byte.
func OuterProjectionDQL ¶
OuterProjectionDQL keeps the DB sources and their restrictions fixed while changing only the public named-view projection.
func PreparationCostRuntime ¶
PreparationCostRuntime measures the same real-reader-bound workload on the old and selected-group defaults. The diagnostic passes share native clone, read evidence, and generated typed constructor owners with normal preparation.
func PreparationWideSchema ¶
func PreparationWideSchema() []string
PreparationWideSchema adds declared business fields; both baseline and final benchmarks validate their evidence and clone their values identically.
func ResolvedCompositeRuntime ¶
func ResolvedCompositeRuntime() string
func ResolvedIdentityRuntime ¶
ResolvedIdentityRuntime reuses the shared real registration, resource, reader, transaction and HTTP fixture; only the application callbacks/cases differ.
Types ¶
This section is empty.