genpatch

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 22, 2026 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package genpatch owns the shared high-level generation acceptance fixture.

Index

Constants

View Source
const ChildHooks = `` /* 640-byte string literal not displayed */
View Source
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`
View Source
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`
View Source
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.

View Source
const OuterProjectionWriterImports = `` /* 327-byte string literal not displayed */
View Source
const OuterProjectionWriterTest = `` /* 1354-byte string literal not displayed */
View Source
const PackageDirective = `#package('api/orders')`
View Source
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

View Source
var BatchRuntimeSource string
View Source
var CompositeRuntimeSource string
View Source
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')",
}
View Source
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')`,
}
View Source
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.

View Source
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.

View Source
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.

View Source
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')`,
}
View Source
var OuterProjectionRuntime string
View Source
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)
View Source
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')`,
}
View Source
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')`,
}
View Source
var RuntimeSource string
View Source
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`,
}
View Source
var ValidAliasRuntime string

Functions

func DestinationDQL

func DestinationDQL(module string) string

func ObserveHooks

func ObserveHooks(t testing.TB, directory string) string

ObserveHooks edits only the generator's create-once application hook file.

func ObserveResolvedHooks

func ObserveResolvedHooks(t testing.TB, directory string) string

ObserveResolvedHooks authors application behavior in the existing create-once lifecycle file. Regeneration must preserve this file byte for byte.

func OuterProjectionDQL

func OuterProjectionDQL(module, operation, root, child string, split bool) string

OuterProjectionDQL keeps the DB sources and their restrictions fixed while changing only the public named-view projection.

func PreparationCostRuntime

func PreparationCostRuntime(wideOptions ...bool) string

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

func ResolvedIdentityRuntime(deep bool) string

ResolvedIdentityRuntime reuses the shared real registration, resource, reader, transaction and HTTP fixture; only the application callbacks/cases differ.

func Run

func Run(t testing.TB, root, directory, source string, options ...string)

func SplitResolvedRuntime

func SplitResolvedRuntime(t testing.TB, root string) string

SplitResolvedRuntime authors Input.Init in its real input package, leaving handler/entity destinations independent and without callback registration.

Types

This section is empty.

Jump to

Keyboard shortcuts

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