[{"data":1,"prerenderedAt":22537},["ShallowReactive",2],{"footer-resources":3,"search-sections-astql":2577,"nav-astql":21623},[4,1780,2140],{"id":5,"title":6,"body":7,"description":99,"extension":1773,"icon":1774,"meta":1775,"navigation":158,"path":1776,"seo":1777,"stem":1778,"__hash__":1779},"resources/readme.md","README",{"type":8,"value":9,"toc":1757},"minimark",[10,14,82,85,88,93,370,373,376,540,543,547,573,576,580,1184,1188,1280,1284,1321,1325,1331,1334,1359,1600,1603,1607,1616,1621,1642,1646,1677,1681,1711,1715,1729,1733,1745,1748,1753],[11,12,13],"h1",{"id":13},"astql",[15,16,17,28,36,44,52,60,67,74],"p",{},[18,19,23],"a",{"href":20,"rel":21},"https://github.com/zoobz-io/astql/actions/workflows/ci.yml",[22],"nofollow",[24,25],"img",{"alt":26,"src":27},"CI","https://github.com/zoobz-io/astql/actions/workflows/ci.yml/badge.svg",[18,29,32],{"href":30,"rel":31},"https://codecov.io/gh/zoobz-io/astql",[22],[24,33],{"alt":34,"src":35},"Coverage","https://codecov.io/gh/zoobz-io/astql/branch/main/graph/badge.svg",[18,37,40],{"href":38,"rel":39},"https://goreportcard.com/report/github.com/zoobz-io/astql",[22],[24,41],{"alt":42,"src":43},"Go Report Card","https://goreportcard.com/badge/github.com/zoobz-io/astql",[18,45,48],{"href":46,"rel":47},"https://github.com/zoobz-io/astql/actions/workflows/codeql.yml",[22],[24,49],{"alt":50,"src":51},"CodeQL","https://github.com/zoobz-io/astql/actions/workflows/codeql.yml/badge.svg",[18,53,56],{"href":54,"rel":55},"https://pkg.go.dev/github.com/zoobz-io/astql",[22],[24,57],{"alt":58,"src":59},"Go Reference","https://pkg.go.dev/badge/github.com/zoobz-io/astql.svg",[18,61,63],{"href":62},"LICENSE",[24,64],{"alt":65,"src":66},"License","https://img.shields.io/github/license/zoobz-io/astql",[18,68,70],{"href":69},"go.mod",[24,71],{"alt":72,"src":73},"Go Version","https://img.shields.io/github/go-mod/go-version/zoobz-io/astql",[18,75,78],{"href":76,"rel":77},"https://github.com/zoobz-io/astql/releases",[22],[24,79],{"alt":80,"src":81},"Release","https://img.shields.io/github/v/release/zoobz-io/astql",[15,83,84],{},"Type-safe SQL query builder with DBML schema validation.",[15,86,87],{},"Build queries as an AST, validate against your schema, render to parameterized SQL.",[89,90,92],"h2",{"id":91},"injection-safe-sql-expressions-any-dialect","Injection-safe SQL Expressions, Any Dialect",[94,95,100],"pre",{"className":96,"code":97,"language":98,"meta":99,"style":99},"language-go shiki shiki-themes","instance.T(\"users\")      // ✓ exists in schema\ninstance.T(\"uusers\")     // panic: table \"uusers\" not found\n\ninstance.F(\"email\")      // ✓ exists in schema\ninstance.F(\"emial\")      // panic: field \"emial\" not found\n\nquery := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")))\n\nresult, _ := query.Render(postgres.New())\n// SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active\n","go","",[101,102,103,134,153,160,179,198,203,235,270,325,330,364],"code",{"__ignoreMap":99},[104,105,108,112,116,120,123,127,130],"span",{"class":106,"line":107},"line",1,[104,109,111],{"class":110},"sh8_p","instance",[104,113,115],{"class":114},"sq5bi",".",[104,117,119],{"class":118},"s5klm","T",[104,121,122],{"class":114},"(",[104,124,126],{"class":125},"sxAnc","\"users\"",[104,128,129],{"class":114},")",[104,131,133],{"class":132},"sLkEo","      // ✓ exists in schema\n",[104,135,137,139,141,143,145,148,150],{"class":106,"line":136},2,[104,138,111],{"class":110},[104,140,115],{"class":114},[104,142,119],{"class":118},[104,144,122],{"class":114},[104,146,147],{"class":125},"\"uusers\"",[104,149,129],{"class":114},[104,151,152],{"class":132},"     // panic: table \"uusers\" not found\n",[104,154,156],{"class":106,"line":155},3,[104,157,159],{"emptyLinePlaceholder":158},true,"\n",[104,161,163,165,167,170,172,175,177],{"class":106,"line":162},4,[104,164,111],{"class":110},[104,166,115],{"class":114},[104,168,169],{"class":118},"F",[104,171,122],{"class":114},[104,173,174],{"class":125},"\"email\"",[104,176,129],{"class":114},[104,178,133],{"class":132},[104,180,182,184,186,188,190,193,195],{"class":106,"line":181},5,[104,183,111],{"class":110},[104,185,115],{"class":114},[104,187,169],{"class":118},[104,189,122],{"class":114},[104,191,192],{"class":125},"\"emial\"",[104,194,129],{"class":114},[104,196,197],{"class":132},"      // panic: field \"emial\" not found\n",[104,199,201],{"class":106,"line":200},6,[104,202,159],{"emptyLinePlaceholder":158},[104,204,206,209,212,215,217,220,222,224,226,228,230,232],{"class":106,"line":205},7,[104,207,208],{"class":110},"query",[104,210,211],{"class":110}," :=",[104,213,214],{"class":110}," astql",[104,216,115],{"class":114},[104,218,219],{"class":118},"Select",[104,221,122],{"class":114},[104,223,111],{"class":110},[104,225,115],{"class":114},[104,227,119],{"class":118},[104,229,122],{"class":114},[104,231,126],{"class":125},[104,233,234],{"class":114},")).\n",[104,236,238,241,243,245,247,249,251,254,257,260,262,264,266,268],{"class":106,"line":237},8,[104,239,240],{"class":118},"    Fields",[104,242,122],{"class":114},[104,244,111],{"class":110},[104,246,115],{"class":114},[104,248,169],{"class":118},[104,250,122],{"class":114},[104,252,253],{"class":125},"\"username\"",[104,255,256],{"class":114},"),",[104,258,259],{"class":110}," instance",[104,261,115],{"class":114},[104,263,169],{"class":118},[104,265,122],{"class":114},[104,267,174],{"class":125},[104,269,234],{"class":114},[104,271,273,276,278,280,282,285,287,289,291,293,295,298,300,302,304,307,310,312,314,317,319,322],{"class":106,"line":272},9,[104,274,275],{"class":118},"    Where",[104,277,122],{"class":114},[104,279,111],{"class":110},[104,281,115],{"class":114},[104,283,284],{"class":118},"C",[104,286,122],{"class":114},[104,288,111],{"class":110},[104,290,115],{"class":114},[104,292,169],{"class":118},[104,294,122],{"class":114},[104,296,297],{"class":125},"\"active\"",[104,299,256],{"class":114},[104,301,214],{"class":110},[104,303,115],{"class":114},[104,305,306],{"class":110},"EQ",[104,308,309],{"class":114},",",[104,311,259],{"class":110},[104,313,115],{"class":114},[104,315,316],{"class":118},"P",[104,318,122],{"class":114},[104,320,321],{"class":125},"\"is_active\"",[104,323,324],{"class":114},")))\n",[104,326,328],{"class":106,"line":327},10,[104,329,159],{"emptyLinePlaceholder":158},[104,331,333,336,338,341,343,346,348,351,353,356,358,361],{"class":106,"line":332},11,[104,334,335],{"class":110},"result",[104,337,309],{"class":114},[104,339,340],{"class":110}," _",[104,342,211],{"class":110},[104,344,345],{"class":110}," query",[104,347,115],{"class":114},[104,349,350],{"class":118},"Render",[104,352,122],{"class":114},[104,354,355],{"class":110},"postgres",[104,357,115],{"class":114},[104,359,360],{"class":118},"New",[104,362,363],{"class":114},"())\n",[104,365,367],{"class":106,"line":366},12,[104,368,369],{"class":132},"// SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active\n",[15,371,372],{},"Typos become compile-time failures, not runtime surprises. Values are parameterized. Identifiers are quoted. The schema is the source of truth.",[15,374,375],{},"Same query, different databases:",[94,377,379],{"className":96,"code":378,"language":98,"meta":99,"style":99},"import (\n    \"github.com/zoobz-io/astql/postgres\"\n    \"github.com/zoobz-io/astql/sqlite\"\n    \"github.com/zoobz-io/astql/mariadb\"\n    \"github.com/zoobz-io/astql/mssql\"\n)\n\nresult, _ := query.Render(postgres.New())  // \"username\", LIMIT 10\nresult, _ := query.Render(sqlite.New())    // \"username\", LIMIT 10\nresult, _ := query.Render(mariadb.New())   // `username`, LIMIT 10\nresult, _ := query.Render(mssql.New())     // [username], TOP 10\n",[101,380,381,391,396,401,406,411,416,420,450,480,510],{"__ignoreMap":99},[104,382,383,387],{"class":106,"line":107},[104,384,386],{"class":385},"sUt3r","import",[104,388,390],{"class":389},"soy-K"," (\n",[104,392,393],{"class":106,"line":136},[104,394,395],{"class":125},"    \"github.com/zoobz-io/astql/postgres\"\n",[104,397,398],{"class":106,"line":155},[104,399,400],{"class":125},"    \"github.com/zoobz-io/astql/sqlite\"\n",[104,402,403],{"class":106,"line":162},[104,404,405],{"class":125},"    \"github.com/zoobz-io/astql/mariadb\"\n",[104,407,408],{"class":106,"line":181},[104,409,410],{"class":125},"    \"github.com/zoobz-io/astql/mssql\"\n",[104,412,413],{"class":106,"line":200},[104,414,415],{"class":389},")\n",[104,417,418],{"class":106,"line":205},[104,419,159],{"emptyLinePlaceholder":158},[104,421,422,424,426,428,430,432,434,436,438,440,442,444,447],{"class":106,"line":237},[104,423,335],{"class":110},[104,425,309],{"class":114},[104,427,340],{"class":110},[104,429,211],{"class":110},[104,431,345],{"class":110},[104,433,115],{"class":114},[104,435,350],{"class":118},[104,437,122],{"class":114},[104,439,355],{"class":110},[104,441,115],{"class":114},[104,443,360],{"class":118},[104,445,446],{"class":114},"())",[104,448,449],{"class":132},"  // \"username\", LIMIT 10\n",[104,451,452,454,456,458,460,462,464,466,468,471,473,475,477],{"class":106,"line":272},[104,453,335],{"class":110},[104,455,309],{"class":114},[104,457,340],{"class":110},[104,459,211],{"class":110},[104,461,345],{"class":110},[104,463,115],{"class":114},[104,465,350],{"class":118},[104,467,122],{"class":114},[104,469,470],{"class":110},"sqlite",[104,472,115],{"class":114},[104,474,360],{"class":118},[104,476,446],{"class":114},[104,478,479],{"class":132},"    // \"username\", LIMIT 10\n",[104,481,482,484,486,488,490,492,494,496,498,501,503,505,507],{"class":106,"line":327},[104,483,335],{"class":110},[104,485,309],{"class":114},[104,487,340],{"class":110},[104,489,211],{"class":110},[104,491,345],{"class":110},[104,493,115],{"class":114},[104,495,350],{"class":118},[104,497,122],{"class":114},[104,499,500],{"class":110},"mariadb",[104,502,115],{"class":114},[104,504,360],{"class":118},[104,506,446],{"class":114},[104,508,509],{"class":132},"   // `username`, LIMIT 10\n",[104,511,512,514,516,518,520,522,524,526,528,531,533,535,537],{"class":106,"line":332},[104,513,335],{"class":110},[104,515,309],{"class":114},[104,517,340],{"class":110},[104,519,211],{"class":110},[104,521,345],{"class":110},[104,523,115],{"class":114},[104,525,350],{"class":118},[104,527,122],{"class":114},[104,529,530],{"class":110},"mssql",[104,532,115],{"class":114},[104,534,360],{"class":118},[104,536,446],{"class":114},[104,538,539],{"class":132},"     // [username], TOP 10\n",[15,541,542],{},"One AST. Four dialects. Each renderer handles identifier quoting, pagination syntax, vendor-specific operators.",[89,544,546],{"id":545},"install","Install",[94,548,552],{"className":549,"code":550,"language":551,"meta":99,"style":99},"language-bash shiki shiki-themes","go get github.com/zoobz-io/astql\ngo get github.com/zoobz-io/dbml\n","bash",[101,553,554,564],{"__ignoreMap":99},[104,555,556,558,561],{"class":106,"line":107},[104,557,98],{"class":118},[104,559,560],{"class":125}," get",[104,562,563],{"class":125}," github.com/zoobz-io/astql\n",[104,565,566,568,570],{"class":106,"line":136},[104,567,98],{"class":118},[104,569,560],{"class":125},[104,571,572],{"class":125}," github.com/zoobz-io/dbml\n",[15,574,575],{},"Requires Go 1.24+.",[89,577,579],{"id":578},"quick-start","Quick Start",[94,581,583],{"className":96,"code":582,"language":98,"meta":99,"style":99},"package main\n\nimport (\n    \"fmt\"\n    \"github.com/zoobz-io/astql\"\n    \"github.com/zoobz-io/astql/postgres\"\n    \"github.com/zoobz-io/dbml\"\n)\n\nfunc main() {\n    // Define schema\n    project := dbml.NewProject(\"myapp\")\n    users := dbml.NewTable(\"users\")\n    users.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\n    users.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"active\", \"boolean\"))\n    project.AddTable(users)\n\n    // Create instance\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n\n    // Build and render\n    result, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"username\"), instance.F(\"email\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        OrderBy(instance.F(\"username\"), astql.ASC).\n        Limit(10).\n        Render(postgres.New())\n\n    if err != nil {\n        panic(err)\n    }\n\n    fmt.Println(result.SQL)\n    // SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active ORDER BY \"username\" ASC LIMIT 10\n    fmt.Println(result.RequiredParams)\n    // [is_active]\n}\n",[101,584,585,594,598,604,609,614,618,623,627,631,645,650,672,693,726,754,781,809,826,831,837,864,881,895,901,906,912,944,976,1025,1055,1069,1085,1090,1103,1114,1119,1124,1146,1152,1172,1178],{"__ignoreMap":99},[104,586,587,590],{"class":106,"line":107},[104,588,589],{"class":385},"package",[104,591,593],{"class":592},"sYBwO"," main\n",[104,595,596],{"class":106,"line":136},[104,597,159],{"emptyLinePlaceholder":158},[104,599,600,602],{"class":106,"line":155},[104,601,386],{"class":385},[104,603,390],{"class":389},[104,605,606],{"class":106,"line":162},[104,607,608],{"class":125},"    \"fmt\"\n",[104,610,611],{"class":106,"line":181},[104,612,613],{"class":125},"    \"github.com/zoobz-io/astql\"\n",[104,615,616],{"class":106,"line":200},[104,617,395],{"class":125},[104,619,620],{"class":106,"line":205},[104,621,622],{"class":125},"    \"github.com/zoobz-io/dbml\"\n",[104,624,625],{"class":106,"line":237},[104,626,415],{"class":389},[104,628,629],{"class":106,"line":272},[104,630,159],{"emptyLinePlaceholder":158},[104,632,633,636,639,642],{"class":106,"line":327},[104,634,635],{"class":385},"func",[104,637,638],{"class":118}," main",[104,640,641],{"class":114},"()",[104,643,644],{"class":114}," {\n",[104,646,647],{"class":106,"line":332},[104,648,649],{"class":132},"    // Define schema\n",[104,651,652,655,657,660,662,665,667,670],{"class":106,"line":366},[104,653,654],{"class":110},"    project",[104,656,211],{"class":110},[104,658,659],{"class":110}," dbml",[104,661,115],{"class":114},[104,663,664],{"class":118},"NewProject",[104,666,122],{"class":114},[104,668,669],{"class":125},"\"myapp\"",[104,671,415],{"class":114},[104,673,675,678,680,682,684,687,689,691],{"class":106,"line":674},13,[104,676,677],{"class":110},"    users",[104,679,211],{"class":110},[104,681,659],{"class":110},[104,683,115],{"class":114},[104,685,686],{"class":118},"NewTable",[104,688,122],{"class":114},[104,690,126],{"class":125},[104,692,415],{"class":114},[104,694,696,698,700,703,705,708,710,713,715,718,720,723],{"class":106,"line":695},14,[104,697,677],{"class":110},[104,699,115],{"class":114},[104,701,702],{"class":118},"AddColumn",[104,704,122],{"class":114},[104,706,707],{"class":110},"dbml",[104,709,115],{"class":114},[104,711,712],{"class":118},"NewColumn",[104,714,122],{"class":114},[104,716,717],{"class":125},"\"id\"",[104,719,309],{"class":114},[104,721,722],{"class":125}," \"bigint\"",[104,724,725],{"class":114},"))\n",[104,727,729,731,733,735,737,739,741,743,745,747,749,752],{"class":106,"line":728},15,[104,730,677],{"class":110},[104,732,115],{"class":114},[104,734,702],{"class":118},[104,736,122],{"class":114},[104,738,707],{"class":110},[104,740,115],{"class":114},[104,742,712],{"class":118},[104,744,122],{"class":114},[104,746,253],{"class":125},[104,748,309],{"class":114},[104,750,751],{"class":125}," \"varchar\"",[104,753,725],{"class":114},[104,755,757,759,761,763,765,767,769,771,773,775,777,779],{"class":106,"line":756},16,[104,758,677],{"class":110},[104,760,115],{"class":114},[104,762,702],{"class":118},[104,764,122],{"class":114},[104,766,707],{"class":110},[104,768,115],{"class":114},[104,770,712],{"class":118},[104,772,122],{"class":114},[104,774,174],{"class":125},[104,776,309],{"class":114},[104,778,751],{"class":125},[104,780,725],{"class":114},[104,782,784,786,788,790,792,794,796,798,800,802,804,807],{"class":106,"line":783},17,[104,785,677],{"class":110},[104,787,115],{"class":114},[104,789,702],{"class":118},[104,791,122],{"class":114},[104,793,707],{"class":110},[104,795,115],{"class":114},[104,797,712],{"class":118},[104,799,122],{"class":114},[104,801,297],{"class":125},[104,803,309],{"class":114},[104,805,806],{"class":125}," \"boolean\"",[104,808,725],{"class":114},[104,810,812,814,816,819,821,824],{"class":106,"line":811},18,[104,813,654],{"class":110},[104,815,115],{"class":114},[104,817,818],{"class":118},"AddTable",[104,820,122],{"class":114},[104,822,823],{"class":110},"users",[104,825,415],{"class":114},[104,827,829],{"class":106,"line":828},19,[104,830,159],{"emptyLinePlaceholder":158},[104,832,834],{"class":106,"line":833},20,[104,835,836],{"class":132},"    // Create instance\n",[104,838,840,843,845,848,850,852,854,857,859,862],{"class":106,"line":839},21,[104,841,842],{"class":110},"    instance",[104,844,309],{"class":114},[104,846,847],{"class":110}," err",[104,849,211],{"class":110},[104,851,214],{"class":110},[104,853,115],{"class":114},[104,855,856],{"class":118},"NewFromDBML",[104,858,122],{"class":114},[104,860,861],{"class":110},"project",[104,863,415],{"class":114},[104,865,867,871,873,876,879],{"class":106,"line":866},22,[104,868,870],{"class":869},"sW3Qg","    if",[104,872,847],{"class":110},[104,874,875],{"class":869}," !=",[104,877,878],{"class":385}," nil",[104,880,644],{"class":114},[104,882,884,888,890,893],{"class":106,"line":883},23,[104,885,887],{"class":886},"skxcq","        panic",[104,889,122],{"class":114},[104,891,892],{"class":110},"err",[104,894,415],{"class":114},[104,896,898],{"class":106,"line":897},24,[104,899,900],{"class":114},"    }\n",[104,902,904],{"class":106,"line":903},25,[104,905,159],{"emptyLinePlaceholder":158},[104,907,909],{"class":106,"line":908},26,[104,910,911],{"class":132},"    // Build and render\n",[104,913,915,918,920,922,924,926,928,930,932,934,936,938,940,942],{"class":106,"line":914},27,[104,916,917],{"class":110},"    result",[104,919,309],{"class":114},[104,921,847],{"class":110},[104,923,211],{"class":110},[104,925,214],{"class":110},[104,927,115],{"class":114},[104,929,219],{"class":118},[104,931,122],{"class":114},[104,933,111],{"class":110},[104,935,115],{"class":114},[104,937,119],{"class":118},[104,939,122],{"class":114},[104,941,126],{"class":125},[104,943,234],{"class":114},[104,945,947,950,952,954,956,958,960,962,964,966,968,970,972,974],{"class":106,"line":946},28,[104,948,949],{"class":118},"        Fields",[104,951,122],{"class":114},[104,953,111],{"class":110},[104,955,115],{"class":114},[104,957,169],{"class":118},[104,959,122],{"class":114},[104,961,253],{"class":125},[104,963,256],{"class":114},[104,965,259],{"class":110},[104,967,115],{"class":114},[104,969,169],{"class":118},[104,971,122],{"class":114},[104,973,174],{"class":125},[104,975,234],{"class":114},[104,977,979,982,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022],{"class":106,"line":978},29,[104,980,981],{"class":118},"        Where",[104,983,122],{"class":114},[104,985,111],{"class":110},[104,987,115],{"class":114},[104,989,284],{"class":118},[104,991,122],{"class":114},[104,993,111],{"class":110},[104,995,115],{"class":114},[104,997,169],{"class":118},[104,999,122],{"class":114},[104,1001,297],{"class":125},[104,1003,256],{"class":114},[104,1005,214],{"class":110},[104,1007,115],{"class":114},[104,1009,306],{"class":110},[104,1011,309],{"class":114},[104,1013,259],{"class":110},[104,1015,115],{"class":114},[104,1017,316],{"class":118},[104,1019,122],{"class":114},[104,1021,321],{"class":125},[104,1023,1024],{"class":114},"))).\n",[104,1026,1028,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1052],{"class":106,"line":1027},30,[104,1029,1030],{"class":118},"        OrderBy",[104,1032,122],{"class":114},[104,1034,111],{"class":110},[104,1036,115],{"class":114},[104,1038,169],{"class":118},[104,1040,122],{"class":114},[104,1042,253],{"class":125},[104,1044,256],{"class":114},[104,1046,214],{"class":110},[104,1048,115],{"class":114},[104,1050,1051],{"class":110},"ASC",[104,1053,1054],{"class":114},").\n",[104,1056,1058,1061,1063,1067],{"class":106,"line":1057},31,[104,1059,1060],{"class":118},"        Limit",[104,1062,122],{"class":114},[104,1064,1066],{"class":1065},"sMAmT","10",[104,1068,1054],{"class":114},[104,1070,1072,1075,1077,1079,1081,1083],{"class":106,"line":1071},32,[104,1073,1074],{"class":118},"        Render",[104,1076,122],{"class":114},[104,1078,355],{"class":110},[104,1080,115],{"class":114},[104,1082,360],{"class":118},[104,1084,363],{"class":114},[104,1086,1088],{"class":106,"line":1087},33,[104,1089,159],{"emptyLinePlaceholder":158},[104,1091,1093,1095,1097,1099,1101],{"class":106,"line":1092},34,[104,1094,870],{"class":869},[104,1096,847],{"class":110},[104,1098,875],{"class":869},[104,1100,878],{"class":385},[104,1102,644],{"class":114},[104,1104,1106,1108,1110,1112],{"class":106,"line":1105},35,[104,1107,887],{"class":886},[104,1109,122],{"class":114},[104,1111,892],{"class":110},[104,1113,415],{"class":114},[104,1115,1117],{"class":106,"line":1116},36,[104,1118,900],{"class":114},[104,1120,1122],{"class":106,"line":1121},37,[104,1123,159],{"emptyLinePlaceholder":158},[104,1125,1127,1130,1132,1135,1137,1139,1141,1144],{"class":106,"line":1126},38,[104,1128,1129],{"class":110},"    fmt",[104,1131,115],{"class":114},[104,1133,1134],{"class":118},"Println",[104,1136,122],{"class":114},[104,1138,335],{"class":110},[104,1140,115],{"class":114},[104,1142,1143],{"class":110},"SQL",[104,1145,415],{"class":114},[104,1147,1149],{"class":106,"line":1148},39,[104,1150,1151],{"class":132},"    // SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active ORDER BY \"username\" ASC LIMIT 10\n",[104,1153,1155,1157,1159,1161,1163,1165,1167,1170],{"class":106,"line":1154},40,[104,1156,1129],{"class":110},[104,1158,115],{"class":114},[104,1160,1134],{"class":118},[104,1162,122],{"class":114},[104,1164,335],{"class":110},[104,1166,115],{"class":114},[104,1168,1169],{"class":110},"RequiredParams",[104,1171,415],{"class":114},[104,1173,1175],{"class":106,"line":1174},41,[104,1176,1177],{"class":132},"    // [is_active]\n",[104,1179,1181],{"class":106,"line":1180},42,[104,1182,1183],{"class":114},"}\n",[89,1185,1187],{"id":1186},"capabilities","Capabilities",[1189,1190,1191,1207],"table",{},[1192,1193,1194],"thead",{},[1195,1196,1197,1201,1204],"tr",{},[1198,1199,1200],"th",{},"Feature",[1198,1202,1203],{},"Description",[1198,1205,1206],{},"Docs",[1208,1209,1210,1224,1238,1252,1266],"tbody",{},[1195,1211,1212,1216,1219],{},[1213,1214,1215],"td",{},"Schema Validation",[1213,1217,1218],{},"Tables and fields checked against DBML at build time",[1213,1220,1221],{},[18,1222,1215],{"href":1223},"docs/guides/schema-validation",[1195,1225,1226,1229,1232],{},[1213,1227,1228],{},"Multi-Dialect",[1213,1230,1231],{},"PostgreSQL, SQLite, MariaDB, MSSQL from one AST",[1213,1233,1234],{},[18,1235,1237],{"href":1236},"docs/learn/architecture","Architecture",[1195,1239,1240,1243,1246],{},[1213,1241,1242],{},"Parameterized Values",[1213,1244,1245],{},"Injection-resistant queries with named parameters",[1213,1247,1248],{},[18,1249,1251],{"href":1250},"docs/guides/conditions","Conditions",[1195,1253,1254,1257,1260],{},[1213,1255,1256],{},"Composable Queries",[1213,1258,1259],{},"Subqueries, JOINs, aggregates, window functions",[1213,1261,1262],{},[18,1263,1265],{"href":1264},"docs/guides/joins","Joins",[1195,1267,1268,1271,1274],{},[1213,1269,1270],{},"CASE Expressions",[1213,1272,1273],{},"Conditional logic within queries",[1213,1275,1276],{},[18,1277,1279],{"href":1278},"docs/reference/api","API",[89,1281,1283],{"id":1282},"why-astql","Why ASTQL?",[1285,1286,1287,1303,1309,1315],"ul",{},[1288,1289,1290,1294,1295,1298,1299,1302],"li",{},[1291,1292,1293],"strong",{},"Schema-validated"," — ",[101,1296,1297],{},"T(\"users\")"," and ",[101,1300,1301],{},"F(\"email\")"," checked against DBML at build time",[1288,1304,1305,1308],{},[1291,1306,1307],{},"Injection-resistant"," — parameterized values, quoted identifiers, no string concatenation",[1288,1310,1311,1314],{},[1291,1312,1313],{},"Multi-dialect"," — one query, four databases",[1288,1316,1317,1320],{},[1291,1318,1319],{},"Composable"," — subqueries, JOINs, aggregates, window functions, CASE expressions",[89,1322,1324],{"id":1323},"schema-first-data-access","Schema-First Data Access",[15,1326,1327,1328,115],{},"ASTQL enables a pattern: ",[1291,1329,1330],{},"define schema once in DBML, generate everything else",[15,1332,1333],{},"Your DBML becomes the single source of truth. Downstream tools consume the schema to build:",[1285,1335,1336,1347,1353],{},[1288,1337,1338,1341,1342],{},[1291,1339,1340],{},"Type-safe repositories"," — generated data access layers with ",[18,1343,1346],{"href":1344,"rel":1345},"https://github.com/zoobz-io/cereal",[22],"cereal",[1288,1348,1349,1352],{},[1291,1350,1351],{},"Query builders"," — domain-specific methods that can't reference invalid columns",[1288,1354,1355,1358],{},[1291,1356,1357],{},"Multi-database applications"," — same business logic, swappable storage backends",[94,1360,1362],{"className":96,"code":1361,"language":98,"meta":99,"style":99},"// Schema defines what's valid\nproject := dbml.ParseFile(\"schema.dbml\")\ninstance, _ := astql.NewFromDBML(project)\n\n// Queries are structurally correct by construction\nusers := instance.T(\"users\")\nquery := astql.Select(users).\n    Fields(instance.F(\"id\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"active\")))\n\n// Render to any supported database\nsql, _ := query.Render(postgres.New())  // production\nsql, _ := query.Render(sqlite.New())    // testing\n",[101,1363,1364,1369,1389,1411,1415,1420,1438,1456,1486,1532,1536,1541,1571],{"__ignoreMap":99},[104,1365,1366],{"class":106,"line":107},[104,1367,1368],{"class":132},"// Schema defines what's valid\n",[104,1370,1371,1373,1375,1377,1379,1382,1384,1387],{"class":106,"line":136},[104,1372,861],{"class":110},[104,1374,211],{"class":110},[104,1376,659],{"class":110},[104,1378,115],{"class":114},[104,1380,1381],{"class":118},"ParseFile",[104,1383,122],{"class":114},[104,1385,1386],{"class":125},"\"schema.dbml\"",[104,1388,415],{"class":114},[104,1390,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409],{"class":106,"line":155},[104,1392,111],{"class":110},[104,1394,309],{"class":114},[104,1396,340],{"class":110},[104,1398,211],{"class":110},[104,1400,214],{"class":110},[104,1402,115],{"class":114},[104,1404,856],{"class":118},[104,1406,122],{"class":114},[104,1408,861],{"class":110},[104,1410,415],{"class":114},[104,1412,1413],{"class":106,"line":162},[104,1414,159],{"emptyLinePlaceholder":158},[104,1416,1417],{"class":106,"line":181},[104,1418,1419],{"class":132},"// Queries are structurally correct by construction\n",[104,1421,1422,1424,1426,1428,1430,1432,1434,1436],{"class":106,"line":200},[104,1423,823],{"class":110},[104,1425,211],{"class":110},[104,1427,259],{"class":110},[104,1429,115],{"class":114},[104,1431,119],{"class":118},[104,1433,122],{"class":114},[104,1435,126],{"class":125},[104,1437,415],{"class":114},[104,1439,1440,1442,1444,1446,1448,1450,1452,1454],{"class":106,"line":205},[104,1441,208],{"class":110},[104,1443,211],{"class":110},[104,1445,214],{"class":110},[104,1447,115],{"class":114},[104,1449,219],{"class":118},[104,1451,122],{"class":114},[104,1453,823],{"class":110},[104,1455,1054],{"class":114},[104,1457,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484],{"class":106,"line":237},[104,1459,240],{"class":118},[104,1461,122],{"class":114},[104,1463,111],{"class":110},[104,1465,115],{"class":114},[104,1467,169],{"class":118},[104,1469,122],{"class":114},[104,1471,717],{"class":125},[104,1473,256],{"class":114},[104,1475,259],{"class":110},[104,1477,115],{"class":114},[104,1479,169],{"class":118},[104,1481,122],{"class":114},[104,1483,174],{"class":125},[104,1485,234],{"class":114},[104,1487,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530],{"class":106,"line":272},[104,1489,275],{"class":118},[104,1491,122],{"class":114},[104,1493,111],{"class":110},[104,1495,115],{"class":114},[104,1497,284],{"class":118},[104,1499,122],{"class":114},[104,1501,111],{"class":110},[104,1503,115],{"class":114},[104,1505,169],{"class":118},[104,1507,122],{"class":114},[104,1509,297],{"class":125},[104,1511,256],{"class":114},[104,1513,214],{"class":110},[104,1515,115],{"class":114},[104,1517,306],{"class":110},[104,1519,309],{"class":114},[104,1521,259],{"class":110},[104,1523,115],{"class":114},[104,1525,316],{"class":118},[104,1527,122],{"class":114},[104,1529,297],{"class":125},[104,1531,324],{"class":114},[104,1533,1534],{"class":106,"line":327},[104,1535,159],{"emptyLinePlaceholder":158},[104,1537,1538],{"class":106,"line":332},[104,1539,1540],{"class":132},"// Render to any supported database\n",[104,1542,1543,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568],{"class":106,"line":366},[104,1544,1545],{"class":110},"sql",[104,1547,309],{"class":114},[104,1549,340],{"class":110},[104,1551,211],{"class":110},[104,1553,345],{"class":110},[104,1555,115],{"class":114},[104,1557,350],{"class":118},[104,1559,122],{"class":114},[104,1561,355],{"class":110},[104,1563,115],{"class":114},[104,1565,360],{"class":118},[104,1567,446],{"class":114},[104,1569,1570],{"class":132},"  // production\n",[104,1572,1573,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597],{"class":106,"line":674},[104,1574,1545],{"class":110},[104,1576,309],{"class":114},[104,1578,340],{"class":110},[104,1580,211],{"class":110},[104,1582,345],{"class":110},[104,1584,115],{"class":114},[104,1586,350],{"class":118},[104,1588,122],{"class":114},[104,1590,470],{"class":110},[104,1592,115],{"class":114},[104,1594,360],{"class":118},[104,1596,446],{"class":114},[104,1598,1599],{"class":132},"    // testing\n",[15,1601,1602],{},"The schema guards the boundary. Queries inside the boundary are safe by construction.",[89,1604,1606],{"id":1605},"documentation","Documentation",[1285,1608,1609],{},[1288,1610,1611,1615],{},[18,1612,1614],{"href":1613},"docs/overview","Overview"," — what astql does and why",[1617,1618,1620],"h3",{"id":1619},"learn","Learn",[1285,1622,1623,1630,1637],{},[1288,1624,1625,1629],{},[18,1626,1628],{"href":1627},"docs/learn/quickstart","Quickstart"," — get started in minutes",[1288,1631,1632,1636],{},[18,1633,1635],{"href":1634},"docs/learn/concepts","Concepts"," — tables, fields, params, conditions, builders",[1288,1638,1639,1641],{},[18,1640,1237],{"href":1236}," — AST structure, render pipeline, security layers",[1617,1643,1645],{"id":1644},"guides","Guides",[1285,1647,1648,1653,1658,1663,1670],{},[1288,1649,1650,1652],{},[18,1651,1215],{"href":1223}," — DBML integration and validation",[1288,1654,1655,1657],{},[18,1656,1251],{"href":1250}," — WHERE, AND/OR, subqueries, BETWEEN",[1288,1659,1660,1662],{},[18,1661,1265],{"href":1264}," — INNER, LEFT, RIGHT, CROSS joins",[1288,1664,1665,1669],{},[18,1666,1668],{"href":1667},"docs/guides/aggregates","Aggregates"," — GROUP BY, HAVING, window functions",[1288,1671,1672,1676],{},[18,1673,1675],{"href":1674},"docs/guides/testing","Testing"," — testing patterns for query builders",[1617,1678,1680],{"id":1679},"cookbook","Cookbook",[1285,1682,1683,1690,1697,1704],{},[1288,1684,1685,1689],{},[18,1686,1688],{"href":1687},"docs/cookbook/pagination","Pagination"," — LIMIT/OFFSET and cursor patterns",[1288,1691,1692,1696],{},[18,1693,1695],{"href":1694},"docs/cookbook/vector-search","Vector Search"," — pgvector similarity queries",[1288,1698,1699,1703],{},[18,1700,1702],{"href":1701},"docs/cookbook/upserts","Upserts"," — ON CONFLICT patterns",[1288,1705,1706,1710],{},[18,1707,1709],{"href":1708},"docs/cookbook/orm-foundation","ORM Foundation"," — building type-safe ORMs with cereal",[1617,1712,1714],{"id":1713},"reference","Reference",[1285,1716,1717,1722],{},[1288,1718,1719,1721],{},[18,1720,1279],{"href":1278}," — complete function documentation",[1288,1723,1724,1728],{},[18,1725,1727],{"href":1726},"docs/reference/operators","Operators"," — all comparison and special operators",[89,1730,1732],{"id":1731},"contributing","Contributing",[15,1734,1735,1736,1740,1741,115],{},"See ",[18,1737,1739],{"href":1738},"CONTRIBUTING","CONTRIBUTING.md"," for guidelines. For security issues, see ",[18,1742,1744],{"href":1743},"SECURITY","SECURITY.md",[89,1746,65],{"id":1747},"license",[15,1749,1750,1751,115],{},"MIT — see ",[18,1752,62],{"href":62},[1754,1755,1756],"style",{},"html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"title":99,"searchDepth":136,"depth":136,"links":1758},[1759,1760,1761,1762,1763,1764,1765,1771,1772],{"id":91,"depth":136,"text":92},{"id":545,"depth":136,"text":546},{"id":578,"depth":136,"text":579},{"id":1186,"depth":136,"text":1187},{"id":1282,"depth":136,"text":1283},{"id":1323,"depth":136,"text":1324},{"id":1605,"depth":136,"text":1606,"children":1766},[1767,1768,1769,1770],{"id":1619,"depth":155,"text":1620},{"id":1644,"depth":155,"text":1645},{"id":1679,"depth":155,"text":1680},{"id":1713,"depth":155,"text":1714},{"id":1731,"depth":136,"text":1732},{"id":1747,"depth":136,"text":65},"md","book-open",{},"/readme",{"title":6,"description":99},"readme","JF78KqBaSGCrUUmxTFbtc1Mc9rf1ECjPKr97gsO7biE",{"id":1781,"title":1782,"body":1783,"description":99,"extension":1773,"icon":2134,"meta":2135,"navigation":158,"path":2136,"seo":2137,"stem":2138,"__hash__":2139},"resources/security.md","Security",{"type":8,"value":1784,"toc":2122},[1785,1789,1793,1796,1835,1839,1842,1846,1851,1854,1893,1897,1900,1949,1953,1956,1982,1986,2018,2022,2025,2067,2071,2074,2112,2116,2119],[11,1786,1788],{"id":1787},"security-policy","Security Policy",[89,1790,1792],{"id":1791},"supported-versions","Supported Versions",[15,1794,1795],{},"We release patches for security vulnerabilities. Which versions are eligible for receiving such patches depends on the CVSS v3.0 Rating:",[1189,1797,1798,1811],{},[1192,1799,1800],{},[1195,1801,1802,1805,1808],{},[1198,1803,1804],{},"Version",[1198,1806,1807],{},"Supported",[1198,1809,1810],{},"Status",[1208,1812,1813,1824],{},[1195,1814,1815,1818,1821],{},[1213,1816,1817],{},"latest",[1213,1819,1820],{},"✅",[1213,1822,1823],{},"Active development",[1195,1825,1826,1829,1832],{},[1213,1827,1828],{},"\u003C latest",[1213,1830,1831],{},"❌",[1213,1833,1834],{},"Security fixes only for critical issues",[89,1836,1838],{"id":1837},"reporting-a-vulnerability","Reporting a Vulnerability",[15,1840,1841],{},"We take the security of ASTQL seriously. If you have discovered a security vulnerability in this project, please report it responsibly.",[1617,1843,1845],{"id":1844},"how-to-report","How to Report",[15,1847,1848],{},[1291,1849,1850],{},"Please DO NOT report security vulnerabilities through public GitHub issues.",[15,1852,1853],{},"Instead, please report them via one of the following methods:",[1855,1856,1857,1880],"ol",{},[1288,1858,1859,1862,1863],{},[1291,1860,1861],{},"GitHub Security Advisories"," (Preferred)",[1285,1864,1865,1874,1877],{},[1288,1866,1867,1868,1873],{},"Go to the ",[18,1869,1872],{"href":1870,"rel":1871},"https://github.com/zoobzio/astql/security",[22],"Security tab"," of this repository",[1288,1875,1876],{},"Click \"Report a vulnerability\"",[1288,1878,1879],{},"Fill out the form with details about the vulnerability",[1288,1881,1882,1885],{},[1291,1883,1884],{},"Email",[1285,1886,1887,1890],{},[1288,1888,1889],{},"Send details to the repository maintainer through GitHub profile contact information",[1288,1891,1892],{},"Use PGP encryption if possible for sensitive details",[1617,1894,1896],{"id":1895},"what-to-include","What to Include",[15,1898,1899],{},"Please include the following information (as much as you can provide) to help us better understand the nature and scope of the possible issue:",[1285,1901,1902,1908,1914,1920,1926,1931,1937,1943],{},[1288,1903,1904,1907],{},[1291,1905,1906],{},"Type of issue"," (e.g., SQL injection, query manipulation, parameter injection, etc.)",[1288,1909,1910,1913],{},[1291,1911,1912],{},"Full paths of source file(s)"," related to the manifestation of the issue",[1288,1915,1916,1919],{},[1291,1917,1918],{},"The location of the affected source code"," (tag/branch/commit or direct URL)",[1288,1921,1922,1925],{},[1291,1923,1924],{},"Any special configuration required"," to reproduce the issue",[1288,1927,1928,1925],{},[1291,1929,1930],{},"Step-by-step instructions",[1288,1932,1933,1936],{},[1291,1934,1935],{},"Proof-of-concept or exploit code"," (if possible)",[1288,1938,1939,1942],{},[1291,1940,1941],{},"Impact of the issue",", including how an attacker might exploit the issue",[1288,1944,1945,1948],{},[1291,1946,1947],{},"Your name and affiliation"," (optional)",[1617,1950,1952],{"id":1951},"security-considerations-for-astql","Security Considerations for ASTQL",[15,1954,1955],{},"Given that ASTQL is a SQL query builder, please pay special attention to:",[1285,1957,1958,1964,1970,1976],{},[1288,1959,1960,1963],{},[1291,1961,1962],{},"SQL Injection vulnerabilities"," - Any way to bypass parameterization",[1288,1965,1966,1969],{},[1291,1967,1968],{},"Parameter validation issues"," - Improper sanitization of parameter names",[1288,1971,1972,1975],{},[1291,1973,1974],{},"Field/Table validation bypasses"," - Ways to inject arbitrary SQL through field or table names",[1288,1977,1978,1981],{},[1291,1979,1980],{},"Schema validation vulnerabilities"," - Issues with DBML schema parsing",[1617,1983,1985],{"id":1984},"what-to-expect","What to Expect",[1285,1987,1988,1994,2000,2006,2012],{},[1288,1989,1990,1993],{},[1291,1991,1992],{},"Acknowledgment",": We will acknowledge receipt of your vulnerability report within 48 hours",[1288,1995,1996,1999],{},[1291,1997,1998],{},"Initial Assessment",": Within 7 days, we will provide an initial assessment of the report",[1288,2001,2002,2005],{},[1291,2003,2004],{},"Resolution Timeline",": We aim to resolve critical issues within 30 days",[1288,2007,2008,2011],{},[1291,2009,2010],{},"Disclosure",": We will coordinate with you on the disclosure timeline",[1288,2013,2014,2017],{},[1291,2015,2016],{},"Credit",": Security researchers who responsibly disclose vulnerabilities will be acknowledged (unless they prefer to remain anonymous)",[89,2019,2021],{"id":2020},"security-best-practices-for-users","Security Best Practices for Users",[15,2023,2024],{},"When using ASTQL in your applications:",[1855,2026,2027,2033,2043,2049,2055,2061],{},[1288,2028,2029,2032],{},[1291,2030,2031],{},"Always use parameterized queries"," - Never concatenate user input directly",[1288,2034,2035,2038,2039,2042],{},[1291,2036,2037],{},"Validate all input"," - Use the ",[101,2040,2041],{},"Try*"," functions for user-provided data",[1288,2044,2045,2048],{},[1291,2046,2047],{},"Keep dependencies updated"," - Regularly update ASTQL and its dependencies",[1288,2050,2051,2054],{},[1291,2052,2053],{},"Review generated SQL"," - In development, log and review the generated SQL queries",[1288,2056,2057,2060],{},[1291,2058,2059],{},"Use least privilege"," - Database connections should have minimal required permissions",[1288,2062,2063,2066],{},[1291,2064,2065],{},"Validate schema inputs"," - When loading DBML schemas, ensure they come from trusted sources",[89,2068,2070],{"id":2069},"security-features","Security Features",[15,2072,2073],{},"ASTQL includes several security features:",[1285,2075,2076,2082,2088,2094,2100,2106],{},[1288,2077,2078,2081],{},[1291,2079,2080],{},"Automatic parameterization"," - All values are parameterized by default",[1288,2083,2084,2087],{},[1291,2085,2086],{},"Schema validation"," - All tables and fields must exist in DBML schema",[1288,2089,2090,2093],{},[1291,2091,2092],{},"Input validation"," - Field, table, and parameter names are validated",[1288,2095,2096,2099],{},[1291,2097,2098],{},"SQL keyword blocking"," - Parameter names cannot be SQL keywords",[1288,2101,2102,2105],{},[1291,2103,2104],{},"Injection prevention"," - Special characters in identifiers are escaped",[1288,2107,2108,2111],{},[1291,2109,2110],{},"Type safety"," - Go's type system prevents many common mistakes",[89,2113,2115],{"id":2114},"contact","Contact",[15,2117,2118],{},"For security-related questions that are not vulnerabilities, please open a discussion in the repository.",[15,2120,2121],{},"Thank you for helping keep ASTQL and its users safe!",{"title":99,"searchDepth":136,"depth":136,"links":2123},[2124,2125,2131,2132,2133],{"id":1791,"depth":136,"text":1792},{"id":1837,"depth":136,"text":1838,"children":2126},[2127,2128,2129,2130],{"id":1844,"depth":155,"text":1845},{"id":1895,"depth":155,"text":1896},{"id":1951,"depth":155,"text":1952},{"id":1984,"depth":155,"text":1985},{"id":2020,"depth":136,"text":2021},{"id":2069,"depth":136,"text":2070},{"id":2114,"depth":136,"text":2115},"shield",{},"/security",{"title":1782,"description":99},"security","og9oRM2SR7q66Fr0fAvRbTS8WwhkBW1WKRGwQDqorOo",{"id":2141,"title":1732,"body":2142,"description":2150,"extension":1773,"icon":101,"meta":2573,"navigation":158,"path":2574,"seo":2575,"stem":1731,"__hash__":2576},"resources/contributing.md",{"type":8,"value":2143,"toc":2551},[2144,2148,2151,2155,2158,2162,2206,2210,2214,2240,2243,2268,2270,2287,2291,2295,2312,2316,2330,2334,2351,2355,2357,2458,2462,2465,2479,2483,2486,2499,2503,2520,2524,2538,2542,2545,2548],[11,2145,2147],{"id":2146},"contributing-to-astql","Contributing to ASTQL",[15,2149,2150],{},"Thank you for your interest in contributing to ASTQL! This guide will help you get started.",[89,2152,2154],{"id":2153},"code-of-conduct","Code of Conduct",[15,2156,2157],{},"By participating in this project, you agree to maintain a respectful and inclusive environment for all contributors.",[89,2159,2161],{"id":2160},"getting-started","Getting Started",[1855,2163,2164,2167,2173,2179,2182,2188,2194,2197,2203],{},[1288,2165,2166],{},"Fork the repository",[1288,2168,2169,2170],{},"Clone your fork: ",[101,2171,2172],{},"git clone https://github.com/yourusername/astql.git",[1288,2174,2175,2176],{},"Create a feature branch: ",[101,2177,2178],{},"git checkout -b feature/your-feature-name",[1288,2180,2181],{},"Make your changes",[1288,2183,2184,2185],{},"Run tests: ",[101,2186,2187],{},"make test",[1288,2189,2190,2191],{},"Run linter: ",[101,2192,2193],{},"make lint",[1288,2195,2196],{},"Commit your changes with a descriptive message",[1288,2198,2199,2200],{},"Push to your fork: ",[101,2201,2202],{},"git push origin feature/your-feature-name",[1288,2204,2205],{},"Create a Pull Request",[89,2207,2209],{"id":2208},"development-guidelines","Development Guidelines",[1617,2211,2213],{"id":2212},"code-style","Code Style",[1285,2215,2216,2219,2226,2231,2234,2237],{},[1288,2217,2218],{},"Follow standard Go conventions",[1288,2220,2221,2222,2225],{},"Run ",[101,2223,2224],{},"gofmt"," before committing",[1288,2227,2228,2229],{},"Pass all linter checks: ",[101,2230,2193],{},[1288,2232,2233],{},"Add godoc comments for all exported functions and types",[1288,2235,2236],{},"Keep functions small and focused",[1288,2238,2239],{},"Add periods to comment lines",[1617,2241,1675],{"id":2242},"testing",[1285,2244,2245,2248,2253,2259,2262,2265],{},[1288,2246,2247],{},"Write tests for new functionality",[1288,2249,2250,2251],{},"Ensure all tests pass: ",[101,2252,2187],{},[1288,2254,2255,2256],{},"Run race detector: ",[101,2257,2258],{},"make test-race",[1288,2260,2261],{},"Include benchmarks for performance-critical code",[1288,2263,2264],{},"Aim for >70% test coverage",[1288,2266,2267],{},"Test both PostgreSQL and SQLite providers",[1617,2269,1606],{"id":1605},[1285,2271,2272,2275,2278,2281,2284],{},[1288,2273,2274],{},"Update README for significant features",[1288,2276,2277],{},"Add godoc comments for all exported APIs",[1288,2279,2280],{},"Include examples in documentation",[1288,2282,2283],{},"Update schema examples if adding new features",[1288,2285,2286],{},"Keep comments clear and concise",[89,2288,2290],{"id":2289},"types-of-contributions","Types of Contributions",[1617,2292,2294],{"id":2293},"bug-reports","Bug Reports",[1285,2296,2297,2300,2303,2306,2309],{},[1288,2298,2299],{},"Use GitHub Issues",[1288,2301,2302],{},"Include minimal reproduction code",[1288,2304,2305],{},"Describe expected vs actual behavior",[1288,2307,2308],{},"Include Go version and OS",[1288,2310,2311],{},"Specify which provider (PostgreSQL/SQLite)",[1617,2313,2315],{"id":2314},"feature-requests","Feature Requests",[1285,2317,2318,2321,2324,2327],{},[1288,2319,2320],{},"Open an issue first to discuss",[1288,2322,2323],{},"Describe the use case",[1288,2325,2326],{},"Consider backward compatibility",[1288,2328,2329],{},"Propose API design if applicable",[1617,2331,2333],{"id":2332},"pull-requests","Pull Requests",[1285,2335,2336,2339,2342,2345,2348],{},[1288,2337,2338],{},"Reference related issues",[1288,2340,2341],{},"Keep changes focused and atomic",[1288,2343,2344],{},"Add tests for new features",[1288,2346,2347],{},"Update documentation",[1288,2349,2350],{},"Ensure CI passes",[89,2352,2354],{"id":2353},"development-workflow","Development Workflow",[1617,2356,579],{"id":578},[94,2358,2360],{"className":549,"code":2359,"language":551,"meta":99,"style":99},"# Install dependencies\ngo mod download\n\n# Install development tools\nmake install-tools\n\n# Run tests\nmake test\n\n# Run linter\nmake lint\n\n# Run all checks\nmake check\n\n# Generate coverage report\nmake coverage\n",[101,2361,2362,2367,2377,2381,2386,2394,2398,2403,2410,2414,2419,2426,2430,2435,2442,2446,2451],{"__ignoreMap":99},[104,2363,2364],{"class":106,"line":107},[104,2365,2366],{"class":132},"# Install dependencies\n",[104,2368,2369,2371,2374],{"class":106,"line":136},[104,2370,98],{"class":118},[104,2372,2373],{"class":125}," mod",[104,2375,2376],{"class":125}," download\n",[104,2378,2379],{"class":106,"line":155},[104,2380,159],{"emptyLinePlaceholder":158},[104,2382,2383],{"class":106,"line":162},[104,2384,2385],{"class":132},"# Install development tools\n",[104,2387,2388,2391],{"class":106,"line":181},[104,2389,2390],{"class":118},"make",[104,2392,2393],{"class":125}," install-tools\n",[104,2395,2396],{"class":106,"line":200},[104,2397,159],{"emptyLinePlaceholder":158},[104,2399,2400],{"class":106,"line":205},[104,2401,2402],{"class":132},"# Run tests\n",[104,2404,2405,2407],{"class":106,"line":237},[104,2406,2390],{"class":118},[104,2408,2409],{"class":125}," test\n",[104,2411,2412],{"class":106,"line":272},[104,2413,159],{"emptyLinePlaceholder":158},[104,2415,2416],{"class":106,"line":327},[104,2417,2418],{"class":132},"# Run linter\n",[104,2420,2421,2423],{"class":106,"line":332},[104,2422,2390],{"class":118},[104,2424,2425],{"class":125}," lint\n",[104,2427,2428],{"class":106,"line":366},[104,2429,159],{"emptyLinePlaceholder":158},[104,2431,2432],{"class":106,"line":674},[104,2433,2434],{"class":132},"# Run all checks\n",[104,2436,2437,2439],{"class":106,"line":695},[104,2438,2390],{"class":118},[104,2440,2441],{"class":125}," check\n",[104,2443,2444],{"class":106,"line":728},[104,2445,159],{"emptyLinePlaceholder":158},[104,2447,2448],{"class":106,"line":756},[104,2449,2450],{"class":132},"# Generate coverage report\n",[104,2452,2453,2455],{"class":106,"line":783},[104,2454,2390],{"class":118},[104,2456,2457],{"class":125}," coverage\n",[1617,2459,2461],{"id":2460},"provider-specific-development","Provider-Specific Development",[15,2463,2464],{},"When working on provider-specific features:",[1855,2466,2467,2470,2473,2476],{},[1288,2468,2469],{},"Implement for both PostgreSQL and SQLite when applicable",[1288,2471,2472],{},"If a feature is database-specific, document the limitation",[1288,2474,2475],{},"Add provider-specific tests",[1288,2477,2478],{},"Ensure consistent API across providers",[1617,2480,2482],{"id":2481},"schema-development","Schema Development",[15,2484,2485],{},"When modifying schema support:",[1855,2487,2488,2491,2494,2497],{},[1288,2489,2490],{},"Update both provider implementations",[1288,2492,2493],{},"Add schema validation tests",[1288,2495,2496],{},"Update schema documentation",[1288,2498,2326],{},[89,2500,2502],{"id":2501},"code-review-process","Code Review Process",[1855,2504,2505,2508,2511,2514,2517],{},[1288,2506,2507],{},"All submissions require review",[1288,2509,2510],{},"CI must pass",[1288,2512,2513],{},"Maintainers will provide feedback",[1288,2515,2516],{},"Address review comments",[1288,2518,2519],{},"Squash commits if requested",[89,2521,2523],{"id":2522},"release-process","Release Process",[1855,2525,2526,2529,2532,2535],{},[1288,2527,2528],{},"Maintainers handle releases",[1288,2530,2531],{},"Semantic versioning is used",[1288,2533,2534],{},"Changelog is maintained",[1288,2536,2537],{},"Tagged releases trigger automation",[89,2539,2541],{"id":2540},"questions","Questions?",[15,2543,2544],{},"Feel free to open an issue for questions or join discussions in existing issues.",[15,2546,2547],{},"Thank you for contributing to ASTQL!",[1754,2549,2550],{},"html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":99,"searchDepth":136,"depth":136,"links":2552},[2553,2554,2555,2560,2565,2570,2571,2572],{"id":2153,"depth":136,"text":2154},{"id":2160,"depth":136,"text":2161},{"id":2208,"depth":136,"text":2209,"children":2556},[2557,2558,2559],{"id":2212,"depth":155,"text":2213},{"id":2242,"depth":155,"text":1675},{"id":1605,"depth":155,"text":1606},{"id":2289,"depth":136,"text":2290,"children":2561},[2562,2563,2564],{"id":2293,"depth":155,"text":2294},{"id":2314,"depth":155,"text":2315},{"id":2332,"depth":155,"text":2333},{"id":2353,"depth":136,"text":2354,"children":2566},[2567,2568,2569],{"id":578,"depth":155,"text":579},{"id":2460,"depth":155,"text":2461},{"id":2481,"depth":155,"text":2482},{"id":2501,"depth":136,"text":2502},{"id":2522,"depth":136,"text":2523},{"id":2540,"depth":136,"text":2541},{},"/contributing",{"title":1732,"description":2150},"RTjEmAgvw4kXa-Xzx2fEKVjAYslIrUpZ17pK2bDFnO4",[2578,2582,2586,2590,2595,2599,2603,2607,2612,2617,2621,2624,2629,2634,2639,2644,2649,2654,2658,2663,2668,2673,2678,2683,2687,2691,2696,2701,2706,2711,2716,2721,2726,2731,2736,2741,2745,2749,2754,2758,2762,2767,2772,2777,2782,2787,2792,2797,2802,2807,2812,2817,2821,2826,2831,2836,2840,2844,2849,2854,2858,2863,2867,2871,2876,2880,2885,2890,2894,2899,2903,2908,2913,2917,2922,2927,2931,2936,2941,2945,2949,2954,2957,2962,2967,2972,2977,2980,2985,2990,2995,3000,3004,3008,3013,3018,3023,3028,3032,3037,3042,3047,3051,3055,3060,3065,3069,3074,3079,3084,3089,3094,3099,3104,3109,3114,3118,3122,3126,3131,3136,3141,3146,3151,3156,3161,3166,3171,3176,3181,3186,3191,3196,3201,3205,3210,3215,3219,3224,3229,3233,3237,3241,3246,3251,3255,3260,3264,3269,3274,3278,3283,3287,3292,3297,3302,3306,3311,3316,3321,3326,3330,3334,3339,3344,3349,3354,3359,3363,3368,3373,3378,3383,3386,3391,3396,3401,3406,3410,3414,3419,3424,3429,3434,3439,3444,3449,3454,3459,3464,3469,3472,3477,3482,3487,3491,3495,3500,3505,3510,3515,3520,3525,3530,3535,3538,3543,3548,3553,3558,3563,3567,3571,3575,3579,3583,3588,3592,3597,3601,3606,3610,3615,3620,3625,3630,3635,3640,3645,3650,3655,3660,3664,3668,3673,3678,3683,3688,3692,3696,3701,3706,3711,3716,3721,3726,3731,3736,3741,3746,3751,3756,3761,3766,3771,3776,3781,3786,3791,3796,3801,3805,3810,3814,3819,3824,3829,3833,3837,3842,3846,3850,3855,3859,3863,3868,3873,3877,3881,3885,3889,3894,3899,3903,3907,3912,3917,3922,3927,3932,3936,3940,3944,3948,3952,3957,3961,3965,3969,3974,3979,3983,3988,3992,3997,4001,4006,4010,4015,4020,4024,4028,4032,4037,4040,4043,4046,4049,4052,4055,4058,4061,4064,4067,4070,4073,4076,4079,4082,4085,4088,4091,4094,4097,4100,4103,4106,4109,4112,4115,4118,4121,4124,4127,4130,4133,4136,4139,4142,4145,4148,4151,4154,4157,4160,4163,4166,4169,4172,4175,4178,4181,4184,4187,4190,4193,4196,4199,4202,4205,4208,4211,4214,4217,4220,4223,4226,4229,4232,4235,4238,4241,4244,4247,4250,4253,4256,4259,4262,4265,4268,4271,4274,4277,4280,4283,4286,4289,4292,4295,4298,4301,4304,4307,4310,4313,4316,4319,4322,4325,4328,4331,4334,4337,4340,4343,4346,4349,4352,4355,4358,4361,4364,4367,4370,4373,4376,4379,4382,4385,4388,4391,4394,4397,4400,4403,4406,4409,4412,4415,4418,4421,4424,4427,4430,4433,4436,4439,4442,4445,4448,4451,4454,4457,4460,4463,4466,4469,4472,4475,4478,4481,4484,4487,4490,4493,4496,4499,4502,4505,4508,4511,4514,4517,4520,4523,4526,4529,4532,4535,4538,4541,4544,4547,4550,4553,4556,4559,4562,4565,4568,4571,4574,4577,4580,4583,4586,4589,4592,4595,4598,4601,4604,4607,4610,4613,4616,4619,4622,4625,4628,4631,4634,4637,4640,4643,4646,4649,4652,4655,4658,4661,4664,4667,4670,4673,4676,4679,4682,4685,4688,4691,4694,4697,4700,4703,4706,4709,4712,4715,4718,4721,4724,4727,4730,4733,4736,4739,4742,4745,4748,4751,4754,4757,4760,4763,4766,4769,4772,4775,4778,4781,4784,4787,4790,4793,4796,4799,4802,4805,4808,4811,4814,4817,4820,4823,4826,4829,4832,4835,4838,4841,4844,4847,4850,4853,4856,4859,4862,4865,4868,4871,4874,4877,4880,4883,4886,4889,4892,4895,4898,4901,4904,4907,4910,4913,4916,4919,4922,4925,4928,4931,4934,4937,4940,4943,4946,4949,4952,4955,4958,4961,4964,4967,4970,4973,4976,4979,4982,4985,4988,4991,4994,4997,5000,5005,5008,5011,5014,5017,5020,5023,5026,5029,5032,5035,5038,5041,5044,5047,5050,5053,5056,5059,5062,5065,5068,5071,5074,5077,5080,5083,5086,5089,5092,5095,5098,5101,5104,5108,5111,5114,5117,5120,5123,5126,5131,5136,5140,5145,5149,5152,5155,5158,5161,5164,5167,5170,5173,5176,5179,5182,5185,5188,5191,5194,5197,5200,5203,5206,5209,5212,5215,5218,5221,5224,5227,5230,5233,5236,5239,5242,5245,5248,5251,5254,5257,5260,5263,5266,5269,5272,5275,5278,5281,5284,5287,5290,5293,5296,5299,5302,5305,5308,5311,5314,5317,5320,5323,5326,5329,5332,5335,5338,5341,5344,5347,5350,5353,5356,5359,5362,5365,5368,5371,5374,5377,5380,5383,5386,5389,5392,5395,5398,5401,5404,5407,5410,5413,5416,5419,5422,5425,5428,5431,5434,5437,5440,5443,5446,5449,5452,5455,5458,5461,5464,5467,5470,5473,5476,5479,5482,5485,5488,5491,5494,5497,5500,5503,5506,5509,5512,5515,5518,5521,5524,5527,5530,5533,5536,5539,5542,5545,5548,5551,5554,5557,5560,5563,5566,5569,5572,5575,5578,5581,5584,5587,5590,5593,5596,5599,5602,5605,5608,5611,5614,5617,5620,5623,5626,5629,5632,5635,5638,5641,5644,5647,5650,5653,5656,5659,5662,5665,5668,5671,5674,5677,5680,5683,5686,5689,5692,5695,5698,5701,5704,5707,5710,5713,5716,5719,5722,5725,5728,5731,5735,5740,5744,5749,5752,5755,5758,5761,5764,5767,5770,5773,5776,5779,5782,5785,5788,5791,5795,5798,5803,5808,5811,5814,5817,5820,5823,5826,5829,5832,5835,5838,5841,5844,5847,5850,5853,5858,5863,5866,5869,5872,5875,5878,5881,5884,5887,5890,5893,5897,5901,5906,5911,5916,5921,5926,5929,5932,5935,5938,5941,5944,5947,5950,5953,5956,5959,5962,5965,5968,5971,5974,5977,5980,5983,5986,5989,5992,5995,5998,6001,6004,6008,6011,6014,6017,6020,6023,6027,6031,6034,6037,6041,6044,6048,6052,6056,6059,6062,6065,6068,6071,6074,6077,6080,6083,6086,6089,6092,6095,6098,6102,6106,6110,6113,6116,6119,6122,6125,6128,6131,6134,6137,6140,6143,6146,6149,6152,6155,6158,6161,6165,6169,6172,6176,6179,6182,6185,6188,6192,6195,6198,6201,6204,6207,6210,6213,6216,6219,6222,6225,6228,6231,6234,6237,6241,6244,6247,6251,6254,6257,6260,6264,6267,6270,6273,6276,6279,6282,6285,6288,6291,6294,6297,6300,6303,6306,6309,6312,6315,6318,6321,6324,6327,6330,6333,6336,6339,6342,6345,6348,6351,6354,6357,6360,6363,6366,6369,6372,6375,6378,6381,6384,6387,6390,6393,6396,6399,6402,6405,6408,6411,6414,6417,6420,6423,6426,6429,6432,6435,6438,6441,6444,6447,6450,6453,6456,6460,6463,6466,6470,6473,6476,6479,6482,6486,6489,6493,6497,6500,6503,6506,6509,6512,6516,6519,6522,6526,6529,6533,6536,6540,6543,6547,6551,6555,6559,6562,6566,6569,6572,6575,6578,6581,6584,6587,6590,6593,6596,6599,6602,6605,6608,6611,6614,6617,6620,6623,6626,6629,6632,6636,6640,6644,6648,6652,6656,6660,6664,6667,6670,6673,6676,6679,6683,6687,6692,6697,6702,6707,6712,6717,6722,6727,6732,6737,6742,6747,6752,6757,6762,6765,6768,6771,6774,6777,6780,6783,6786,6789,6792,6795,6798,6801,6804,6807,6810,6813,6816,6819,6822,6825,6828,6831,6834,6837,6840,6843,6846,6849,6852,6855,6858,6861,6864,6867,6870,6873,6876,6879,6882,6885,6888,6891,6894,6897,6900,6903,6906,6909,6912,6915,6918,6921,6925,6929,6932,6935,6938,6941,6945,6948,6951,6954,6957,6960,6963,6966,6969,6972,6975,6978,6981,6984,6987,6990,6993,6996,6999,7002,7005,7008,7011,7014,7018,7022,7026,7030,7033,7036,7039,7042,7045,7048,7051,7054,7057,7060,7063,7066,7069,7072,7075,7078,7081,7084,7087,7090,7093,7096,7099,7102,7105,7108,7111,7114,7117,7120,7123,7126,7129,7132,7135,7138,7141,7144,7147,7150,7153,7156,7159,7162,7165,7168,7171,7174,7177,7180,7183,7186,7189,7192,7195,7198,7201,7204,7207,7210,7213,7216,7219,7222,7225,7228,7231,7234,7237,7240,7243,7246,7249,7252,7255,7258,7261,7264,7267,7270,7273,7276,7279,7282,7285,7288,7291,7294,7297,7300,7303,7306,7309,7312,7315,7318,7321,7324,7327,7330,7333,7336,7339,7342,7345,7348,7351,7354,7357,7360,7363,7366,7369,7372,7375,7378,7381,7384,7387,7390,7393,7396,7399,7402,7405,7408,7411,7414,7417,7420,7423,7426,7429,7432,7435,7438,7441,7444,7447,7450,7453,7456,7459,7462,7465,7468,7471,7474,7477,7480,7483,7486,7489,7492,7495,7498,7501,7504,7507,7510,7513,7516,7519,7522,7525,7528,7531,7534,7537,7540,7543,7546,7549,7552,7555,7558,7561,7564,7567,7570,7573,7576,7579,7582,7585,7588,7591,7594,7597,7600,7603,7606,7609,7612,7615,7618,7621,7624,7627,7630,7633,7636,7639,7642,7645,7648,7651,7654,7657,7660,7663,7666,7669,7672,7675,7678,7681,7684,7687,7690,7693,7696,7699,7702,7705,7708,7711,7714,7717,7720,7723,7726,7729,7732,7735,7738,7741,7744,7747,7750,7753,7756,7759,7762,7765,7768,7771,7774,7777,7780,7783,7786,7789,7792,7795,7798,7801,7804,7807,7810,7813,7816,7819,7822,7825,7828,7831,7834,7837,7840,7843,7846,7849,7852,7855,7858,7861,7864,7867,7870,7873,7876,7879,7882,7885,7888,7891,7894,7897,7900,7903,7906,7909,7912,7915,7918,7921,7924,7927,7930,7933,7936,7939,7942,7945,7948,7951,7954,7957,7960,7963,7966,7969,7972,7975,7978,7981,7984,7987,7990,7993,7996,7999,8002,8005,8008,8011,8014,8017,8020,8023,8026,8029,8032,8035,8038,8041,8044,8047,8050,8053,8056,8059,8062,8065,8068,8071,8074,8077,8080,8083,8086,8089,8092,8095,8098,8101,8104,8107,8110,8113,8116,8119,8122,8125,8128,8131,8134,8137,8140,8143,8146,8149,8152,8155,8158,8161,8164,8167,8170,8173,8176,8179,8182,8185,8188,8191,8194,8197,8200,8203,8206,8209,8212,8215,8218,8221,8224,8227,8230,8233,8236,8239,8242,8245,8248,8251,8254,8257,8260,8263,8266,8269,8272,8275,8278,8281,8284,8287,8290,8293,8296,8299,8302,8305,8308,8311,8314,8317,8320,8323,8326,8329,8332,8335,8338,8341,8344,8347,8350,8353,8356,8359,8362,8365,8368,8371,8374,8377,8380,8383,8386,8389,8392,8395,8398,8401,8404,8407,8410,8413,8416,8419,8422,8425,8428,8431,8434,8437,8440,8443,8446,8449,8452,8455,8458,8461,8464,8467,8470,8473,8476,8479,8482,8485,8488,8491,8494,8497,8500,8503,8506,8509,8512,8515,8518,8521,8524,8527,8530,8533,8536,8539,8542,8545,8548,8551,8554,8557,8560,8563,8566,8569,8572,8575,8578,8581,8584,8587,8590,8593,8596,8599,8602,8605,8608,8611,8614,8617,8620,8623,8626,8629,8632,8635,8638,8641,8644,8647,8650,8653,8656,8659,8662,8665,8668,8671,8674,8677,8680,8683,8686,8689,8692,8695,8698,8701,8704,8707,8710,8713,8716,8719,8722,8725,8728,8731,8734,8737,8740,8743,8746,8749,8752,8755,8758,8761,8764,8767,8770,8773,8776,8779,8782,8785,8788,8791,8794,8797,8800,8803,8806,8809,8812,8815,8818,8821,8824,8827,8830,8833,8836,8839,8842,8845,8848,8851,8854,8857,8860,8863,8866,8869,8872,8875,8878,8881,8884,8887,8890,8893,8896,8899,8902,8905,8908,8911,8914,8917,8920,8923,8926,8929,8932,8935,8938,8941,8944,8947,8950,8953,8956,8959,8962,8965,8968,8971,8974,8977,8980,8983,8986,8989,8992,8995,8998,9001,9004,9007,9010,9013,9016,9019,9022,9025,9028,9031,9034,9037,9040,9043,9046,9049,9052,9055,9058,9061,9064,9067,9070,9073,9076,9079,9082,9085,9088,9091,9094,9097,9100,9103,9106,9109,9112,9115,9118,9121,9124,9127,9130,9133,9136,9139,9142,9145,9148,9151,9154,9157,9160,9163,9166,9169,9172,9175,9178,9181,9184,9187,9190,9193,9196,9199,9202,9205,9208,9211,9214,9217,9220,9223,9226,9229,9232,9235,9238,9241,9244,9247,9250,9253,9256,9259,9262,9265,9268,9271,9274,9277,9280,9283,9286,9289,9292,9295,9298,9301,9304,9307,9310,9313,9316,9319,9322,9325,9328,9331,9334,9337,9340,9343,9346,9349,9352,9355,9358,9361,9364,9367,9370,9373,9376,9379,9382,9385,9388,9391,9394,9397,9400,9403,9406,9409,9412,9415,9418,9421,9424,9427,9430,9433,9436,9439,9442,9445,9448,9451,9454,9457,9460,9463,9466,9469,9472,9475,9478,9481,9484,9487,9490,9493,9496,9499,9502,9505,9508,9511,9514,9517,9520,9523,9526,9529,9532,9535,9538,9541,9544,9547,9550,9553,9556,9559,9562,9565,9568,9571,9574,9577,9580,9583,9586,9589,9592,9595,9598,9601,9604,9607,9610,9613,9616,9619,9622,9625,9628,9631,9634,9637,9640,9643,9646,9649,9652,9655,9658,9661,9664,9667,9670,9673,9676,9679,9682,9685,9688,9691,9694,9697,9700,9703,9706,9709,9712,9715,9718,9721,9724,9727,9730,9733,9736,9739,9742,9745,9748,9751,9754,9757,9760,9763,9766,9769,9772,9775,9778,9781,9784,9787,9790,9793,9796,9799,9802,9805,9808,9811,9814,9817,9820,9823,9826,9829,9832,9835,9838,9841,9844,9847,9850,9853,9856,9859,9862,9865,9868,9871,9874,9877,9880,9883,9886,9889,9892,9895,9898,9901,9904,9907,9910,9913,9916,9919,9922,9925,9928,9931,9934,9937,9940,9943,9946,9949,9952,9955,9958,9961,9964,9967,9970,9973,9976,9979,9982,9985,9988,9991,9994,9997,10000,10003,10006,10009,10012,10015,10018,10021,10024,10027,10030,10033,10036,10039,10042,10045,10048,10051,10054,10057,10060,10063,10066,10069,10072,10075,10078,10081,10084,10087,10090,10093,10096,10099,10102,10105,10108,10111,10114,10117,10120,10123,10126,10129,10132,10135,10138,10141,10144,10147,10150,10153,10156,10159,10162,10165,10168,10171,10174,10177,10180,10183,10186,10189,10192,10195,10198,10201,10204,10207,10210,10213,10216,10219,10222,10225,10228,10231,10234,10237,10240,10243,10246,10249,10252,10255,10258,10261,10264,10267,10270,10273,10276,10279,10282,10285,10288,10291,10294,10297,10300,10303,10306,10309,10312,10315,10318,10321,10324,10327,10330,10333,10336,10339,10342,10345,10348,10351,10354,10357,10360,10363,10366,10369,10372,10375,10378,10381,10384,10387,10390,10393,10396,10399,10402,10405,10408,10411,10414,10417,10420,10423,10426,10429,10432,10435,10438,10441,10444,10447,10450,10453,10456,10459,10462,10465,10468,10471,10474,10477,10480,10483,10486,10489,10492,10495,10498,10501,10504,10507,10510,10513,10516,10519,10522,10525,10528,10531,10534,10537,10540,10543,10546,10549,10552,10555,10558,10561,10564,10567,10570,10573,10576,10579,10582,10585,10588,10591,10594,10597,10600,10603,10606,10609,10612,10615,10618,10621,10624,10627,10630,10633,10636,10639,10642,10645,10648,10651,10654,10657,10660,10663,10666,10669,10672,10675,10678,10681,10684,10687,10690,10693,10696,10699,10702,10705,10708,10711,10714,10717,10720,10723,10726,10729,10732,10735,10738,10741,10744,10747,10750,10753,10756,10759,10762,10765,10768,10771,10774,10777,10780,10783,10786,10789,10792,10795,10798,10801,10804,10807,10810,10813,10816,10819,10822,10825,10828,10831,10834,10837,10840,10843,10846,10849,10852,10855,10858,10861,10864,10867,10870,10873,10876,10879,10882,10885,10888,10891,10894,10897,10900,10903,10906,10909,10912,10915,10918,10921,10924,10927,10930,10933,10936,10939,10942,10945,10948,10951,10954,10957,10960,10963,10966,10969,10972,10975,10978,10981,10984,10987,10990,10993,10996,10999,11002,11005,11008,11011,11014,11017,11020,11023,11026,11029,11032,11035,11038,11041,11044,11047,11050,11053,11056,11059,11062,11065,11068,11071,11074,11077,11080,11083,11086,11089,11092,11095,11098,11101,11104,11107,11110,11113,11116,11119,11122,11125,11128,11131,11134,11137,11140,11143,11146,11149,11152,11155,11158,11161,11164,11167,11170,11173,11176,11179,11182,11185,11188,11191,11194,11197,11200,11203,11206,11209,11212,11215,11218,11221,11224,11227,11230,11233,11236,11239,11242,11245,11248,11251,11254,11257,11260,11263,11266,11269,11272,11275,11278,11281,11284,11287,11290,11293,11296,11299,11302,11305,11308,11311,11314,11317,11320,11323,11326,11329,11332,11335,11338,11341,11344,11347,11350,11353,11356,11359,11363,11366,11370,11374,11377,11380,11383,11386,11389,11392,11395,11398,11401,11404,11407,11410,11413,11416,11419,11422,11425,11428,11431,11434,11437,11440,11443,11446,11449,11452,11455,11458,11461,11464,11467,11470,11473,11476,11479,11482,11485,11488,11491,11494,11497,11500,11503,11506,11509,11512,11515,11518,11521,11524,11527,11530,11533,11536,11539,11542,11545,11548,11551,11554,11557,11560,11563,11566,11569,11572,11575,11578,11581,11584,11587,11590,11593,11596,11599,11602,11605,11608,11611,11614,11617,11620,11623,11626,11629,11632,11635,11638,11641,11644,11647,11650,11653,11656,11659,11662,11665,11668,11671,11674,11677,11680,11683,11686,11689,11692,11695,11698,11701,11704,11707,11710,11713,11716,11719,11722,11725,11728,11731,11734,11737,11740,11743,11746,11749,11752,11755,11758,11761,11764,11767,11770,11773,11776,11779,11782,11785,11788,11791,11794,11797,11800,11803,11806,11809,11812,11815,11818,11821,11824,11827,11830,11833,11836,11839,11842,11845,11848,11851,11854,11857,11860,11863,11866,11869,11872,11875,11878,11881,11884,11887,11890,11893,11896,11899,11902,11905,11908,11911,11914,11917,11920,11923,11926,11929,11932,11935,11938,11941,11944,11947,11950,11953,11956,11959,11962,11965,11968,11971,11974,11977,11980,11983,11986,11989,11992,11995,11998,12001,12004,12007,12010,12013,12016,12019,12022,12025,12028,12031,12034,12037,12040,12043,12046,12049,12052,12055,12058,12061,12064,12067,12070,12073,12076,12079,12082,12085,12088,12091,12094,12097,12100,12103,12106,12109,12112,12115,12118,12121,12124,12127,12130,12133,12136,12139,12142,12145,12148,12151,12154,12157,12162,12165,12168,12171,12174,12177,12180,12183,12186,12189,12192,12195,12198,12201,12204,12207,12210,12213,12216,12219,12222,12225,12228,12231,12234,12237,12240,12243,12246,12249,12252,12255,12258,12261,12264,12267,12270,12273,12276,12279,12282,12285,12288,12291,12294,12297,12300,12303,12306,12309,12312,12315,12318,12321,12324,12327,12330,12333,12336,12339,12342,12345,12348,12351,12354,12357,12360,12363,12366,12369,12372,12375,12378,12381,12384,12387,12391,12394,12397,12400,12403,12406,12409,12412,12415,12418,12421,12424,12427,12430,12433,12436,12439,12442,12445,12448,12451,12454,12457,12460,12463,12466,12469,12472,12475,12478,12481,12484,12487,12490,12493,12496,12499,12502,12505,12508,12511,12514,12517,12520,12523,12526,12529,12532,12535,12538,12541,12544,12547,12550,12553,12556,12559,12562,12565,12568,12571,12574,12577,12580,12583,12586,12589,12592,12595,12598,12601,12604,12607,12610,12613,12616,12619,12622,12625,12628,12631,12634,12637,12640,12643,12646,12649,12652,12655,12658,12661,12664,12667,12670,12673,12676,12679,12682,12685,12688,12691,12694,12697,12700,12703,12706,12709,12712,12715,12718,12721,12724,12727,12730,12733,12736,12739,12742,12745,12748,12751,12754,12757,12760,12763,12766,12769,12772,12775,12778,12781,12784,12787,12790,12793,12796,12799,12802,12805,12808,12811,12814,12817,12820,12823,12826,12829,12832,12835,12838,12841,12844,12847,12850,12853,12856,12859,12862,12865,12868,12871,12874,12877,12880,12883,12886,12889,12892,12895,12898,12901,12904,12907,12910,12913,12916,12919,12922,12925,12928,12931,12934,12937,12940,12943,12946,12949,12952,12955,12958,12961,12964,12967,12970,12973,12976,12979,12982,12985,12988,12991,12994,12997,13000,13003,13006,13009,13012,13015,13018,13021,13024,13027,13030,13033,13036,13039,13042,13045,13048,13051,13054,13057,13060,13063,13066,13069,13072,13075,13078,13081,13084,13087,13090,13093,13096,13099,13102,13105,13108,13111,13114,13117,13120,13123,13126,13129,13132,13135,13138,13141,13144,13147,13150,13153,13156,13159,13162,13165,13168,13171,13174,13177,13181,13185,13188,13191,13194,13197,13200,13203,13206,13209,13212,13215,13218,13221,13224,13227,13230,13233,13236,13239,13242,13245,13248,13251,13254,13257,13260,13263,13266,13269,13272,13275,13278,13281,13284,13287,13290,13293,13296,13299,13302,13305,13308,13311,13314,13317,13320,13323,13326,13329,13332,13335,13338,13341,13344,13347,13350,13353,13356,13359,13362,13365,13368,13371,13374,13377,13380,13383,13386,13389,13392,13395,13398,13401,13404,13407,13410,13413,13416,13419,13422,13425,13428,13431,13434,13437,13440,13443,13446,13449,13452,13455,13458,13461,13464,13467,13470,13473,13476,13479,13482,13485,13488,13491,13494,13497,13500,13503,13506,13509,13512,13515,13518,13521,13524,13527,13530,13533,13536,13539,13542,13545,13548,13551,13554,13557,13560,13563,13566,13569,13572,13575,13578,13581,13584,13587,13590,13593,13596,13599,13602,13605,13608,13611,13614,13617,13620,13623,13626,13629,13632,13635,13638,13641,13644,13647,13650,13653,13656,13659,13662,13665,13668,13671,13674,13677,13680,13683,13686,13689,13692,13695,13698,13701,13704,13707,13710,13713,13716,13719,13722,13725,13728,13731,13734,13737,13740,13743,13746,13749,13752,13755,13758,13761,13764,13767,13770,13773,13776,13779,13782,13785,13788,13791,13794,13797,13800,13803,13806,13809,13812,13815,13818,13821,13824,13827,13830,13833,13836,13839,13842,13845,13848,13851,13854,13857,13860,13863,13866,13869,13872,13875,13878,13881,13884,13887,13890,13893,13896,13899,13902,13905,13908,13911,13914,13917,13920,13923,13926,13929,13932,13935,13938,13941,13944,13947,13950,13953,13956,13959,13962,13965,13968,13971,13974,13977,13980,13983,13986,13989,13992,13995,13998,14001,14004,14007,14010,14013,14016,14019,14022,14025,14028,14031,14034,14037,14040,14043,14046,14049,14052,14055,14058,14061,14064,14067,14070,14073,14076,14079,14082,14085,14088,14091,14094,14097,14100,14103,14106,14109,14112,14115,14118,14121,14124,14127,14130,14133,14136,14139,14142,14145,14148,14151,14154,14157,14160,14163,14166,14169,14172,14175,14178,14181,14184,14187,14190,14193,14196,14199,14202,14205,14208,14211,14215,14218,14221,14225,14228,14231,14234,14237,14240,14243,14246,14249,14252,14255,14258,14261,14264,14267,14270,14273,14276,14279,14282,14285,14288,14291,14294,14297,14300,14303,14306,14310,14313,14316,14319,14322,14325,14328,14332,14335,14338,14341,14344,14348,14351,14354,14357,14360,14363,14366,14369,14372,14375,14378,14381,14384,14387,14390,14393,14396,14399,14402,14405,14408,14411,14414,14417,14420,14423,14426,14429,14432,14435,14438,14441,14444,14447,14450,14453,14456,14460,14464,14467,14470,14473,14476,14479,14482,14485,14488,14491,14494,14497,14500,14503,14506,14509,14512,14515,14518,14521,14524,14527,14530,14533,14536,14539,14542,14545,14548,14551,14554,14557,14560,14563,14566,14569,14572,14575,14578,14581,14584,14587,14590,14593,14596,14599,14602,14605,14608,14611,14614,14617,14620,14623,14626,14629,14632,14635,14638,14641,14644,14647,14650,14653,14656,14659,14662,14665,14668,14671,14674,14677,14680,14683,14686,14689,14692,14695,14698,14701,14704,14707,14710,14713,14716,14719,14722,14725,14728,14731,14734,14737,14740,14743,14746,14749,14752,14755,14758,14761,14764,14767,14770,14773,14776,14779,14782,14785,14788,14791,14794,14797,14800,14803,14806,14809,14812,14815,14818,14821,14824,14827,14830,14833,14836,14839,14842,14845,14848,14851,14854,14857,14860,14863,14866,14869,14872,14875,14878,14881,14884,14887,14890,14893,14896,14899,14902,14905,14908,14911,14914,14917,14920,14923,14926,14929,14932,14935,14938,14941,14944,14947,14950,14953,14956,14959,14962,14965,14968,14971,14974,14977,14980,14983,14986,14989,14992,14995,14998,15001,15004,15007,15010,15013,15016,15019,15022,15025,15028,15031,15034,15037,15040,15043,15046,15049,15052,15055,15058,15061,15064,15067,15070,15073,15076,15079,15082,15085,15088,15091,15094,15097,15100,15103,15106,15109,15112,15115,15118,15121,15124,15127,15130,15133,15136,15139,15142,15145,15148,15151,15154,15157,15160,15163,15166,15169,15172,15175,15178,15181,15184,15187,15190,15193,15196,15199,15202,15205,15208,15211,15214,15217,15220,15223,15226,15229,15232,15235,15238,15241,15244,15247,15250,15254,15258,15262,15266,15269,15272,15275,15278,15281,15284,15287,15290,15293,15296,15299,15302,15305,15308,15311,15314,15317,15320,15323,15326,15329,15332,15335,15338,15341,15344,15347,15350,15353,15356,15359,15362,15365,15368,15371,15374,15377,15380,15383,15386,15389,15392,15395,15398,15401,15404,15407,15410,15413,15416,15419,15422,15425,15428,15431,15434,15437,15440,15443,15446,15449,15452,15455,15458,15461,15464,15467,15470,15473,15476,15479,15482,15485,15488,15491,15494,15497,15500,15503,15506,15509,15512,15515,15518,15521,15524,15527,15530,15533,15536,15539,15542,15545,15548,15551,15554,15557,15560,15563,15566,15569,15572,15575,15578,15581,15584,15587,15590,15593,15596,15599,15602,15605,15608,15611,15614,15617,15620,15623,15626,15629,15632,15635,15638,15641,15644,15647,15650,15653,15656,15659,15662,15665,15668,15671,15674,15677,15680,15683,15686,15689,15692,15695,15698,15701,15704,15707,15710,15713,15716,15719,15722,15725,15728,15731,15734,15737,15740,15743,15746,15749,15752,15755,15758,15761,15764,15767,15770,15773,15776,15779,15782,15785,15788,15791,15794,15797,15800,15803,15806,15809,15812,15815,15818,15821,15824,15827,15830,15833,15836,15839,15842,15845,15848,15851,15854,15857,15860,15863,15866,15869,15872,15875,15878,15881,15884,15887,15890,15893,15896,15899,15902,15905,15908,15911,15914,15917,15920,15923,15926,15929,15932,15935,15938,15941,15944,15947,15950,15953,15956,15959,15962,15965,15968,15971,15974,15977,15980,15983,15986,15989,15992,15995,15998,16001,16004,16007,16010,16013,16016,16019,16022,16025,16028,16031,16034,16037,16040,16043,16046,16049,16052,16055,16058,16061,16064,16067,16070,16073,16076,16079,16082,16085,16088,16091,16094,16097,16100,16103,16106,16109,16112,16115,16118,16121,16124,16127,16130,16133,16136,16139,16142,16145,16148,16151,16154,16157,16160,16163,16166,16169,16172,16175,16178,16181,16184,16187,16190,16193,16196,16199,16202,16205,16208,16211,16214,16217,16220,16223,16226,16229,16232,16235,16238,16241,16244,16247,16250,16253,16256,16259,16262,16265,16268,16271,16274,16277,16280,16283,16286,16289,16292,16295,16298,16301,16304,16307,16310,16313,16316,16319,16322,16325,16328,16331,16334,16337,16340,16343,16346,16349,16352,16355,16358,16361,16364,16367,16370,16373,16376,16379,16382,16385,16388,16391,16394,16397,16400,16403,16406,16409,16412,16415,16418,16421,16424,16427,16430,16433,16436,16439,16442,16445,16448,16451,16454,16457,16460,16463,16466,16469,16472,16475,16478,16481,16484,16487,16490,16493,16496,16499,16502,16505,16508,16511,16514,16517,16520,16523,16526,16529,16532,16535,16538,16541,16544,16547,16550,16553,16556,16559,16562,16565,16568,16571,16574,16577,16580,16583,16586,16589,16592,16595,16598,16601,16604,16607,16610,16613,16616,16619,16622,16625,16628,16631,16634,16637,16640,16643,16646,16649,16652,16655,16658,16661,16664,16667,16670,16673,16676,16679,16682,16685,16688,16691,16694,16697,16700,16703,16706,16709,16712,16715,16718,16721,16724,16727,16730,16733,16736,16739,16742,16745,16748,16751,16754,16757,16760,16763,16766,16769,16772,16775,16778,16781,16784,16787,16790,16793,16796,16799,16802,16805,16808,16811,16814,16817,16820,16823,16826,16829,16832,16835,16838,16841,16844,16847,16850,16853,16856,16859,16862,16865,16868,16871,16874,16877,16880,16883,16886,16889,16892,16895,16898,16901,16904,16907,16910,16913,16916,16919,16922,16925,16928,16931,16934,16937,16940,16943,16946,16949,16952,16955,16958,16961,16964,16967,16970,16973,16976,16979,16982,16985,16988,16991,16994,16997,17000,17003,17006,17009,17012,17015,17018,17021,17024,17027,17030,17033,17036,17039,17042,17045,17048,17051,17054,17057,17060,17063,17066,17069,17072,17075,17078,17081,17084,17087,17090,17093,17096,17099,17102,17105,17108,17111,17114,17117,17120,17123,17126,17129,17132,17135,17138,17141,17144,17147,17150,17153,17156,17159,17162,17165,17168,17171,17174,17177,17180,17183,17186,17189,17192,17195,17198,17201,17204,17207,17210,17213,17216,17219,17222,17225,17228,17231,17234,17237,17240,17243,17246,17249,17252,17255,17258,17261,17264,17267,17270,17273,17276,17279,17282,17285,17288,17291,17294,17297,17300,17303,17306,17309,17312,17315,17318,17321,17324,17327,17330,17333,17336,17339,17342,17345,17348,17351,17354,17357,17360,17363,17366,17369,17372,17375,17378,17381,17384,17387,17390,17393,17396,17399,17402,17405,17408,17411,17414,17417,17420,17423,17426,17429,17432,17435,17438,17441,17444,17447,17450,17453,17456,17459,17462,17465,17468,17471,17474,17477,17480,17483,17486,17489,17492,17495,17498,17501,17504,17507,17510,17513,17516,17519,17522,17525,17528,17531,17534,17537,17540,17543,17546,17549,17552,17555,17558,17561,17564,17567,17570,17573,17576,17579,17582,17585,17588,17591,17594,17597,17600,17603,17606,17609,17612,17615,17618,17621,17624,17627,17630,17633,17636,17639,17642,17645,17648,17651,17654,17657,17660,17663,17666,17669,17672,17675,17678,17681,17684,17687,17690,17693,17696,17699,17702,17705,17708,17711,17714,17717,17720,17723,17726,17729,17732,17735,17738,17741,17744,17747,17750,17753,17756,17759,17762,17765,17768,17771,17774,17777,17780,17783,17786,17789,17792,17795,17798,17801,17804,17807,17810,17813,17816,17819,17822,17825,17828,17831,17834,17837,17840,17843,17846,17849,17852,17855,17858,17861,17864,17867,17870,17873,17876,17879,17882,17885,17888,17891,17894,17897,17900,17903,17906,17909,17912,17915,17918,17921,17924,17927,17930,17933,17936,17939,17942,17945,17948,17951,17954,17957,17960,17965,17968,17971,17974,17977,17980,17983,17986,17989,17992,17995,17998,18001,18004,18007,18010,18013,18016,18019,18022,18025,18028,18031,18034,18037,18040,18043,18046,18049,18052,18055,18058,18061,18064,18067,18070,18073,18076,18079,18082,18085,18088,18091,18094,18097,18100,18103,18106,18109,18112,18115,18118,18121,18124,18127,18130,18133,18136,18139,18142,18145,18148,18151,18154,18157,18160,18165,18170,18173,18176,18179,18182,18185,18188,18191,18194,18197,18200,18203,18206,18209,18212,18215,18218,18221,18224,18227,18230,18233,18236,18239,18242,18245,18248,18251,18254,18257,18260,18263,18266,18269,18272,18275,18278,18281,18284,18287,18290,18293,18298,18301,18304,18307,18310,18313,18316,18319,18322,18325,18328,18331,18334,18337,18340,18343,18346,18349,18352,18355,18358,18361,18364,18368,18372,18376,18379,18382,18385,18388,18391,18394,18397,18400,18403,18406,18409,18412,18415,18418,18421,18424,18427,18432,18436,18439,18442,18445,18448,18451,18454,18457,18460,18463,18466,18469,18472,18475,18478,18481,18484,18487,18490,18493,18496,18499,18502,18505,18508,18511,18514,18517,18520,18523,18526,18529,18532,18535,18538,18541,18544,18547,18550,18553,18556,18559,18562,18565,18568,18571,18574,18577,18580,18583,18586,18589,18592,18595,18598,18601,18604,18607,18610,18613,18616,18619,18622,18625,18628,18631,18634,18637,18640,18643,18646,18649,18652,18655,18658,18661,18664,18667,18670,18673,18676,18679,18682,18685,18688,18691,18694,18697,18700,18703,18706,18709,18712,18715,18718,18721,18724,18727,18730,18733,18736,18739,18742,18745,18748,18751,18754,18757,18760,18763,18766,18769,18772,18775,18778,18781,18784,18787,18790,18793,18796,18799,18802,18805,18808,18811,18814,18817,18820,18823,18826,18829,18832,18835,18838,18841,18844,18847,18850,18853,18856,18859,18862,18865,18868,18871,18874,18877,18880,18883,18886,18889,18892,18895,18898,18901,18904,18907,18910,18913,18916,18919,18922,18925,18928,18931,18934,18937,18940,18943,18946,18949,18952,18955,18958,18961,18964,18967,18970,18973,18976,18979,18982,18985,18988,18991,18994,18997,19000,19003,19006,19009,19012,19015,19018,19021,19025,19028,19031,19034,19037,19040,19043,19046,19049,19052,19055,19058,19061,19064,19067,19070,19073,19076,19079,19082,19085,19088,19091,19094,19097,19100,19103,19106,19109,19112,19115,19118,19121,19124,19127,19130,19133,19136,19139,19142,19145,19148,19151,19154,19157,19160,19163,19166,19169,19172,19175,19178,19181,19184,19187,19190,19193,19196,19199,19202,19205,19208,19211,19214,19217,19220,19223,19226,19229,19232,19235,19238,19241,19244,19247,19250,19253,19256,19259,19262,19265,19268,19271,19274,19277,19280,19283,19286,19289,19292,19295,19298,19301,19304,19309,19312,19315,19318,19321,19324,19327,19330,19333,19336,19339,19342,19345,19348,19351,19354,19358,19361,19364,19367,19370,19373,19376,19379,19382,19385,19388,19391,19394,19397,19400,19403,19406,19409,19412,19415,19418,19421,19424,19427,19430,19433,19436,19439,19442,19445,19448,19451,19454,19457,19460,19463,19466,19469,19472,19475,19478,19481,19484,19487,19490,19493,19496,19499,19502,19505,19508,19511,19514,19517,19520,19523,19526,19529,19532,19535,19538,19541,19544,19547,19550,19553,19556,19559,19562,19565,19568,19571,19574,19577,19580,19583,19586,19589,19592,19595,19598,19601,19604,19607,19610,19613,19616,19619,19622,19625,19628,19631,19634,19637,19640,19643,19646,19649,19652,19655,19658,19661,19664,19667,19670,19673,19676,19679,19682,19685,19688,19691,19694,19697,19700,19703,19706,19709,19712,19715,19718,19721,19724,19727,19730,19733,19736,19739,19742,19745,19748,19751,19754,19757,19760,19763,19766,19769,19772,19775,19778,19781,19784,19787,19790,19793,19796,19799,19802,19805,19808,19811,19814,19817,19820,19823,19826,19829,19832,19835,19838,19841,19844,19847,19850,19853,19856,19859,19862,19865,19868,19871,19874,19877,19880,19883,19886,19889,19892,19895,19898,19901,19904,19907,19910,19913,19916,19919,19922,19925,19928,19931,19934,19937,19940,19943,19946,19949,19952,19955,19958,19961,19964,19967,19970,19973,19976,19979,19982,19985,19988,19991,19994,19997,20000,20003,20006,20009,20012,20015,20018,20021,20024,20027,20030,20033,20036,20039,20042,20045,20048,20051,20054,20057,20060,20063,20066,20069,20072,20075,20078,20081,20084,20087,20090,20093,20096,20099,20102,20105,20108,20111,20114,20117,20120,20123,20126,20129,20132,20135,20138,20141,20144,20147,20150,20153,20156,20159,20162,20165,20168,20171,20174,20177,20180,20183,20186,20189,20192,20195,20198,20201,20204,20207,20210,20213,20216,20219,20222,20225,20228,20231,20234,20237,20240,20243,20246,20249,20252,20255,20258,20261,20264,20267,20270,20273,20276,20279,20282,20285,20288,20291,20294,20297,20300,20303,20306,20309,20312,20315,20318,20321,20324,20327,20330,20333,20338,20341,20344,20347,20350,20353,20356,20359,20362,20365,20368,20371,20374,20377,20380,20383,20386,20389,20392,20395,20398,20401,20404,20407,20410,20413,20416,20419,20422,20425,20428,20431,20434,20437,20440,20443,20446,20449,20452,20455,20458,20461,20464,20467,20470,20473,20476,20479,20482,20485,20488,20491,20494,20497,20500,20503,20506,20509,20512,20515,20518,20521,20524,20527,20530,20533,20536,20539,20542,20545,20548,20551,20554,20557,20560,20563,20566,20569,20572,20575,20578,20581,20584,20587,20590,20593,20596,20599,20602,20605,20608,20611,20614,20618,20621,20624,20627,20630,20633,20636,20639,20642,20645,20648,20651,20654,20657,20660,20663,20666,20669,20672,20675,20678,20681,20684,20687,20690,20693,20696,20699,20702,20705,20708,20711,20714,20717,20720,20723,20726,20729,20732,20735,20738,20741,20744,20747,20750,20753,20756,20759,20762,20765,20768,20771,20774,20777,20780,20783,20786,20789,20792,20795,20798,20801,20804,20807,20810,20813,20816,20819,20822,20825,20828,20831,20834,20837,20840,20843,20846,20849,20852,20855,20858,20861,20864,20867,20870,20873,20876,20879,20882,20885,20888,20891,20894,20897,20900,20903,20906,20909,20912,20915,20918,20921,20924,20927,20930,20933,20936,20939,20942,20945,20948,20951,20954,20957,20960,20963,20966,20969,20972,20975,20978,20981,20984,20987,20990,20993,20996,20999,21002,21005,21008,21011,21014,21017,21020,21023,21026,21029,21032,21035,21038,21041,21044,21047,21050,21053,21056,21059,21062,21065,21068,21071,21074,21077,21080,21083,21086,21089,21092,21095,21098,21101,21104,21107,21110,21113,21116,21119,21122,21125,21128,21131,21134,21137,21140,21143,21146,21149,21152,21155,21158,21161,21164,21167,21170,21173,21176,21179,21182,21185,21188,21191,21194,21197,21200,21203,21206,21209,21212,21215,21218,21221,21224,21227,21230,21233,21236,21239,21242,21245,21248,21251,21254,21257,21260,21263,21266,21269,21272,21275,21278,21281,21284,21287,21290,21293,21296,21299,21302,21305,21308,21311,21314,21317,21320,21323,21326,21329,21332,21335,21338,21341,21344,21347,21350,21353,21356,21359,21362,21365,21368,21371,21374,21377,21380,21383,21386,21389,21392,21395,21398,21401,21404,21407,21410,21413,21416,21419,21422,21425,21428,21431,21434,21437,21440,21443,21446,21449,21452,21455,21458,21461,21464,21467,21470,21473,21476,21479,21482,21485,21488,21491,21494,21497,21500,21503,21506,21509,21512,21515,21518,21521,21524,21527,21530,21533,21536,21539,21542,21545,21548,21551,21554,21557,21560,21563,21566,21569,21572,21575,21578,21581,21584,21587,21590,21593,21596,21599,21602,21605,21608,21611,21614,21617,21620],{"id":2579,"title":1614,"titles":2580,"content":2581,"level":107},"/v0.0.14/overview",[],"Type-safe SQL query builder for PostgreSQL",{"id":2583,"title":1614,"titles":2584,"content":2585,"level":107},"/v0.0.14/overview#overview",[],"SQL query builders in Go typically trust developers to provide valid identifiers. ASTQL takes a different approach: validate everything against a schema before rendering. // Define your schema\nproject := dbml.NewProject(\"myapp\")\nusers := dbml.NewTable(\"users\")\nusers.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\nusers.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\nusers.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\nproject.AddTable(users)\n\n// Create a validated instance\ninstance, _ := astql.NewFromDBML(project)\n\n// Build queries - tables and fields validated against schema\nresult, _ := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"user_id\"))).\n    Render()\n\n// result.SQL: SELECT \"username\", \"email\" FROM \"users\" WHERE \"id\" = :user_id\n// result.RequiredParams: []string{\"user_id\"} Type-safe, schema-validated, injection-resistant.",{"id":2587,"title":1237,"titles":2588,"content":2589,"level":136},"/v0.0.14/overview#architecture",[1614],"┌─────────────────────────────────────────────────────────────┐\n│                         ASTQL                               │\n│                                                             │\n│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │\n│  │    DBML     │    │   Builder   │    │   Render    │     │\n│  │   Schema    │───▶│     API     │───▶│   Engine    │     │\n│  │             │    │             │    │             │     │\n│  │  Validates  │    │  Constructs │    │  Generates  │     │\n│  │  Tables     │    │  AST Nodes  │    │  SQL + Params│    │\n│  │  Fields     │    │             │    │             │     │\n│  └─────────────┘    └─────────────┘    └─────────────┘     │\n│                                                             │\n│  ┌─────────────────────────────────────────────────────┐   │\n│  │                  Internal AST Types                  │   │\n│  │  Table, Field, Param, Condition, OrderBy, Join...   │   │\n│  └─────────────────────────────────────────────────────┘   │\n└─────────────────────────────────────────────────────────────┘ The DBML schema validates identifiers. The Builder API constructs an Abstract Syntax Tree. The Render engine produces parameterized SQL.",{"id":2591,"title":2592,"titles":2593,"content":2594,"level":136},"/v0.0.14/overview#philosophy","Philosophy",[1614],"ASTQL draws inspiration from the principle of defense in depth. Rather than trusting developers to avoid SQL injection, the library makes injection structurally difficult: Schema validation — Tables and fields must exist in your DBML schemaInstance-based API — Types cannot be constructed directlyParameterized output — Values are never interpolated into SQLQuoted identifiers — All identifiers are properly escaped // Injection attempt blocked at construction\ninstance.T(\"users; DROP TABLE users--\")  // Panics: table not in schema\ninstance.F(\"id' OR '1'='1\")              // Panics: field not in schema\ninstance.P(\"id; DELETE FROM users\")      // Panics: invalid parameter name The schema acts as an allowlist. If it's not in the schema, it can't be in the query.",{"id":2596,"title":1187,"titles":2597,"content":2598,"level":136},"/v0.0.14/overview#capabilities",[1614],"A schema-validated query builder enables: Type Safety — Fields, tables, and parameters are validated at construction time, not at execution time. Complex Queries — JOINs, subqueries, aggregates, window functions, CASE expressions—all with the same validation guarantees. PostgreSQL Features — RETURNING, ON CONFLICT, DISTINCT ON, row locking, pgvector operators. Composability — Build queries programmatically. Combine conditions. Nest subqueries. ASTQL provides the query building layer. Execution is handled by sqlx or your database driver of choice.",{"id":2600,"title":2601,"titles":2602,"content":99,"level":136},"/v0.0.14/overview#priorities","Priorities",[1614],{"id":2604,"title":1782,"titles":2605,"content":2606,"level":155},"/v0.0.14/overview#security",[1614,2601],"SQL injection is prevented through multiple layers: LayerProtectionSchema validationTables/fields must exist in DBMLIdentifier validationAlphanumeric + underscore onlyKeyword blockingRejects ;, --, ', SQL keywordsQuoted identifiersPostgreSQL double-quote escapingParameterized queriesNamed parameters, never interpolation",{"id":2608,"title":2609,"titles":2610,"content":2611,"level":155},"/v0.0.14/overview#ergonomics","Ergonomics",[1614,2601],"The fluent builder API reads naturally: astql.Select(table).\n    Fields(field1, field2).\n    Where(condition).\n    OrderBy(field1, astql.ASC).\n    Limit(10).\n    Render() Method chaining. Compile-time errors for invalid operations. Clear separation between building and rendering.",{"id":2613,"title":2614,"titles":2615,"content":2616,"level":155},"/v0.0.14/overview#postgresql-focus","PostgreSQL Focus",[1614,2601],"ASTQL is PostgreSQL-first. Features like RETURNING, ON CONFLICT, DISTINCT ON, and pgvector operators work out of the box. The output uses PostgreSQL-style quoted identifiers and named parameters compatible with sqlx. html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":2618,"title":1628,"titles":2619,"content":2620,"level":107},"/v0.0.14/learn/quickstart",[],"Get started with astql in minutes",{"id":2622,"title":1628,"titles":2623,"content":99,"level":107},"/v0.0.14/learn/quickstart#quickstart",[],{"id":2625,"title":2626,"titles":2627,"content":2628,"level":136},"/v0.0.14/learn/quickstart#requirements","Requirements",[1628],"Go 1.23 or later.",{"id":2630,"title":2631,"titles":2632,"content":2633,"level":136},"/v0.0.14/learn/quickstart#installation","Installation",[1628],"go get github.com/zoobzio/astql\ngo get github.com/zoobzio/dbml",{"id":2635,"title":2636,"titles":2637,"content":2638,"level":136},"/v0.0.14/learn/quickstart#basic-usage","Basic Usage",[1628],"package main\n\nimport (\n    \"fmt\"\n    \"github.com/zoobzio/astql\"\n    \"github.com/zoobzio/dbml\"\n)\n\nfunc main() {\n    // 1. Define your schema\n    project := dbml.NewProject(\"myapp\")\n\n    users := dbml.NewTable(\"users\")\n    users.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\n    users.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"active\", \"boolean\"))\n    project.AddTable(users)\n\n    // 2. Create an ASTQL instance\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n\n    // 3. Build a query\n    result, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"username\"), instance.F(\"email\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        OrderBy(instance.F(\"username\"), astql.ASC).\n        Limit(10).\n        Render()\n\n    if err != nil {\n        panic(err)\n    }\n\n    fmt.Println(result.SQL)\n    // SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active ORDER BY \"username\" ASC LIMIT 10\n\n    fmt.Println(result.RequiredParams)\n    // [is_active]\n}",{"id":2640,"title":2641,"titles":2642,"content":2643,"level":136},"/v0.0.14/learn/quickstart#whats-happening","What's Happening",[1628],"dbml.NewProject creates a schema definitiondbml.NewTable and AddColumn define your table structureastql.NewFromDBML creates a validated instance bound to your schemainstance.T, instance.F, instance.P create validated referencesastql.Select starts a query builder chain.Render() produces SQL and a list of required parameters",{"id":2645,"title":2646,"titles":2647,"content":2648,"level":136},"/v0.0.14/learn/quickstart#using-with-sqlx","Using with sqlx",[1628],"The output is designed for use with sqlx named queries: result, _ := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n    Render()\n\n// Execute with sqlx\nparams := map[string]any{\"is_active\": true}\nrows, err := db.NamedQuery(result.SQL, params) html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":2650,"title":2651,"titles":2652,"content":2653,"level":107},"/v0.0.14/learn/concepts","Core Concepts",[],"Tables, fields, params, conditions, and builders - the building blocks of astql",{"id":2655,"title":2651,"titles":2656,"content":2657,"level":107},"/v0.0.14/learn/concepts#core-concepts",[],"ASTQL has five primitives: tables, fields, params, conditions, and builders. Understanding these unlocks the full API.",{"id":2659,"title":2660,"titles":2661,"content":2662,"level":136},"/v0.0.14/learn/concepts#tables","Tables",[2651],"A table represents a database table. Create tables through an ASTQL instance: users := instance.T(\"users\") Tables can have single-letter aliases for JOINs: users := instance.T(\"users\", \"u\")  // \"users\" aliased as \"u\"\nposts := instance.T(\"posts\", \"p\")  // \"posts\" aliased as \"p\" Aliases must be single lowercase letters (a-z). This restriction prevents injection through alias names. instance.T(\"users\", \"u\")           // Valid\ninstance.T(\"users\", \"users_alias\") // Panics: invalid alias",{"id":2664,"title":2665,"titles":2666,"content":2667,"level":136},"/v0.0.14/learn/concepts#fields","Fields",[2651],"A field represents a column. Create fields through an ASTQL instance: email := instance.F(\"email\")\nusername := instance.F(\"username\") Fields can be prefixed with a table alias: userEmail := instance.WithTable(instance.F(\"email\"), \"u\")\n// Renders as: u.\"email\"",{"id":2669,"title":2670,"titles":2671,"content":2672,"level":155},"/v0.0.14/learn/concepts#field-validation","Field Validation",[2651,2665],"Fields are validated against the schema. Any field name must exist in at least one table: instance.F(\"email\")           // Valid if \"email\" exists in any table\ninstance.F(\"nonexistent\")     // Panics: field not found in schema",{"id":2674,"title":2675,"titles":2676,"content":2677,"level":136},"/v0.0.14/learn/concepts#params","Params",[2651],"A param represents a query parameter. All user values flow through params: emailParam := instance.P(\"email_value\")\nactiveParam := instance.P(\"is_active\") Params are rendered as named placeholders: // In SQL: WHERE \"email\" = :email_value",{"id":2679,"title":2680,"titles":2681,"content":2682,"level":155},"/v0.0.14/learn/concepts#parameter-validation","Parameter Validation",[2651,2675],"Parameter names must be valid SQL identifiers: instance.P(\"user_id\")                    // Valid\ninstance.P(\"id; DROP TABLE users--\")     // Panics: invalid parameter",{"id":2684,"title":1251,"titles":2685,"content":2686,"level":136},"/v0.0.14/learn/concepts#conditions",[2651],"Conditions represent WHERE clause predicates. Create conditions with instance.C: condition := instance.C(\n    instance.F(\"email\"),     // Field\n    astql.EQ,                // Operator\n    instance.P(\"email_val\"), // Param\n)",{"id":2688,"title":1727,"titles":2689,"content":2690,"level":155},"/v0.0.14/learn/concepts#operators",[2651,1251],"ConstantSQLDescriptionEQ=EqualsNE!=Not equalsGT>Greater thanGE>=Greater than or equalLT\u003CLess thanLE\u003C=Less than or equalLIKELIKEPattern matchILIKEILIKECase-insensitive pattern matchIN= ANY()In arrayNotIn!= ALL()Not in arrayIsNullIS NULLNull checkIsNotNullIS NOT NULLNot null check See Operators Reference for the complete list.",{"id":2692,"title":2693,"titles":2694,"content":2695,"level":155},"/v0.0.14/learn/concepts#combining-conditions","Combining Conditions",[2651,1251],"Use And and Or to combine conditions: // AND: both must be true\ninstance.And(\n    instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")),\n    instance.C(instance.F(\"verified\"), astql.EQ, instance.P(\"is_verified\")),\n)\n// Renders: (\"active\" = :is_active AND \"verified\" = :is_verified)\n\n// OR: either must be true\ninstance.Or(\n    instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"admin_role\")),\n    instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"mod_role\")),\n)\n// Renders: (\"role\" = :admin_role OR \"role\" = :mod_role)",{"id":2697,"title":2698,"titles":2699,"content":2700,"level":155},"/v0.0.14/learn/concepts#nested-conditions","Nested Conditions",[2651,1251],"Conditions can be nested arbitrarily: instance.And(\n    instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")),\n    instance.Or(\n        instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"admin\")),\n        instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"mod\")),\n    ),\n)\n// Renders: (\"active\" = :is_active AND (\"role\" = :admin OR \"role\" = :mod))",{"id":2702,"title":2703,"titles":2704,"content":2705,"level":155},"/v0.0.14/learn/concepts#null-conditions","NULL Conditions",[2651,1251],"Use Null and NotNull for NULL checks: instance.Null(instance.F(\"deleted_at\"))     // \"deleted_at\" IS NULL\ninstance.NotNull(instance.F(\"verified_at\")) // \"verified_at\" IS NOT NULL",{"id":2707,"title":2708,"titles":2709,"content":2710,"level":155},"/v0.0.14/learn/concepts#field-comparisons","Field Comparisons",[2651,1251],"Compare two fields directly with CF: astql.CF(\n    instance.F(\"created_at\"),\n    astql.LT,\n    instance.F(\"updated_at\"),\n)\n// Renders: \"created_at\" \u003C \"updated_at\"",{"id":2712,"title":2713,"titles":2714,"content":2715,"level":136},"/v0.0.14/learn/concepts#builders","Builders",[2651],"Builders construct queries through method chaining. Each operation type has its own entry point: astql.Select(table)   // SELECT query\nastql.Insert(table)   // INSERT query\nastql.Update(table)   // UPDATE query\nastql.Delete(table)   // DELETE query\nastql.Count(table)    // SELECT COUNT(*) query",{"id":2717,"title":2718,"titles":2719,"content":2720,"level":155},"/v0.0.14/learn/concepts#fluent-api","Fluent API",[2651,2713],"Methods return the builder for chaining: result, err := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(condition).\n    OrderBy(instance.F(\"username\"), astql.ASC).\n    Limit(10).\n    Offset(20).\n    Render()",{"id":2722,"title":2723,"titles":2724,"content":2725,"level":155},"/v0.0.14/learn/concepts#build-vs-render","Build vs Render",[2651,2713],"Build() returns the AST for inspection or modificationRender() produces the final SQL and parameter list // Get the AST\nast, err := query.Build()\n\n// Get SQL output\nresult, err := query.Render()",{"id":2727,"title":2728,"titles":2729,"content":2730,"level":155},"/v0.0.14/learn/concepts#must-variants","Must Variants",[2651,2713],"MustBuild and MustRender panic on error instead of returning it: result := query.MustRender()  // Panics if invalid",{"id":2732,"title":2733,"titles":2734,"content":2735,"level":136},"/v0.0.14/learn/concepts#try-variants","Try Variants",[2651],"All instance methods have Try variants that return errors instead of panicking: // Panics on invalid input\ntable := instance.T(\"users\")\nfield := instance.F(\"email\")\nparam := instance.P(\"value\")\n\n// Returns error on invalid input\ntable, err := instance.TryT(\"users\")\nfield, err := instance.TryF(\"email\")\nparam, err := instance.TryP(\"value\") Use Try variants when handling user input or dynamic field names.",{"id":2737,"title":2738,"titles":2739,"content":2740,"level":136},"/v0.0.14/learn/concepts#query-result","Query Result",[2651],"Render() returns a QueryResult: type QueryResult struct {\n    SQL            string   // The rendered SQL query\n    RequiredParams []string // Parameter names that must be provided\n} The RequiredParams slice lists all parameters in order of appearance. Use this to validate that all required values are provided before execution. html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}",{"id":2742,"title":1237,"titles":2743,"content":2744,"level":107},"/v0.0.14/learn/architecture",[],"AST structure, render pipeline, and security layers",{"id":2746,"title":1237,"titles":2747,"content":2748,"level":107},"/v0.0.14/learn/architecture#architecture",[],"ASTQL uses a three-stage pipeline: validation, AST construction, and rendering.",{"id":2750,"title":2751,"titles":2752,"content":2753,"level":136},"/v0.0.14/learn/architecture#pipeline-overview","Pipeline Overview",[1237],"┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐\n│    Input     │    │  Validation  │    │     AST      │    │    Output    │\n│              │    │              │    │              │    │              │\n│  Table name  │───▶│ DBML schema  │───▶│  AST nodes   │───▶│  SQL string  │\n│  Field name  │    │ Identifier   │    │  constructed │    │  Param list  │\n│  Param name  │    │ SQL keywords │    │              │    │              │\n└──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘ Each stage has a specific responsibility: Validation — Reject invalid identifiers before they enter the systemAST Construction — Build a tree of query componentsRendering — Convert the AST to SQL with proper escaping",{"id":2755,"title":2756,"titles":2757,"content":99,"level":136},"/v0.0.14/learn/architecture#validation-layer","Validation Layer",[1237],{"id":2759,"title":1215,"titles":2760,"content":2761,"level":155},"/v0.0.14/learn/architecture#schema-validation",[1237,2756],"Tables and fields are validated against the DBML schema: instance, _ := astql.NewFromDBML(project)\n\ninstance.T(\"users\")       // Checks: does \"users\" table exist?\ninstance.F(\"email\")       // Checks: does \"email\" field exist in any table? The schema acts as an allowlist. If a table or field isn't defined, it can't be used in queries.",{"id":2763,"title":2764,"titles":2765,"content":2766,"level":155},"/v0.0.14/learn/architecture#identifier-validation","Identifier Validation",[1237,2756],"All identifiers (tables, fields, params, aliases) pass through identifier validation: func isValidSQLIdentifier(s string) bool {\n    // Must start with letter or underscore\n    // Rest must be alphanumeric or underscore\n    // No SQL keywords or suspicious patterns\n} Blocked patterns include: SQL comment markers: --, /*, */String delimiters: ', \", `Statement terminators: ;SQL keywords in context: OR, AND, DROP, DELETE, etc.",{"id":2768,"title":2769,"titles":2770,"content":2771,"level":155},"/v0.0.14/learn/architecture#alias-restrictions","Alias Restrictions",[1237,2756],"Table aliases are restricted to single lowercase letters: instance.T(\"users\", \"u\")  // Valid\ninstance.T(\"users\", \"ab\") // Invalid: must be single letter This prevents injection through alias names while providing enough aliases for complex joins.",{"id":2773,"title":2774,"titles":2775,"content":2776,"level":136},"/v0.0.14/learn/architecture#ast-structure","AST Structure",[1237],"The Abstract Syntax Tree represents a query as nested Go structs: type AST struct {\n    Operation    Operation              // SELECT, INSERT, UPDATE, DELETE, COUNT\n    Target       Table                  // Main table\n    Fields       []Field                // Selected fields\n    WhereClause  ConditionItem          // WHERE conditions\n    Joins        []Join                 // JOIN clauses\n    GroupBy      []Field                // GROUP BY fields\n    Having       []ConditionItem        // HAVING conditions\n    Ordering     []OrderBy              // ORDER BY clauses\n    Limit        *int                   // LIMIT value\n    Offset       *int                   // OFFSET value\n    // ... additional fields for INSERT, UPDATE, etc.\n}",{"id":2778,"title":2779,"titles":2780,"content":2781,"level":155},"/v0.0.14/learn/architecture#internal-types","Internal Types",[1237,2774],"Core types are defined in internal/types: internal/types/\n├── ast.go        # AST struct and validation\n├── table.go      # Table type\n├── field.go      # Field type\n├── param.go      # Param type\n├── condition.go  # Condition types (simple, group, comparison)\n└── operator.go   # Operator constants These types are internal to prevent direct construction. All access goes through the instance API.",{"id":2783,"title":2784,"titles":2785,"content":2786,"level":155},"/v0.0.14/learn/architecture#condition-types","Condition Types",[1237,2774],"Conditions support multiple patterns: // Simple condition: field op param\ntype Condition struct {\n    Field    Field\n    Operator Operator\n    Value    Param\n}\n\n// Condition group: AND/OR of conditions\ntype ConditionGroup struct {\n    Logic      Logic           // AND or OR\n    Conditions []ConditionItem\n}\n\n// Field comparison: field op field\ntype FieldComparison struct {\n    LeftField  Field\n    Operator   Operator\n    RightField Field\n}\n\n// Subquery condition: field IN (subquery)\ntype SubqueryCondition struct {\n    Field    *Field\n    Operator Operator\n    Subquery Subquery\n}",{"id":2788,"title":2789,"titles":2790,"content":2791,"level":136},"/v0.0.14/learn/architecture#render-engine","Render Engine",[1237],"The render engine converts AST nodes to SQL strings.",{"id":2793,"title":2794,"titles":2795,"content":2796,"level":155},"/v0.0.14/learn/architecture#identifier-quoting","Identifier Quoting",[1237,2789],"All identifiers are quoted using PostgreSQL double-quote syntax: func quoteIdentifier(name string) string {\n    escaped := strings.ReplaceAll(name, `\"`, `\"\"`)\n    return `\"` + escaped + `\"`\n} This handles reserved words and special characters safely.",{"id":2798,"title":2799,"titles":2800,"content":2801,"level":155},"/v0.0.14/learn/architecture#parameter-placeholders","Parameter Placeholders",[1237,2789],"Parameters are rendered as named placeholders: func (ctx *renderContext) addParam(param Param) string {\n    placeholder := \":\" + param.Name\n    // Track for RequiredParams list\n    return placeholder\n} The output uses :param_name syntax compatible with sqlx.",{"id":2803,"title":2804,"titles":2805,"content":2806,"level":155},"/v0.0.14/learn/architecture#parameter-namespacing","Parameter Namespacing",[1237,2789],"Parameters are prefixed to prevent collisions in complex queries. Nested subqueries (IN, EXISTS, etc.): // Main query: :user_id\n// First subquery (depth 1): :sq1_user_id\n// Nested subquery (depth 2): :sq2_user_id\n// Nested subquery (depth 3): :sq3_user_id Maximum subquery depth is 3 levels. Compound queries (UNION, INTERSECT, EXCEPT): // Base query: :q0_user_id\n// Second query: :q1_user_id\n// Third query: :q2_user_id Each query in a compound operation gets its own q{n}_ prefix. Subqueries within compound queries still use sq{n}_ prefixes relative to their containing query.",{"id":2808,"title":2809,"titles":2810,"content":2811,"level":136},"/v0.0.14/learn/architecture#file-structure","File Structure",[1237],"astql/\n├── api.go           # Public types and package docs\n├── builder.go       # Query builders (Select, Insert, Update, Delete)\n├── expressions.go   # Expression helpers (Sum, Case, Window, etc.)\n├── instance.go      # ASTQL instance and validation\n├── render.go        # SQL rendering engine\n└── internal/types/  # Internal AST types\n    ├── ast.go\n    ├── condition.go\n    ├── field.go\n    ├── operator.go\n    ├── param.go\n    └── table.go",{"id":2813,"title":2814,"titles":2815,"content":2816,"level":136},"/v0.0.14/learn/architecture#security-layers","Security Layers",[1237],"Defense in depth through multiple layers: LayerWhat It BlocksSchema validationUnknown tables/fieldsIdentifier validationSpecial characters, SQL keywordsAlias restrictionsMulti-character aliasesQuoted identifiersReserved words, special charsParameterized queriesValue injectionSubquery depth limitsRecursive attacks Each layer provides independent protection. An attacker would need to bypass all layers to inject SQL.",{"id":2818,"title":2819,"titles":2820,"content":99,"level":136},"/v0.0.14/learn/architecture#extension-points","Extension Points",[1237],{"id":2822,"title":2823,"titles":2824,"content":2825,"level":155},"/v0.0.14/learn/architecture#custom-expressions","Custom Expressions",[1237,2819],"Add field expressions for aggregates, math functions, window functions: astql.Sum(field)                    // SUM(\"field\")\nastql.Round(field)                  // ROUND(\"field\")\nastql.Round(field, precision)       // ROUND(\"field\", :precision)\nastql.RowNumber().Over(spec).As(\"rank\")  // ROW_NUMBER() OVER (...) AS \"rank\"",{"id":2827,"title":2828,"titles":2829,"content":2830,"level":155},"/v0.0.14/learn/architecture#compound-queries","Compound Queries",[1237,2819],"Set operations combine queries: query1.Union(query2).OrderBy(field, astql.ASC)\n// (SELECT ...) UNION (SELECT ...) ORDER BY \"field\" ASC",{"id":2832,"title":2833,"titles":2834,"content":2835,"level":155},"/v0.0.14/learn/architecture#direct-ast-access","Direct AST Access",[1237,2819],"For advanced use cases, access the AST directly: ast, _ := query.Build()\n// Inspect or modify ast\nresult, _ := astql.Render(ast) html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}",{"id":2837,"title":1215,"titles":2838,"content":2839,"level":107},"/v0.0.14/guides/schema-validation",[],"DBML integration and validation patterns",{"id":2841,"title":1215,"titles":2842,"content":2843,"level":107},"/v0.0.14/guides/schema-validation#schema-validation",[],"ASTQL validates queries against a DBML schema. This guide covers schema setup, validation behavior, and error handling.",{"id":2845,"title":2846,"titles":2847,"content":2848,"level":136},"/v0.0.14/guides/schema-validation#defining-a-schema","Defining a Schema",[1215],"Create a DBML project with tables and columns: import \"github.com/zoobzio/dbml\"\n\nproject := dbml.NewProject(\"myapp\")\n\n// Users table\nusers := dbml.NewTable(\"users\")\nusers.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\nusers.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\nusers.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\nusers.AddColumn(dbml.NewColumn(\"active\", \"boolean\"))\nusers.AddColumn(dbml.NewColumn(\"created_at\", \"timestamp\"))\nproject.AddTable(users)\n\n// Posts table\nposts := dbml.NewTable(\"posts\")\nposts.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\nposts.AddColumn(dbml.NewColumn(\"user_id\", \"bigint\"))\nposts.AddColumn(dbml.NewColumn(\"title\", \"varchar\"))\nposts.AddColumn(dbml.NewColumn(\"content\", \"text\"))\nposts.AddColumn(dbml.NewColumn(\"published\", \"boolean\"))\nproject.AddTable(posts)",{"id":2850,"title":2851,"titles":2852,"content":2853,"level":136},"/v0.0.14/guides/schema-validation#creating-an-instance","Creating an Instance",[1215],"Bind the schema to an ASTQL instance: instance, err := astql.NewFromDBML(project)\nif err != nil {\n    return err\n} The instance caches table and field lookups for fast validation.",{"id":2855,"title":2856,"titles":2857,"content":99,"level":136},"/v0.0.14/guides/schema-validation#validation-behavior","Validation Behavior",[1215],{"id":2859,"title":2860,"titles":2861,"content":2862,"level":155},"/v0.0.14/guides/schema-validation#table-validation","Table Validation",[1215,2856],"Tables must exist in the schema: instance.T(\"users\")        // Valid: table exists\ninstance.T(\"nonexistent\")  // Panics: table not found",{"id":2864,"title":2670,"titles":2865,"content":2866,"level":155},"/v0.0.14/guides/schema-validation#field-validation",[1215,2856],"Fields must exist in at least one table: instance.F(\"email\")        // Valid: exists in users table\ninstance.F(\"title\")        // Valid: exists in posts table\ninstance.F(\"foo\")          // Panics: field not found Fields are validated by name only, not by table association. This allows using the same field name across tables in JOINs.",{"id":2868,"title":2680,"titles":2869,"content":2870,"level":155},"/v0.0.14/guides/schema-validation#parameter-validation",[1215,2856],"Parameters must be valid SQL identifiers: instance.P(\"user_id\")      // Valid\ninstance.P(\"email123\")     // Valid\ninstance.P(\"invalid-name\") // Panics: contains hyphen\ninstance.P(\"1starts\")      // Panics: starts with number",{"id":2872,"title":2873,"titles":2874,"content":2875,"level":136},"/v0.0.14/guides/schema-validation#panic-vs-error","Panic vs Error",[1215],"By default, validation failures panic. This catches errors early during development: // These panic on invalid input\ntable := instance.T(\"users\")\nfield := instance.F(\"email\")\nparam := instance.P(\"value\")",{"id":2877,"title":2733,"titles":2878,"content":2879,"level":155},"/v0.0.14/guides/schema-validation#try-variants",[1215,2873],"For runtime validation with user input, use Try variants: table, err := instance.TryT(tableName)\nif err != nil {\n    return fmt.Errorf(\"invalid table: %w\", err)\n}\n\nfield, err := instance.TryF(fieldName)\nif err != nil {\n    return fmt.Errorf(\"invalid field: %w\", err)\n}\n\nparam, err := instance.TryP(paramName)\nif err != nil {\n    return fmt.Errorf(\"invalid param: %w\", err)\n}",{"id":2881,"title":2882,"titles":2883,"content":2884,"level":155},"/v0.0.14/guides/schema-validation#when-to-use-each","When to Use Each",[1215,2873],"ScenarioUseStatic field names in codeinstance.F(\"email\")User-provided field namesinstance.TryF(userInput)Configuration-driven queriesinstance.TryT(config.TableName)TestsEither works",{"id":2886,"title":2887,"titles":2888,"content":2889,"level":136},"/v0.0.14/guides/schema-validation#table-aliases","Table Aliases",[1215],"Table aliases enable JOINs with field disambiguation: users := instance.T(\"users\", \"u\")  // Alias: u\nposts := instance.T(\"posts\", \"p\")  // Alias: p",{"id":2891,"title":2769,"titles":2892,"content":2893,"level":155},"/v0.0.14/guides/schema-validation#alias-restrictions",[1215,2887],"Aliases must be single lowercase letters (a-z): instance.T(\"users\", \"u\")     // Valid\ninstance.T(\"users\", \"x\")     // Valid\ninstance.T(\"users\", \"ab\")    // Panics: not single letter\ninstance.T(\"users\", \"U\")     // Panics: not lowercase\ninstance.T(\"users\", \"1\")     // Panics: not a letter This restriction prevents SQL injection through alias names.",{"id":2895,"title":2896,"titles":2897,"content":2898,"level":155},"/v0.0.14/guides/schema-validation#using-aliases-with-fields","Using Aliases with Fields",[1215,2887],"Prefix fields with their table alias: users := instance.T(\"users\", \"u\")\nposts := instance.T(\"posts\", \"p\")\n\n// Fields with table prefix\nuserID := instance.WithTable(instance.F(\"id\"), \"u\")      // u.\"id\"\npostUserID := instance.WithTable(instance.F(\"user_id\"), \"p\") // p.\"user_id\"",{"id":2900,"title":2901,"titles":2902,"content":99,"level":136},"/v0.0.14/guides/schema-validation#schema-organization","Schema Organization",[1215],{"id":2904,"title":2905,"titles":2906,"content":2907,"level":155},"/v0.0.14/guides/schema-validation#single-schema-instance","Single Schema Instance",[1215,2901],"Create one instance per schema and reuse it: // In a package-level variable or dependency injection\nvar db *astql.ASTQL\n\nfunc init() {\n    project := buildSchema()\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n    db = instance\n}\n\nfunc GetUsers() (*astql.QueryResult, error) {\n    return astql.Select(db.T(\"users\")).\n        Fields(db.F(\"username\"), db.F(\"email\")).\n        Render()\n}",{"id":2909,"title":2910,"titles":2911,"content":2912,"level":155},"/v0.0.14/guides/schema-validation#multiple-schemas","Multiple Schemas",[1215,2901],"For microservices with different database schemas: var (\n    usersDB    *astql.ASTQL  // User service schema\n    ordersDB   *astql.ASTQL  // Order service schema\n    analyticsDB *astql.ASTQL // Analytics schema\n) Each instance validates against its own schema independently.",{"id":2914,"title":2915,"titles":2916,"content":99,"level":136},"/v0.0.14/guides/schema-validation#dynamic-queries","Dynamic Queries",[1215],{"id":2918,"title":2919,"titles":2920,"content":2921,"level":155},"/v0.0.14/guides/schema-validation#safe-dynamic-field-selection","Safe Dynamic Field Selection",[1215,2915],"func SelectFields(instance *astql.ASTQL, tableName string, fieldNames []string) (*astql.QueryResult, error) {\n    table, err := instance.TryT(tableName)\n    if err != nil {\n        return nil, err\n    }\n\n    // Use instance.Fields() to get a typed slice\n    fields := instance.Fields()\n    for _, name := range fieldNames {\n        field, err := instance.TryF(name)\n        if err != nil {\n            return nil, fmt.Errorf(\"invalid field %q: %w\", name, err)\n        }\n        fields = append(fields, field)\n    }\n\n    return astql.Select(table).Fields(fields...).Render()\n}",{"id":2923,"title":2924,"titles":2925,"content":2926,"level":155},"/v0.0.14/guides/schema-validation#dynamic-conditions","Dynamic Conditions",[1215,2915],"func BuildFilter(instance *astql.ASTQL, filters map[string]string) (astql.ConditionItem, error) {\n    // Use instance.ConditionItems() to get a typed slice\n    conditions := instance.ConditionItems()\n\n    for fieldName, paramName := range filters {\n        field, err := instance.TryF(fieldName)\n        if err != nil {\n            return nil, err\n        }\n        param, err := instance.TryP(paramName)\n        if err != nil {\n            return nil, err\n        }\n        conditions = append(conditions, instance.C(field, astql.EQ, param))\n    }\n\n    if len(conditions) == 0 {\n        return nil, nil\n    }\n    if len(conditions) == 1 {\n        return conditions[0], nil\n    }\n    return instance.And(conditions...), nil\n}",{"id":2928,"title":2929,"titles":2930,"content":99,"level":136},"/v0.0.14/guides/schema-validation#validation-errors","Validation Errors",[1215],{"id":2932,"title":2933,"titles":2934,"content":2935,"level":155},"/v0.0.14/guides/schema-validation#error-types","Error Types",[1215,2929],"ErrorCausetable 'X' not found in schemaTable doesn't exist in DBMLfield 'X' not found in schemaField doesn't exist in any tableinvalid parameter name: XParameter contains invalid charactersalias must be single lowercase letterTable alias is not a-z",{"id":2937,"title":2938,"titles":2939,"content":2940,"level":155},"/v0.0.14/guides/schema-validation#handling-errors","Handling Errors",[1215,2929],"result, err := query.Render()\nif err != nil {\n    switch {\n    case strings.Contains(err.Error(), \"not found in schema\"):\n        // Schema mismatch - likely a bug or migration issue\n        log.Error(\"schema validation failed\", \"error\", err)\n    case strings.Contains(err.Error(), \"invalid\"):\n        // Invalid input\n        return nil, fmt.Errorf(\"invalid query: %w\", err)\n    default:\n        return nil, err\n    }\n} html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":2942,"title":1251,"titles":2943,"content":2944,"level":107},"/v0.0.14/guides/conditions",[],"WHERE clauses, AND/OR logic, subqueries, and BETWEEN",{"id":2946,"title":1251,"titles":2947,"content":2948,"level":107},"/v0.0.14/guides/conditions#conditions",[],"Conditions define the WHERE clause of your queries. ASTQL provides type-safe condition building with support for complex logic.",{"id":2950,"title":2951,"titles":2952,"content":2953,"level":136},"/v0.0.14/guides/conditions#basic-conditions","Basic Conditions",[1251],"Create a condition with field, operator, and parameter: condition := instance.C(\n    instance.F(\"email\"),     // Field\n    astql.EQ,                // Operator\n    instance.P(\"email_val\"), // Parameter\n)\n\nresult, _ := astql.Select(instance.T(\"users\")).\n    Where(condition).\n    Render()\n// SELECT * FROM \"users\" WHERE \"email\" = :email_val",{"id":2955,"title":1727,"titles":2956,"content":99,"level":136},"/v0.0.14/guides/conditions#operators",[1251],{"id":2958,"title":2959,"titles":2960,"content":2961,"level":155},"/v0.0.14/guides/conditions#comparison-operators","Comparison Operators",[1251,1727],"ConstantSQLExampleEQ=\"age\" = :ageNE!=\"status\" != :statusGT>\"price\" > :minGE>=\"score\" >= :thresholdLT\u003C\"date\" \u003C :cutoffLE\u003C=\"count\" \u003C= :max",{"id":2963,"title":2964,"titles":2965,"content":2966,"level":155},"/v0.0.14/guides/conditions#pattern-matching","Pattern Matching",[1251,1727],"ConstantSQLExampleLIKELIKE\"name\" LIKE :patternNotLikeNOT LIKE\"name\" NOT LIKE :patternILIKEILIKE\"name\" ILIKE :pattern (case-insensitive)NotILikeNOT ILIKE\"name\" NOT ILIKE :pattern",{"id":2968,"title":2969,"titles":2970,"content":2971,"level":155},"/v0.0.14/guides/conditions#null-checks","NULL Checks",[1251,1727],"// IS NULL\ninstance.Null(instance.F(\"deleted_at\"))\n// \"deleted_at\" IS NULL\n\n// IS NOT NULL\ninstance.NotNull(instance.F(\"verified_at\"))\n// \"verified_at\" IS NOT NULL",{"id":2973,"title":2974,"titles":2975,"content":2976,"level":155},"/v0.0.14/guides/conditions#array-operators","Array Operators",[1251,1727],"// IN (uses PostgreSQL ANY)\ninstance.C(instance.F(\"id\"), astql.IN, instance.P(\"ids\"))\n// \"id\" = ANY(:ids)\n\n// NOT IN (uses PostgreSQL ALL)\ninstance.C(instance.F(\"status\"), astql.NotIn, instance.P(\"excluded\"))\n// \"status\" != ALL(:excluded) When executing with sqlx, wrap slices with pq.Array(): params := map[string]any{\n    \"ids\": pq.Array([]int{1, 2, 3}),\n}",{"id":2978,"title":2693,"titles":2979,"content":99,"level":136},"/v0.0.14/guides/conditions#combining-conditions",[1251],{"id":2981,"title":2982,"titles":2983,"content":2984,"level":155},"/v0.0.14/guides/conditions#and","AND",[1251,2693],"All conditions must be true: instance.And(\n    instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")),\n    instance.C(instance.F(\"verified\"), astql.EQ, instance.P(\"is_verified\")),\n)\n// (\"active\" = :is_active AND \"verified\" = :is_verified)",{"id":2986,"title":2987,"titles":2988,"content":2989,"level":155},"/v0.0.14/guides/conditions#or","OR",[1251,2693],"At least one condition must be true: instance.Or(\n    instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"admin\")),\n    instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"moderator\")),\n)\n// (\"role\" = :admin OR \"role\" = :moderator)",{"id":2991,"title":2992,"titles":2993,"content":2994,"level":155},"/v0.0.14/guides/conditions#nested-logic","Nested Logic",[1251,2693],"Combine AND and OR for complex conditions: instance.And(\n    instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")),\n    instance.Or(\n        instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"admin\")),\n        instance.And(\n            instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"user\")),\n            instance.C(instance.F(\"verified\"), astql.EQ, instance.P(\"is_verified\")),\n        ),\n    ),\n)\n// (\"active\" = :is_active AND (\"role\" = :admin OR (\"role\" = :user AND \"verified\" = :is_verified)))",{"id":2996,"title":2997,"titles":2998,"content":2999,"level":136},"/v0.0.14/guides/conditions#between","BETWEEN",[1251],"Use Between and NotBetween for range conditions: // BETWEEN\nastql.Between(\n    instance.F(\"price\"),\n    instance.P(\"min_price\"),\n    instance.P(\"max_price\"),\n)\n// \"price\" BETWEEN :min_price AND :max_price\n\n// NOT BETWEEN\nastql.NotBetween(\n    instance.F(\"date\"),\n    instance.P(\"start\"),\n    instance.P(\"end\"),\n)\n// \"date\" NOT BETWEEN :start AND :end",{"id":3001,"title":2708,"titles":3002,"content":3003,"level":136},"/v0.0.14/guides/conditions#field-comparisons",[1251],"Compare two fields directly: astql.CF(\n    instance.F(\"updated_at\"),\n    astql.GT,\n    instance.F(\"created_at\"),\n)\n// \"updated_at\" > \"created_at\" Useful for: Comparing timestampsSelf-referential conditionsCross-table comparisons in JOINs",{"id":3005,"title":3006,"titles":3007,"content":99,"level":136},"/v0.0.14/guides/conditions#subqueries","Subqueries",[1251],{"id":3009,"title":3010,"titles":3011,"content":3012,"level":155},"/v0.0.14/guides/conditions#in-subquery","IN Subquery",[1251,3006],"subquery := astql.Sub(\n    astql.Select(instance.T(\"orders\")).\n        Fields(instance.F(\"user_id\")).\n        Where(instance.C(instance.F(\"total\"), astql.GT, instance.P(\"min_total\"))),\n)\n\nresult, _ := astql.Select(instance.T(\"users\")).\n    Where(astql.CSub(instance.F(\"id\"), astql.IN, subquery)).\n    Render()\n\n// SELECT * FROM \"users\"\n// WHERE \"id\" IN (SELECT \"user_id\" FROM \"orders\" WHERE \"total\" > :sq1_min_total)",{"id":3014,"title":3015,"titles":3016,"content":3017,"level":155},"/v0.0.14/guides/conditions#not-in-subquery","NOT IN Subquery",[1251,3006],"astql.CSub(instance.F(\"id\"), astql.NotIn, subquery)\n// \"id\" NOT IN (SELECT ...)",{"id":3019,"title":3020,"titles":3021,"content":3022,"level":155},"/v0.0.14/guides/conditions#exists","EXISTS",[1251,3006],"subquery := astql.Sub(\n    astql.Select(instance.T(\"orders\")).\n        Fields(instance.F(\"id\")).\n        Where(astql.CF(\n            instance.WithTable(instance.F(\"user_id\"), \"o\"),\n            astql.EQ,\n            instance.WithTable(instance.F(\"id\"), \"u\"),\n        )),\n)\n\nresult, _ := astql.Select(instance.T(\"users\", \"u\")).\n    Where(astql.CSubExists(astql.EXISTS, subquery)).\n    Render()\n\n// SELECT * FROM \"users\" u\n// WHERE EXISTS (SELECT \"id\" FROM \"orders\" WHERE o.\"user_id\" = u.\"id\")",{"id":3024,"title":3025,"titles":3026,"content":3027,"level":155},"/v0.0.14/guides/conditions#not-exists","NOT EXISTS",[1251,3006],"astql.CSubExists(astql.NotExists, subquery)\n// NOT EXISTS (SELECT ...)",{"id":3029,"title":2804,"titles":3030,"content":3031,"level":155},"/v0.0.14/guides/conditions#parameter-namespacing",[1251,3006],"Subquery parameters are automatically prefixed to prevent collisions: // Main query: :user_id\n// First subquery: :sq1_user_id\n// Nested subquery: :sq2_user_id Maximum subquery depth is 3 levels by default.",{"id":3033,"title":3034,"titles":3035,"content":3036,"level":136},"/v0.0.14/guides/conditions#multiple-where-clauses","Multiple WHERE Clauses",[1251],"Calling Where multiple times combines conditions with AND: query := astql.Select(instance.T(\"users\")).\n    Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n    Where(instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"role\")))\n\n// WHERE (\"active\" = :is_active AND \"role\" = :role)",{"id":3038,"title":3039,"titles":3040,"content":3041,"level":136},"/v0.0.14/guides/conditions#wherefield-shorthand","WhereField Shorthand",[1251],"For simple conditions, use WhereField: // These are equivalent:\nquery.Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"id\")))\nquery.WhereField(instance.F(\"id\"), astql.EQ, instance.P(\"id\"))",{"id":3043,"title":3044,"titles":3045,"content":3046,"level":136},"/v0.0.14/guides/conditions#building-conditions-dynamically","Building Conditions Dynamically",[1251],"func BuildConditions(instance *astql.ASTQL, filters []Filter) astql.ConditionItem {\n    if len(filters) == 0 {\n        return nil\n    }\n\n    // Use instance.ConditionItems() to get a typed slice\n    conditions := instance.ConditionItems()\n    for _, f := range filters {\n        field := instance.F(f.Field)\n        param := instance.P(f.Param)\n        conditions = append(conditions, instance.C(field, f.Operator, param))\n    }\n\n    if len(conditions) == 1 {\n        return conditions[0]\n    }\n    return instance.And(conditions...)\n} html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}",{"id":3048,"title":1265,"titles":3049,"content":3050,"level":107},"/v0.0.14/guides/joins",[],"INNER, LEFT, RIGHT, and CROSS joins",{"id":3052,"title":1265,"titles":3053,"content":3054,"level":107},"/v0.0.14/guides/joins#joins",[],"ASTQL supports all standard SQL join types with type-safe ON conditions.",{"id":3056,"title":3057,"titles":3058,"content":3059,"level":136},"/v0.0.14/guides/joins#join-types","Join Types",[1265],"MethodSQLJoin()INNER JOINInnerJoin()INNER JOINLeftJoin()LEFT JOINRightJoin()RIGHT JOINFullOuterJoin()FULL OUTER JOINCrossJoin()CROSS JOIN",{"id":3061,"title":3062,"titles":3063,"content":3064,"level":136},"/v0.0.14/guides/joins#basic-join","Basic Join",[1265],"users := instance.T(\"users\", \"u\")\nposts := instance.T(\"posts\", \"p\")\n\nresult, _ := astql.Select(users).\n    Fields(\n        instance.WithTable(instance.F(\"username\"), \"u\"),\n        instance.WithTable(instance.F(\"title\"), \"p\"),\n    ).\n    Join(posts, astql.CF(\n        instance.WithTable(instance.F(\"id\"), \"u\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"user_id\"), \"p\"),\n    )).\n    Render()\n\n// SELECT u.\"username\", p.\"title\"\n// FROM \"users\" u\n// INNER JOIN \"posts\" p ON u.\"id\" = p.\"user_id\"",{"id":3066,"title":2887,"titles":3067,"content":3068,"level":136},"/v0.0.14/guides/joins#table-aliases",[1265],"Aliases are required when the same field name exists in multiple tables: users := instance.T(\"users\", \"u\")     // Alias: u\norders := instance.T(\"orders\", \"o\")   // Alias: o\n\n// Disambiguate \"id\" field\nuserID := instance.WithTable(instance.F(\"id\"), \"u\")      // u.\"id\"\norderUserID := instance.WithTable(instance.F(\"user_id\"), \"o\") // o.\"user_id\"",{"id":3070,"title":3071,"titles":3072,"content":3073,"level":136},"/v0.0.14/guides/joins#left-join","LEFT JOIN",[1265],"Returns all rows from the left table, with NULL for non-matching right rows: result, _ := astql.Select(instance.T(\"users\", \"u\")).\n    Fields(\n        instance.WithTable(instance.F(\"username\"), \"u\"),\n        instance.WithTable(instance.F(\"title\"), \"p\"),\n    ).\n    LeftJoin(instance.T(\"posts\", \"p\"), astql.CF(\n        instance.WithTable(instance.F(\"id\"), \"u\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"user_id\"), \"p\"),\n    )).\n    Render()\n\n// SELECT u.\"username\", p.\"title\"\n// FROM \"users\" u\n// LEFT JOIN \"posts\" p ON u.\"id\" = p.\"user_id\"",{"id":3075,"title":3076,"titles":3077,"content":3078,"level":136},"/v0.0.14/guides/joins#right-join","RIGHT JOIN",[1265],"Returns all rows from the right table, with NULL for non-matching left rows: result, _ := astql.Select(instance.T(\"users\", \"u\")).\n    RightJoin(instance.T(\"posts\", \"p\"), joinCondition).\n    Render()\n\n// ... RIGHT JOIN \"posts\" p ON ...",{"id":3080,"title":3081,"titles":3082,"content":3083,"level":136},"/v0.0.14/guides/joins#full-outer-join","FULL OUTER JOIN",[1265],"Returns all rows from both tables, with NULL for non-matches: result, _ := astql.Select(instance.T(\"users\", \"u\")).\n    FullOuterJoin(instance.T(\"posts\", \"p\"), joinCondition).\n    Render()\n\n// ... FULL OUTER JOIN \"posts\" p ON ...",{"id":3085,"title":3086,"titles":3087,"content":3088,"level":136},"/v0.0.14/guides/joins#cross-join","CROSS JOIN",[1265],"Returns the Cartesian product (no ON clause): result, _ := astql.Select(instance.T(\"sizes\", \"s\")).\n    Fields(\n        instance.WithTable(instance.F(\"name\"), \"c\"),\n        instance.WithTable(instance.F(\"size\"), \"s\"),\n    ).\n    CrossJoin(instance.T(\"colors\", \"c\")).\n    Render()\n\n// SELECT c.\"name\", s.\"size\"\n// FROM \"sizes\" s\n// CROSS JOIN \"colors\" c",{"id":3090,"title":3091,"titles":3092,"content":3093,"level":136},"/v0.0.14/guides/joins#multiple-joins","Multiple Joins",[1265],"Chain multiple joins: result, _ := astql.Select(instance.T(\"orders\", \"o\")).\n    Fields(\n        instance.WithTable(instance.F(\"id\"), \"o\"),\n        instance.WithTable(instance.F(\"username\"), \"u\"),\n        instance.WithTable(instance.F(\"name\"), \"p\"),\n    ).\n    Join(instance.T(\"users\", \"u\"), astql.CF(\n        instance.WithTable(instance.F(\"user_id\"), \"o\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"id\"), \"u\"),\n    )).\n    Join(instance.T(\"products\", \"p\"), astql.CF(\n        instance.WithTable(instance.F(\"product_id\"), \"o\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"id\"), \"p\"),\n    )).\n    Render()\n\n// SELECT o.\"id\", u.\"username\", p.\"name\"\n// FROM \"orders\" o\n// INNER JOIN \"users\" u ON o.\"user_id\" = u.\"id\"\n// INNER JOIN \"products\" p ON o.\"product_id\" = p.\"id\"",{"id":3095,"title":3096,"titles":3097,"content":3098,"level":136},"/v0.0.14/guides/joins#complex-on-conditions","Complex ON Conditions",[1265],"Join conditions can use AND/OR logic: onCondition := instance.And(\n    astql.CF(\n        instance.WithTable(instance.F(\"id\"), \"u\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"user_id\"), \"p\"),\n    ),\n    instance.C(\n        instance.WithTable(instance.F(\"published\"), \"p\"),\n        astql.EQ,\n        instance.P(\"is_published\"),\n    ),\n)\n\nresult, _ := astql.Select(instance.T(\"users\", \"u\")).\n    LeftJoin(instance.T(\"posts\", \"p\"), onCondition).\n    Render()\n\n// LEFT JOIN \"posts\" p ON (u.\"id\" = p.\"user_id\" AND p.\"published\" = :is_published)",{"id":3100,"title":3101,"titles":3102,"content":3103,"level":136},"/v0.0.14/guides/joins#self-joins","Self Joins",[1265],"Join a table to itself using different aliases: employees := instance.T(\"employees\", \"e\")\nmanagers := instance.T(\"employees\", \"m\")\n\nresult, _ := astql.Select(employees).\n    Fields(\n        instance.WithTable(instance.F(\"name\"), \"e\"),\n        instance.WithTable(instance.F(\"name\"), \"m\"),\n    ).\n    LeftJoin(managers, astql.CF(\n        instance.WithTable(instance.F(\"manager_id\"), \"e\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"id\"), \"m\"),\n    )).\n    Render()\n\n// SELECT e.\"name\", m.\"name\"\n// FROM \"employees\" e\n// LEFT JOIN \"employees\" m ON e.\"manager_id\" = m.\"id\"",{"id":3105,"title":3106,"titles":3107,"content":3108,"level":136},"/v0.0.14/guides/joins#joins-with-count","Joins with COUNT",[1265],"Joins work with COUNT queries: result, _ := astql.Count(instance.T(\"users\", \"u\")).\n    Join(instance.T(\"orders\", \"o\"), astql.CF(\n        instance.WithTable(instance.F(\"id\"), \"u\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"user_id\"), \"o\"),\n    )).\n    Where(instance.C(\n        instance.WithTable(instance.F(\"status\"), \"o\"),\n        astql.EQ,\n        instance.P(\"status\"),\n    )).\n    Render()\n\n// SELECT COUNT(*) FROM \"users\" u\n// INNER JOIN \"orders\" o ON u.\"id\" = o.\"user_id\"\n// WHERE o.\"status\" = :status",{"id":3110,"title":3111,"titles":3112,"content":3113,"level":136},"/v0.0.14/guides/joins#join-validation","Join Validation",[1265],"Tables in joins are validated against the schema: // Valid: both tables exist in schema\nastql.Select(instance.T(\"users\", \"u\")).\n    Join(instance.T(\"posts\", \"p\"), condition)\n\n// Invalid: unknown table\nastql.Select(instance.T(\"users\", \"u\")).\n    Join(instance.T(\"nonexistent\", \"n\"), condition)  // Panics html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"id":3115,"title":1668,"titles":3116,"content":3117,"level":107},"/v0.0.14/guides/aggregates",[],"GROUP BY, HAVING, aggregate functions, and window functions",{"id":3119,"title":1668,"titles":3120,"content":3121,"level":107},"/v0.0.14/guides/aggregates#aggregates",[],"ASTQL supports SQL aggregate functions, GROUP BY, HAVING, and window functions.",{"id":3123,"title":3124,"titles":3125,"content":99,"level":136},"/v0.0.14/guides/aggregates#aggregate-functions","Aggregate Functions",[1668],{"id":3127,"title":3128,"titles":3129,"content":3130,"level":155},"/v0.0.14/guides/aggregates#basic-aggregates","Basic Aggregates",[1668,3124],"FunctionSQLDescriptionSum(field)SUM(\"field\")Sum of valuesAvg(field)AVG(\"field\")Average of valuesMin(field)MIN(\"field\")Minimum valueMax(field)MAX(\"field\")Maximum valueCountField(field)COUNT(\"field\")Count of non-null valuesCountDistinct(field)COUNT(DISTINCT \"field\")Count of unique values",{"id":3132,"title":3133,"titles":3134,"content":3135,"level":155},"/v0.0.14/guides/aggregates#using-aggregates","Using Aggregates",[1668,3124],"result, _ := astql.Select(instance.T(\"orders\")).\n    Fields(instance.F(\"user_id\")).\n    SelectExpr(astql.As(astql.Sum(instance.F(\"total\")), \"total_spent\")).\n    SelectExpr(astql.As(astql.CountField(instance.F(\"id\")), \"order_count\")).\n    GroupBy(instance.F(\"user_id\")).\n    Render()\n\n// SELECT \"user_id\", SUM(\"total\") AS \"total_spent\", COUNT(\"id\") AS \"order_count\"\n// FROM \"orders\"\n// GROUP BY \"user_id\"",{"id":3137,"title":3138,"titles":3139,"content":3140,"level":155},"/v0.0.14/guides/aggregates#aliases","Aliases",[1668,3124],"Use As() to add an alias: astql.As(astql.Sum(instance.F(\"amount\")), \"total_amount\")\n// SUM(\"amount\") AS \"total_amount\"",{"id":3142,"title":3143,"titles":3144,"content":3145,"level":136},"/v0.0.14/guides/aggregates#group-by","GROUP BY",[1668],"Group results by one or more fields: result, _ := astql.Select(instance.T(\"orders\")).\n    Fields(instance.F(\"user_id\"), instance.F(\"status\")).\n    SelectExpr(astql.As(astql.CountField(instance.F(\"id\")), \"count\")).\n    GroupBy(instance.F(\"user_id\"), instance.F(\"status\")).\n    Render()\n\n// SELECT \"user_id\", \"status\", COUNT(\"id\") AS \"count\"\n// FROM \"orders\"\n// GROUP BY \"user_id\", \"status\"",{"id":3147,"title":3148,"titles":3149,"content":3150,"level":136},"/v0.0.14/guides/aggregates#having","HAVING",[1668],"Filter grouped results:",{"id":3152,"title":3153,"titles":3154,"content":3155,"level":155},"/v0.0.14/guides/aggregates#simple-having","Simple HAVING",[1668,3148],"result, _ := astql.Select(instance.T(\"orders\")).\n    Fields(instance.F(\"user_id\")).\n    SelectExpr(astql.As(astql.Sum(instance.F(\"total\")), \"sum\")).\n    GroupBy(instance.F(\"user_id\")).\n    Having(instance.C(instance.F(\"total\"), astql.GT, instance.P(\"min_total\"))).\n    Render()\n\n// SELECT \"user_id\", SUM(\"total\") AS \"sum\"\n// FROM \"orders\"\n// GROUP BY \"user_id\"\n// HAVING \"total\" > :min_total",{"id":3157,"title":3158,"titles":3159,"content":3160,"level":155},"/v0.0.14/guides/aggregates#aggregate-having","Aggregate HAVING",[1668,3148],"For conditions on aggregate functions, use HavingAgg: result, _ := astql.Select(instance.T(\"orders\")).\n    Fields(instance.F(\"user_id\")).\n    SelectExpr(astql.As(astql.CountField(instance.F(\"id\")), \"order_count\")).\n    GroupBy(instance.F(\"user_id\")).\n    HavingAgg(astql.HavingCount(astql.GT, instance.P(\"min_orders\"))).\n    Render()\n\n// SELECT \"user_id\", COUNT(\"id\") AS \"order_count\"\n// FROM \"orders\"\n// GROUP BY \"user_id\"\n// HAVING COUNT(*) > :min_orders",{"id":3162,"title":3163,"titles":3164,"content":3165,"level":155},"/v0.0.14/guides/aggregates#having-helpers","HAVING Helpers",[1668,3148],"FunctionSQLHavingCount(op, param)COUNT(*) op :paramHavingCountField(field, op, param)COUNT(\"field\") op :paramHavingCountDistinct(field, op, param)COUNT(DISTINCT \"field\") op :paramHavingSum(field, op, param)SUM(\"field\") op :paramHavingAvg(field, op, param)AVG(\"field\") op :paramHavingMin(field, op, param)MIN(\"field\") op :paramHavingMax(field, op, param)MAX(\"field\") op :param",{"id":3167,"title":3168,"titles":3169,"content":3170,"level":136},"/v0.0.14/guides/aggregates#filter-clause","FILTER Clause",[1668],"PostgreSQL's FILTER clause for conditional aggregation: result, _ := astql.Select(instance.T(\"orders\")).\n    Fields(instance.F(\"user_id\")).\n    SelectExpr(astql.As(\n        astql.SumFilter(\n            instance.F(\"total\"),\n            instance.C(instance.F(\"status\"), astql.EQ, instance.P(\"completed\")),\n        ),\n        \"completed_total\",\n    )).\n    GroupBy(instance.F(\"user_id\")).\n    Render()\n\n// SELECT \"user_id\",\n//        SUM(\"total\") FILTER (WHERE \"status\" = :completed) AS \"completed_total\"\n// FROM \"orders\"\n// GROUP BY \"user_id\" Available filter variants: SumFilter(field, condition)AvgFilter(field, condition)MinFilter(field, condition)MaxFilter(field, condition)CountFieldFilter(field, condition)CountDistinctFilter(field, condition)",{"id":3172,"title":3173,"titles":3174,"content":3175,"level":136},"/v0.0.14/guides/aggregates#window-functions","Window Functions",[1668],"Window functions compute values across related rows.",{"id":3177,"title":3178,"titles":3179,"content":3180,"level":155},"/v0.0.14/guides/aggregates#basic-window-functions","Basic Window Functions",[1668,3173],"result, _ := astql.Select(instance.T(\"employees\")).\n    Fields(instance.F(\"name\"), instance.F(\"department\"), instance.F(\"salary\")).\n    SelectExpr(\n        astql.RowNumber().\n            OverBuilder(astql.Window().\n                PartitionBy(instance.F(\"department\")).\n                OrderBy(instance.F(\"salary\"), astql.DESC)).\n            As(\"rank\"),\n    ).\n    Render()\n\n// SELECT \"name\", \"department\", \"salary\",\n//        ROW_NUMBER() OVER (PARTITION BY \"department\" ORDER BY \"salary\" DESC) AS \"rank\"\n// FROM \"employees\"",{"id":3182,"title":3183,"titles":3184,"content":3185,"level":155},"/v0.0.14/guides/aggregates#window-function-types","Window Function Types",[1668,3173],"FunctionSQLRowNumber()ROW_NUMBER()Rank()RANK()DenseRank()DENSE_RANK()Ntile(param)NTILE(:param)Lag(field, offset) or Lag(field, offset, default)LAG(field, :offset) or LAG(field, :offset, :default)Lead(field, offset) or Lead(field, offset, default)LEAD(field, :offset) or LEAD(field, :offset, :default)FirstValue(field)FIRST_VALUE(field)LastValue(field)LAST_VALUE(field)",{"id":3187,"title":3188,"titles":3189,"content":3190,"level":155},"/v0.0.14/guides/aggregates#aggregate-window-functions","Aggregate Window Functions",[1668,3173],"// Running total\nastql.SumOver(instance.F(\"amount\")).\n    OverBuilder(astql.Window().\n        PartitionBy(instance.F(\"account_id\")).\n        OrderBy(instance.F(\"date\"), astql.ASC)).\n    As(\"running_total\")\n\n// SUM(\"amount\") OVER (PARTITION BY \"account_id\" ORDER BY \"date\" ASC) AS \"running_total\" Available: SumOver, AvgOver, CountOver, MinOver, MaxOver",{"id":3192,"title":3193,"titles":3194,"content":3195,"level":155},"/v0.0.14/guides/aggregates#window-specification","Window Specification",[1668,3173],"Build window specs with Window(): spec := astql.Window().\n    PartitionBy(instance.F(\"department\")).\n    OrderBy(instance.F(\"hire_date\"), astql.ASC).\n    OrderByNulls(instance.F(\"salary\"), astql.DESC, astql.NullsLast).\n    Rows(astql.FrameUnboundedPreceding, astql.FrameCurrentRow).\n    Build()",{"id":3197,"title":3198,"titles":3199,"content":3200,"level":155},"/v0.0.14/guides/aggregates#frame-bounds","Frame Bounds",[1668,3173],"ConstantSQLFrameUnboundedPrecedingUNBOUNDED PRECEDINGFrameCurrentRowCURRENT ROWFrameUnboundedFollowingUNBOUNDED FOLLOWING",{"id":3202,"title":3203,"titles":3204,"content":99,"level":136},"/v0.0.14/guides/aggregates#math-functions","Math Functions",[1668],{"id":3206,"title":3207,"titles":3208,"content":3209,"level":155},"/v0.0.14/guides/aggregates#available-functions","Available Functions",[1668,3203],"FunctionSQLRound(field) or Round(field, precision)ROUND(\"field\") or ROUND(\"field\", :precision)Floor(field)FLOOR(\"field\")Ceil(field)CEIL(\"field\")Abs(field)ABS(\"field\")Power(field, exponent)POWER(\"field\", :exponent)Sqrt(field)SQRT(\"field\")",{"id":3211,"title":3212,"titles":3213,"content":3214,"level":155},"/v0.0.14/guides/aggregates#example","Example",[1668,3203],"result, _ := astql.Select(instance.T(\"products\")).\n    SelectExpr(astql.As(astql.Round(instance.F(\"price\"), instance.P(\"decimals\")), \"rounded\")).\n    SelectExpr(astql.As(astql.Floor(instance.F(\"rating\")), \"floor_rating\")).\n    Render()\n\n// SELECT ROUND(\"price\", :decimals) AS \"rounded\",\n//        FLOOR(\"rating\") AS \"floor_rating\"\n// FROM \"products\"",{"id":3216,"title":1270,"titles":3217,"content":3218,"level":136},"/v0.0.14/guides/aggregates#case-expressions",[1668],"Conditional logic in SELECT: caseExpr := astql.Case().\n    When(\n        instance.C(instance.F(\"score\"), astql.GE, instance.P(\"high\")),\n        instance.P(\"grade_a\"),\n    ).\n    When(\n        instance.C(instance.F(\"score\"), astql.GE, instance.P(\"mid\")),\n        instance.P(\"grade_b\"),\n    ).\n    Else(instance.P(\"grade_c\")).\n    As(\"grade\").\n    Build()\n\nresult, _ := astql.Select(instance.T(\"students\")).\n    Fields(instance.F(\"name\")).\n    SelectExpr(caseExpr).\n    Render()\n\n// SELECT \"name\",\n//        CASE WHEN \"score\" >= :high THEN :grade_a\n//             WHEN \"score\" >= :mid THEN :grade_b\n//             ELSE :grade_c END AS \"grade\"\n// FROM \"students\"",{"id":3220,"title":3221,"titles":3222,"content":3223,"level":136},"/v0.0.14/guides/aggregates#type-casting","Type Casting",[1668],"Cast fields to different types: astql.Cast(instance.F(\"created_at\"), astql.CastDate)\n// CAST(\"created_at\" AS DATE) Available cast types: CastText, CastInteger, CastBigint, CastNumeric, CastBoolean, CastDate, CastTimestamp, CastTimestampTZ, CastUUID, CastJSON, CastJSONB, and more.",{"id":3225,"title":3226,"titles":3227,"content":3228,"level":136},"/v0.0.14/guides/aggregates#coalesce-and-nullif","COALESCE and NULLIF",[1668],"// COALESCE - first non-null value\nastql.Coalesce(instance.P(\"preferred\"), instance.P(\"default\"))\n// COALESCE(:preferred, :default)\n\n// NULLIF - returns NULL if values are equal\nastql.NullIf(instance.P(\"value\"), instance.P(\"sentinel\"))\n// NULLIF(:value, :sentinel) html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"id":3230,"title":1675,"titles":3231,"content":3232,"level":107},"/v0.0.14/guides/testing",[],"Testing patterns for query builders",{"id":3234,"title":1675,"titles":3235,"content":3236,"level":107},"/v0.0.14/guides/testing#testing",[],"ASTQL queries are testable without a database connection. This guide covers testing patterns and best practices.",{"id":3238,"title":3239,"titles":3240,"content":99,"level":136},"/v0.0.14/guides/testing#testing-query-output","Testing Query Output",[1675],{"id":3242,"title":3243,"titles":3244,"content":3245,"level":155},"/v0.0.14/guides/testing#basic-output-testing","Basic Output Testing",[1675,3239],"func TestUserQuery(t *testing.T) {\n    instance := setupTestInstance()\n\n    result, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"username\"), instance.F(\"email\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        Render()\n\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    expected := `SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active`\n    if result.SQL != expected {\n        t.Errorf(\"SQL mismatch\\ngot:  %s\\nwant: %s\", result.SQL, expected)\n    }\n\n    if len(result.RequiredParams) != 1 || result.RequiredParams[0] != \"is_active\" {\n        t.Errorf(\"params mismatch: got %v\", result.RequiredParams)\n    }\n}",{"id":3247,"title":3248,"titles":3249,"content":3250,"level":155},"/v0.0.14/guides/testing#test-instance-setup","Test Instance Setup",[1675,3239],"Create a dedicated schema for tests: func setupTestInstance() *astql.ASTQL {\n    project := dbml.NewProject(\"test\")\n\n    users := dbml.NewTable(\"users\")\n    users.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\n    users.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"active\", \"boolean\"))\n    project.AddTable(users)\n\n    posts := dbml.NewTable(\"posts\")\n    posts.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\n    posts.AddColumn(dbml.NewColumn(\"user_id\", \"bigint\"))\n    posts.AddColumn(dbml.NewColumn(\"title\", \"varchar\"))\n    posts.AddColumn(dbml.NewColumn(\"published\", \"boolean\"))\n    project.AddTable(posts)\n\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n    return instance\n}",{"id":3252,"title":3253,"titles":3254,"content":99,"level":136},"/v0.0.14/guides/testing#table-driven-tests","Table-Driven Tests",[1675],{"id":3256,"title":3257,"titles":3258,"content":3259,"level":155},"/v0.0.14/guides/testing#testing-multiple-queries","Testing Multiple Queries",[1675,3253],"func TestQueries(t *testing.T) {\n    instance := setupTestInstance()\n\n    tests := []struct {\n        name     string\n        query    func() (*astql.QueryResult, error)\n        wantSQL  string\n        wantParams []string\n    }{\n        {\n            name: \"simple select\",\n            query: func() (*astql.QueryResult, error) {\n                return astql.Select(instance.T(\"users\")).\n                    Fields(instance.F(\"username\")).\n                    Render()\n            },\n            wantSQL:    `SELECT \"username\" FROM \"users\"`,\n            wantParams: nil,\n        },\n        {\n            name: \"select with where\",\n            query: func() (*astql.QueryResult, error) {\n                return astql.Select(instance.T(\"users\")).\n                    Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"id\"))).\n                    Render()\n            },\n            wantSQL:    `SELECT * FROM \"users\" WHERE \"id\" = :id`,\n            wantParams: []string{\"id\"},\n        },\n        {\n            name: \"select with order and limit\",\n            query: func() (*astql.QueryResult, error) {\n                return astql.Select(instance.T(\"users\")).\n                    OrderBy(instance.F(\"username\"), astql.ASC).\n                    Limit(10).\n                    Render()\n            },\n            wantSQL:    `SELECT * FROM \"users\" ORDER BY \"username\" ASC LIMIT 10`,\n            wantParams: nil,\n        },\n    }\n\n    for _, tt := range tests {\n        t.Run(tt.name, func(t *testing.T) {\n            result, err := tt.query()\n            if err != nil {\n                t.Fatalf(\"unexpected error: %v\", err)\n            }\n            if result.SQL != tt.wantSQL {\n                t.Errorf(\"SQL mismatch\\ngot:  %s\\nwant: %s\", result.SQL, tt.wantSQL)\n            }\n            if !slicesEqual(result.RequiredParams, tt.wantParams) {\n                t.Errorf(\"params mismatch\\ngot:  %v\\nwant: %v\", result.RequiredParams, tt.wantParams)\n            }\n        })\n    }\n}\n\nfunc slicesEqual(a, b []string) bool {\n    if len(a) != len(b) {\n        return false\n    }\n    for i := range a {\n        if a[i] != b[i] {\n            return false\n        }\n    }\n    return true\n}",{"id":3261,"title":3262,"titles":3263,"content":99,"level":136},"/v0.0.14/guides/testing#testing-validation","Testing Validation",[1675],{"id":3265,"title":3266,"titles":3267,"content":3268,"level":155},"/v0.0.14/guides/testing#testing-invalid-input","Testing Invalid Input",[1675,3262],"func TestInvalidTable(t *testing.T) {\n    instance := setupTestInstance()\n\n    defer func() {\n        if r := recover(); r == nil {\n            t.Error(\"expected panic for invalid table\")\n        }\n    }()\n\n    instance.T(\"nonexistent\")\n}\n\nfunc TestInvalidField(t *testing.T) {\n    instance := setupTestInstance()\n\n    defer func() {\n        if r := recover(); r == nil {\n            t.Error(\"expected panic for invalid field\")\n        }\n    }()\n\n    instance.F(\"nonexistent\")\n}",{"id":3270,"title":3271,"titles":3272,"content":3273,"level":155},"/v0.0.14/guides/testing#testing-try-variants","Testing Try Variants",[1675,3262],"func TestTryT(t *testing.T) {\n    instance := setupTestInstance()\n\n    // Valid table\n    table, err := instance.TryT(\"users\")\n    if err != nil {\n        t.Errorf(\"unexpected error for valid table: %v\", err)\n    }\n    if table.Name != \"users\" {\n        t.Errorf(\"wrong table name: %s\", table.Name)\n    }\n\n    // Invalid table\n    _, err = instance.TryT(\"nonexistent\")\n    if err == nil {\n        t.Error(\"expected error for invalid table\")\n    }\n}",{"id":3275,"title":3276,"titles":3277,"content":99,"level":136},"/v0.0.14/guides/testing#testing-error-cases","Testing Error Cases",[1675],{"id":3279,"title":3280,"titles":3281,"content":3282,"level":155},"/v0.0.14/guides/testing#builder-errors","Builder Errors",[1675,3276],"func TestBuilderErrors(t *testing.T) {\n    instance := setupTestInstance()\n\n    // Fields on non-SELECT query\n    _, err := astql.Insert(instance.T(\"users\")).\n        Fields(instance.F(\"username\")).\n        Render()\n\n    if err == nil {\n        t.Error(\"expected error for Fields on INSERT\")\n    }\n\n    // SET on non-UPDATE query\n    _, err = astql.Select(instance.T(\"users\")).\n        Set(instance.F(\"username\"), instance.P(\"value\")).\n        Render()\n\n    if err == nil {\n        t.Error(\"expected error for Set on SELECT\")\n    }\n}",{"id":3284,"title":3285,"titles":3286,"content":99,"level":136},"/v0.0.14/guides/testing#testing-complex-queries","Testing Complex Queries",[1675],{"id":3288,"title":3289,"titles":3290,"content":3291,"level":155},"/v0.0.14/guides/testing#join-tests","Join Tests",[1675,3285],"func TestJoinQuery(t *testing.T) {\n    instance := setupTestInstance()\n\n    result, err := astql.Select(instance.T(\"users\", \"u\")).\n        Fields(\n            instance.WithTable(instance.F(\"username\"), \"u\"),\n            instance.WithTable(instance.F(\"title\"), \"p\"),\n        ).\n        LeftJoin(instance.T(\"posts\", \"p\"), astql.CF(\n            instance.WithTable(instance.F(\"id\"), \"u\"),\n            astql.EQ,\n            instance.WithTable(instance.F(\"user_id\"), \"p\"),\n        )).\n        Render()\n\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    // Check key parts of the query\n    if !strings.Contains(result.SQL, \"LEFT JOIN\") {\n        t.Error(\"missing LEFT JOIN\")\n    }\n    if !strings.Contains(result.SQL, `u.\"id\" = p.\"user_id\"`) {\n        t.Error(\"missing join condition\")\n    }\n}",{"id":3293,"title":3294,"titles":3295,"content":3296,"level":155},"/v0.0.14/guides/testing#subquery-tests","Subquery Tests",[1675,3285],"func TestSubquery(t *testing.T) {\n    instance := setupTestInstance()\n\n    subquery := astql.Sub(\n        astql.Select(instance.T(\"posts\")).\n            Fields(instance.F(\"user_id\")).\n            Where(instance.C(instance.F(\"published\"), astql.EQ, instance.P(\"is_pub\"))),\n    )\n\n    result, err := astql.Select(instance.T(\"users\")).\n        Where(astql.CSub(instance.F(\"id\"), astql.IN, subquery)).\n        Render()\n\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    // Check parameter namespacing\n    if !strings.Contains(result.SQL, \":sq1_is_pub\") {\n        t.Error(\"subquery parameter not namespaced\")\n    }\n}",{"id":3298,"title":3299,"titles":3300,"content":3301,"level":136},"/v0.0.14/guides/testing#snapshot-testing","Snapshot Testing",[1675],"For complex queries, consider snapshot testing: func TestComplexQuery_Snapshot(t *testing.T) {\n    instance := setupTestInstance()\n\n    result, err := buildComplexQuery(instance)\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    golden := filepath.Join(\"testdata\", t.Name()+\".golden.sql\")\n\n    if *update {\n        os.WriteFile(golden, []byte(result.SQL), 0644)\n        return\n    }\n\n    expected, err := os.ReadFile(golden)\n    if err != nil {\n        t.Fatalf(\"failed to read golden file: %v\", err)\n    }\n\n    if result.SQL != string(expected) {\n        t.Errorf(\"SQL mismatch with golden file\\ngot:\\n%s\", result.SQL)\n    }\n}",{"id":3303,"title":3304,"titles":3305,"content":99,"level":136},"/v0.0.14/guides/testing#best-practices","Best Practices",[1675],{"id":3307,"title":3308,"titles":3309,"content":3310,"level":155},"/v0.0.14/guides/testing#_1-test-query-structure-not-exact-strings","1. Test Query Structure, Not Exact Strings",[1675,3304],"For complex queries, test for required components: func TestQueryContains(t *testing.T) {\n    result, _ := buildQuery()\n\n    checks := []string{\n        `FROM \"users\"`,\n        `WHERE \"active\"`,\n        `ORDER BY`,\n        `LIMIT`,\n    }\n\n    for _, check := range checks {\n        if !strings.Contains(result.SQL, check) {\n            t.Errorf(\"missing: %s\", check)\n        }\n    }\n}",{"id":3312,"title":3313,"titles":3314,"content":3315,"level":155},"/v0.0.14/guides/testing#_2-test-parameter-lists","2. Test Parameter Lists",[1675,3304],"Always verify required parameters: func TestParams(t *testing.T) {\n    result, _ := buildQuery()\n\n    expected := []string{\"user_id\", \"status\", \"limit\"}\n    for _, param := range expected {\n        found := false\n        for _, p := range result.RequiredParams {\n            if p == param {\n                found = true\n                break\n            }\n        }\n        if !found {\n            t.Errorf(\"missing param: %s\", param)\n        }\n    }\n}",{"id":3317,"title":3318,"titles":3319,"content":3320,"level":155},"/v0.0.14/guides/testing#_3-isolate-test-schemas","3. Isolate Test Schemas",[1675,3304],"Each test file or package should have its own schema setup: // users_test.go\nfunc setupUsersTestInstance() *astql.ASTQL { ... }\n\n// orders_test.go\nfunc setupOrdersTestInstance() *astql.ASTQL { ... }",{"id":3322,"title":3323,"titles":3324,"content":3325,"level":155},"/v0.0.14/guides/testing#_4-test-edge-cases","4. Test Edge Cases",[1675,3304],"func TestEdgeCases(t *testing.T) {\n    instance := setupTestInstance()\n\n    // Empty fields (SELECT *)\n    result, _ := astql.Select(instance.T(\"users\")).Render()\n    if !strings.Contains(result.SQL, \"SELECT *\") {\n        t.Error(\"empty fields should produce SELECT *\")\n    }\n\n    // Multiple WHERE calls\n    result, _ = astql.Select(instance.T(\"users\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"a\"))).\n        Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"b\"))).\n        Render()\n    if !strings.Contains(result.SQL, \"AND\") {\n        t.Error(\"multiple WHERE should combine with AND\")\n    }\n} html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .suWN2, html code.shiki .suWN2{--shiki-default:var(--shiki-tag)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}",{"id":3327,"title":1688,"titles":3328,"content":3329,"level":107},"/v0.0.14/cookbook/pagination",[],"LIMIT/OFFSET and cursor-based pagination patterns",{"id":3331,"title":1688,"titles":3332,"content":3333,"level":107},"/v0.0.14/cookbook/pagination#pagination",[],"Recipe: Implement efficient pagination with ASTQL. Pagination is essential for handling large result sets. ASTQL supports both offset-based and cursor-based pagination.",{"id":3335,"title":3336,"titles":3337,"content":3338,"level":136},"/v0.0.14/cookbook/pagination#offset-pagination","Offset Pagination",[1688],"The simplest approach using LIMIT and OFFSET: func GetUsersPage(instance *astql.ASTQL, page, pageSize int) (*astql.QueryResult, error) {\n    offset := (page - 1) * pageSize\n\n    return astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"), instance.F(\"email\")).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(pageSize).\n        Offset(offset).\n        Render()\n}",{"id":3340,"title":3341,"titles":3342,"content":3343,"level":155},"/v0.0.14/cookbook/pagination#usage","Usage",[1688,3336],"// Page 1: LIMIT 20 OFFSET 0\nresult, _ := GetUsersPage(instance, 1, 20)\n\n// Page 2: LIMIT 20 OFFSET 20\nresult, _ := GetUsersPage(instance, 2, 20)\n\n// Page 3: LIMIT 20 OFFSET 40\nresult, _ := GetUsersPage(instance, 3, 20)",{"id":3345,"title":3346,"titles":3347,"content":3348,"level":155},"/v0.0.14/cookbook/pagination#with-total-count","With Total Count",[1688,3336],"Get total count alongside paginated results: type PagedResult struct {\n    DataSQL    string\n    CountSQL   string\n    Params     []string\n}\n\nfunc GetPagedUsers(instance *astql.ASTQL, page, pageSize int) (*PagedResult, error) {\n    offset := (page - 1) * pageSize\n\n    // Data query\n    dataResult, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(pageSize).\n        Offset(offset).\n        Render()\n    if err != nil {\n        return nil, err\n    }\n\n    // Count query (same WHERE, no LIMIT/OFFSET)\n    countResult, err := astql.Count(instance.T(\"users\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        Render()\n    if err != nil {\n        return nil, err\n    }\n\n    return &PagedResult{\n        DataSQL:  dataResult.SQL,\n        CountSQL: countResult.SQL,\n        Params:   dataResult.RequiredParams,\n    }, nil\n}",{"id":3350,"title":3351,"titles":3352,"content":3353,"level":155},"/v0.0.14/cookbook/pagination#limitations-of-offset-pagination","Limitations of Offset Pagination",[1688,3336],"Performance degrades with large offsets (database must skip rows)Inconsistent results if data changes between pagesNot suitable for infinite scroll or real-time feeds",{"id":3355,"title":3356,"titles":3357,"content":3358,"level":136},"/v0.0.14/cookbook/pagination#cursor-pagination","Cursor Pagination",[1688],"For large datasets, use cursor-based pagination (keyset pagination): func GetUsersAfter(instance *astql.ASTQL, cursor int64, limit int) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"), instance.F(\"email\")).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(limit)\n\n    if cursor > 0 {\n        query = query.Where(instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor\")))\n    }\n\n    return query.Render()\n}",{"id":3360,"title":3341,"titles":3361,"content":3362,"level":155},"/v0.0.14/cookbook/pagination#usage-1",[1688,3356],"// First page: no cursor\nresult, _ := GetUsersAfter(instance, 0, 20)\n// SELECT \"id\", \"username\", \"email\" FROM \"users\" ORDER BY \"id\" ASC LIMIT 20\n\n// Next page: use last ID as cursor\nresult, _ := GetUsersAfter(instance, lastID, 20)\n// SELECT ... WHERE \"id\" > :cursor ORDER BY \"id\" ASC LIMIT 20",{"id":3364,"title":3365,"titles":3366,"content":3367,"level":155},"/v0.0.14/cookbook/pagination#bidirectional-cursor","Bidirectional Cursor",[1688,3356],"Support both forward and backward navigation: type Direction string\n\nconst (\n    Forward  Direction = \"forward\"\n    Backward Direction = \"backward\"\n)\n\nfunc GetUsersWithCursor(\n    instance *astql.ASTQL,\n    cursor int64,\n    direction Direction,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"))\n\n    if cursor > 0 {\n        if direction == Forward {\n            query = query.\n                Where(instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor\"))).\n                OrderBy(instance.F(\"id\"), astql.ASC)\n        } else {\n            query = query.\n                Where(instance.C(instance.F(\"id\"), astql.LT, instance.P(\"cursor\"))).\n                OrderBy(instance.F(\"id\"), astql.DESC)\n        }\n    } else {\n        query = query.OrderBy(instance.F(\"id\"), astql.ASC)\n    }\n\n    return query.Limit(limit).Render()\n}",{"id":3369,"title":3370,"titles":3371,"content":3372,"level":155},"/v0.0.14/cookbook/pagination#multi-column-cursor","Multi-Column Cursor",[1688,3356],"For sorting by non-unique columns, use composite cursors: func GetPostsByDate(\n    instance *astql.ASTQL,\n    cursorDate string,\n    cursorID int64,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"posts\")).\n        Fields(instance.F(\"id\"), instance.F(\"title\"), instance.F(\"created_at\")).\n        Limit(limit)\n\n    if cursorDate != \"\" {\n        // Composite cursor: (created_at, id)\n        query = query.Where(instance.Or(\n            // Same date, higher ID\n            instance.And(\n                instance.C(instance.F(\"created_at\"), astql.EQ, instance.P(\"cursor_date\")),\n                instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor_id\")),\n            ),\n            // Later date\n            instance.C(instance.F(\"created_at\"), astql.GT, instance.P(\"cursor_date\")),\n        ))\n    }\n\n    return query.\n        OrderBy(instance.F(\"created_at\"), astql.ASC).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Render()\n}",{"id":3374,"title":3375,"titles":3376,"content":3377,"level":136},"/v0.0.14/cookbook/pagination#filtering-with-pagination","Filtering with Pagination",[1688],"Combine filters with pagination: func SearchUsers(\n    instance *astql.ASTQL,\n    filters UserFilters,\n    cursor int64,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"), instance.F(\"email\"))\n\n    // Build filter conditions using instance.ConditionItems()\n    conditions := instance.ConditionItems()\n\n    if filters.Active != nil {\n        conditions = append(conditions,\n            instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")))\n    }\n\n    if filters.Role != \"\" {\n        conditions = append(conditions,\n            instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"role\")))\n    }\n\n    // Add cursor condition\n    if cursor > 0 {\n        conditions = append(conditions,\n            instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor\")))\n    }\n\n    // Apply conditions\n    if len(conditions) > 0 {\n        query = query.Where(instance.And(conditions...))\n    }\n\n    return query.\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(limit).\n        Render()\n}",{"id":3379,"title":3380,"titles":3381,"content":3382,"level":136},"/v0.0.14/cookbook/pagination#pagination-with-joins","Pagination with JOINs",[1688],"Paginate joined results: func GetUserPosts(\n    instance *astql.ASTQL,\n    userID int64,\n    cursor int64,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"posts\", \"p\")).\n        Fields(\n            instance.WithTable(instance.F(\"id\"), \"p\"),\n            instance.WithTable(instance.F(\"title\"), \"p\"),\n            instance.WithTable(instance.F(\"username\"), \"u\"),\n        ).\n        Join(instance.T(\"users\", \"u\"), astql.CF(\n            instance.WithTable(instance.F(\"user_id\"), \"p\"),\n            astql.EQ,\n            instance.WithTable(instance.F(\"id\"), \"u\"),\n        )).\n        Where(instance.C(\n            instance.WithTable(instance.F(\"user_id\"), \"p\"),\n            astql.EQ,\n            instance.P(\"user_id\"),\n        ))\n\n    if cursor > 0 {\n        query = query.Where(instance.C(\n            instance.WithTable(instance.F(\"id\"), \"p\"),\n            astql.GT,\n            instance.P(\"cursor\"),\n        ))\n    }\n\n    return query.\n        OrderBy(instance.WithTable(instance.F(\"id\"), \"p\"), astql.ASC).\n        Limit(limit).\n        Render()\n}",{"id":3384,"title":3304,"titles":3385,"content":99,"level":136},"/v0.0.14/cookbook/pagination#best-practices",[1688],{"id":3387,"title":3388,"titles":3389,"content":3390,"level":155},"/v0.0.14/cookbook/pagination#_1-always-include-order-by","1. Always Include ORDER BY",[1688,3304],"Pagination without ORDER BY produces unpredictable results: // Bad: no ordering\nastql.Select(table).Limit(10).Render()\n\n// Good: explicit ordering\nastql.Select(table).OrderBy(field, astql.ASC).Limit(10).Render()",{"id":3392,"title":3393,"titles":3394,"content":3395,"level":155},"/v0.0.14/cookbook/pagination#_2-use-indexed-columns-for-cursors","2. Use Indexed Columns for Cursors",[1688,3304],"Ensure cursor columns are indexed for performance: CREATE INDEX idx_users_id ON users(id);\nCREATE INDEX idx_posts_created_at_id ON posts(created_at, id);",{"id":3397,"title":3398,"titles":3399,"content":3400,"level":155},"/v0.0.14/cookbook/pagination#_3-fetch-n1-for-has-more","3. Fetch N+1 for \"Has More\"",[1688,3304],"Fetch one extra row to determine if more pages exist: func GetUsersWithHasMore(instance *astql.ASTQL, cursor int64, limit int) (sql string, hasMore bool) {\n    // Fetch limit + 1\n    result, _ := GetUsersAfter(instance, cursor, limit+1)\n\n    // If we got limit+1 rows, there are more\n    // (Actual row count determined at execution time)\n    return result.SQL, true // hasMore determined after execution\n}",{"id":3402,"title":3403,"titles":3404,"content":3405,"level":155},"/v0.0.14/cookbook/pagination#_4-consider-distinct-on-for-deduplication","4. Consider DISTINCT ON for Deduplication",[1688,3304],"When joining might produce duplicates: astql.Select(instance.T(\"users\")).\n    DistinctOn(instance.F(\"id\")).\n    OrderBy(instance.F(\"id\"), astql.ASC).\n    Limit(20) html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}",{"id":3407,"title":1695,"titles":3408,"content":3409,"level":107},"/v0.0.14/cookbook/vector-search",[],"pgvector similarity queries with ASTQL",{"id":3411,"title":1695,"titles":3412,"content":3413,"level":107},"/v0.0.14/cookbook/vector-search#vector-search",[],"Recipe: Build semantic search with pgvector and ASTQL. ASTQL supports pgvector operators for similarity search on embedding vectors.",{"id":3415,"title":3416,"titles":3417,"content":3418,"level":136},"/v0.0.14/cookbook/vector-search#schema-setup","Schema Setup",[1695],"Define a table with a vector column: project := dbml.NewProject(\"myapp\")\n\ndocuments := dbml.NewTable(\"documents\")\ndocuments.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\ndocuments.AddColumn(dbml.NewColumn(\"title\", \"varchar\"))\ndocuments.AddColumn(dbml.NewColumn(\"content\", \"text\"))\ndocuments.AddColumn(dbml.NewColumn(\"embedding\", \"vector(1536)\"))  // OpenAI dimension\ndocuments.AddColumn(dbml.NewColumn(\"created_at\", \"timestamp\"))\nproject.AddTable(documents)\n\ninstance, _ := astql.NewFromDBML(project)",{"id":3420,"title":3421,"titles":3422,"content":3423,"level":136},"/v0.0.14/cookbook/vector-search#distance-operators","Distance Operators",[1695],"OperatorConstantDistance Type\u003C->VectorL2DistanceEuclidean (L2)\u003C=>VectorCosineDistanceCosine\u003C#>VectorInnerProductNegative inner product\u003C+>VectorL1DistanceManhattan (L1)",{"id":3425,"title":3426,"titles":3427,"content":3428,"level":136},"/v0.0.14/cookbook/vector-search#basic-similarity-search","Basic Similarity Search",[1695],"Find documents similar to a query vector: func SearchSimilar(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(\n            instance.F(\"id\"),\n            instance.F(\"title\"),\n            instance.F(\"content\"),\n        ).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// SELECT \"id\", \"title\", \"content\"\n// FROM \"documents\"\n// ORDER BY \"embedding\" \u003C-> :query_embedding ASC\n// LIMIT 10",{"id":3430,"title":3431,"titles":3432,"content":3433,"level":155},"/v0.0.14/cookbook/vector-search#execution-with-sqlx","Execution with sqlx",[1695,3426],"result, _ := SearchSimilar(instance, 10)\n\n// Convert embedding to pgvector format\nqueryEmbedding := pgvector.NewVector(embeddingFloats)\n\nparams := map[string]any{\n    \"query_embedding\": queryEmbedding,\n}\n\nvar docs []Document\nerr := db.Select(&docs, result.SQL, params)",{"id":3435,"title":3436,"titles":3437,"content":3438,"level":136},"/v0.0.14/cookbook/vector-search#cosine-similarity","Cosine Similarity",[1695],"For normalized embeddings, use cosine distance: func SearchByCosine(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(instance.F(\"id\"), instance.F(\"title\")).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorCosineDistance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// ORDER BY \"embedding\" \u003C=> :query_embedding ASC",{"id":3440,"title":3441,"titles":3442,"content":3443,"level":136},"/v0.0.14/cookbook/vector-search#inner-product-for-maximum-similarity","Inner Product (for Maximum Similarity)",[1695],"When embeddings are normalized, inner product gives similarity (not distance): func SearchByInnerProduct(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(instance.F(\"id\"), instance.F(\"title\")).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorInnerProduct,\n            instance.P(\"query_embedding\"),\n            astql.ASC,  // Note: pgvector uses negative inner product\n        ).\n        Limit(limit).\n        Render()\n}\n\n// ORDER BY \"embedding\" \u003C#> :query_embedding ASC",{"id":3445,"title":3446,"titles":3447,"content":3448,"level":136},"/v0.0.14/cookbook/vector-search#filtered-vector-search","Filtered Vector Search",[1695],"Combine vector search with traditional filters: func SearchWithFilters(\n    instance *astql.ASTQL,\n    category string,\n    minDate time.Time,\n    limit int,\n) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(instance.F(\"id\"), instance.F(\"title\"), instance.F(\"content\")).\n        Where(instance.And(\n            instance.C(instance.F(\"category\"), astql.EQ, instance.P(\"category\")),\n            instance.C(instance.F(\"created_at\"), astql.GE, instance.P(\"min_date\")),\n        )).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// SELECT \"id\", \"title\", \"content\"\n// FROM \"documents\"\n// WHERE (\"category\" = :category AND \"created_at\" >= :min_date)\n// ORDER BY \"embedding\" \u003C-> :query_embedding ASC\n// LIMIT 10",{"id":3450,"title":3451,"titles":3452,"content":3453,"level":136},"/v0.0.14/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold","K-Nearest Neighbors with Distance Threshold",[1695],"Filter results by maximum distance: func SearchWithThreshold(instance *astql.ASTQL, maxDistance float64, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(instance.F(\"id\"), instance.F(\"title\")).\n        Where(instance.C(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n        )).\n        // Note: distance threshold requires raw SQL or a computed column\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}",{"id":3455,"title":3456,"titles":3457,"content":3458,"level":136},"/v0.0.14/cookbook/vector-search#hybrid-search","Hybrid Search",[1695],"Combine vector similarity with full-text search: func HybridSearch(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    // Vector search component\n    return astql.Select(instance.T(\"documents\")).\n        Fields(\n            instance.F(\"id\"),\n            instance.F(\"title\"),\n            instance.F(\"content\"),\n        ).\n        Where(instance.C(\n            instance.F(\"content\"),\n            astql.ILIKE,\n            instance.P(\"text_query\"),\n        )).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// SELECT \"id\", \"title\", \"content\"\n// FROM \"documents\"\n// WHERE \"content\" ILIKE :text_query\n// ORDER BY \"embedding\" \u003C-> :query_embedding ASC\n// LIMIT 10",{"id":3460,"title":3461,"titles":3462,"content":3463,"level":136},"/v0.0.14/cookbook/vector-search#multi-vector-search","Multi-Vector Search",[1695],"Search across multiple embedding columns: project := dbml.NewProject(\"myapp\")\n\nproducts := dbml.NewTable(\"products\")\nproducts.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\nproducts.AddColumn(dbml.NewColumn(\"name\", \"varchar\"))\nproducts.AddColumn(dbml.NewColumn(\"title_embedding\", \"vector(1536)\"))\nproducts.AddColumn(dbml.NewColumn(\"description_embedding\", \"vector(1536)\"))\nproducts.AddColumn(dbml.NewColumn(\"image_embedding\", \"vector(512)\"))\nproject.AddTable(products)\n\n// Search by title similarity\nfunc SearchByTitle(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"products\")).\n        Fields(instance.F(\"id\"), instance.F(\"name\")).\n        OrderByExpr(\n            instance.F(\"title_embedding\"),\n            astql.VectorCosineDistance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// Search by image similarity\nfunc SearchByImage(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"products\")).\n        Fields(instance.F(\"id\"), instance.F(\"name\")).\n        OrderByExpr(\n            instance.F(\"image_embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"image_query\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}",{"id":3465,"title":3466,"titles":3467,"content":3468,"level":136},"/v0.0.14/cookbook/vector-search#indexing-recommendations","Indexing Recommendations",[1695],"For production vector search, create appropriate indexes: -- HNSW index (recommended for most cases)\nCREATE INDEX ON documents USING hnsw (embedding vector_cosine_ops);\n\n-- IVFFlat index (for very large datasets)\nCREATE INDEX ON documents USING ivfflat (embedding vector_l2_ops) WITH (lists = 100); Choose the operator class matching your distance function: vector_l2_ops for L2 distance (\u003C->)vector_cosine_ops for cosine distance (\u003C=>)vector_ip_ops for inner product (\u003C#>)",{"id":3470,"title":3304,"titles":3471,"content":99,"level":136},"/v0.0.14/cookbook/vector-search#best-practices",[1695],{"id":3473,"title":3474,"titles":3475,"content":3476,"level":155},"/v0.0.14/cookbook/vector-search#_1-normalize-embeddings-for-cosine","1. Normalize Embeddings for Cosine",[1695,3304],"Pre-normalize embeddings when using cosine distance: func normalize(v []float32) []float32 {\n    var sum float32\n    for _, x := range v {\n        sum += x * x\n    }\n    norm := float32(math.Sqrt(float64(sum)))\n    result := make([]float32, len(v))\n    for i, x := range v {\n        result[i] = x / norm\n    }\n    return result\n}",{"id":3478,"title":3479,"titles":3480,"content":3481,"level":155},"/v0.0.14/cookbook/vector-search#_2-use-appropriate-limits","2. Use Appropriate Limits",[1695,3304],"Vector search is expensive. Always use reasonable limits: // Good: bounded results\n.Limit(100)\n\n// Bad: unbounded\n// (no limit)",{"id":3483,"title":3484,"titles":3485,"content":3486,"level":155},"/v0.0.14/cookbook/vector-search#_3-pre-filter-when-possible","3. Pre-filter When Possible",[1695,3304],"Apply WHERE clauses before vector operations: // Good: filter first, then vector search\n.Where(instance.C(instance.F(\"category\"), astql.EQ, instance.P(\"cat\"))).\n.OrderByExpr(embedding, distance, query, astql.ASC)\n\n// Less efficient: vector search on all rows\n.OrderByExpr(embedding, distance, query, astql.ASC) html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}",{"id":3488,"title":1702,"titles":3489,"content":3490,"level":107},"/v0.0.14/cookbook/upserts",[],"ON CONFLICT patterns for insert-or-update operations",{"id":3492,"title":1702,"titles":3493,"content":3494,"level":107},"/v0.0.14/cookbook/upserts#upserts",[],"Recipe: Implement insert-or-update with PostgreSQL ON CONFLICT. ASTQL supports PostgreSQL's ON CONFLICT clause for upsert operations.",{"id":3496,"title":3497,"titles":3498,"content":3499,"level":136},"/v0.0.14/cookbook/upserts#basic-upsert","Basic Upsert",[1702],"Insert a row or update if it already exists: func UpsertUser(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n    values[instance.F(\"updated_at\")] = instance.P(\"now\")\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoUpdate().\n        Set(instance.F(\"username\"), instance.P(\"username\")).\n        Set(instance.F(\"updated_at\"), instance.P(\"now\")).\n        Build().\n        Render()\n}\n\n// INSERT INTO \"users\" (\"email\", \"updated_at\", \"username\")\n// VALUES (:email, :now, :username)\n// ON CONFLICT (\"email\") DO UPDATE SET \"updated_at\" = :now, \"username\" = :username",{"id":3501,"title":3502,"titles":3503,"content":3504,"level":136},"/v0.0.14/cookbook/upserts#do-nothing","DO NOTHING",[1702],"Skip conflicting rows without updating: func InsertIgnoreDuplicates(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoNothing().\n        Render()\n}\n\n// INSERT INTO \"users\" (\"email\", \"username\")\n// VALUES (:email, :username)\n// ON CONFLICT (\"email\") DO NOTHING",{"id":3506,"title":3507,"titles":3508,"content":3509,"level":136},"/v0.0.14/cookbook/upserts#multi-column-conflict","Multi-Column Conflict",[1702],"Handle conflicts on composite unique constraints: func UpsertUserRole(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"user_id\")] = instance.P(\"user_id\")\n    values[instance.F(\"role_id\")] = instance.P(\"role_id\")\n    values[instance.F(\"granted_at\")] = instance.P(\"now\")\n\n    return astql.Insert(instance.T(\"user_roles\")).\n        Values(values).\n        OnConflict(instance.F(\"user_id\"), instance.F(\"role_id\")).\n        DoUpdate().\n        Set(instance.F(\"granted_at\"), instance.P(\"now\")).\n        Build().\n        Render()\n}\n\n// INSERT INTO \"user_roles\" (\"granted_at\", \"role_id\", \"user_id\")\n// VALUES (:now, :role_id, :user_id)\n// ON CONFLICT (\"user_id\", \"role_id\") DO UPDATE SET \"granted_at\" = :now",{"id":3511,"title":3512,"titles":3513,"content":3514,"level":136},"/v0.0.14/cookbook/upserts#returning-with-upsert","RETURNING with Upsert",[1702],"Get the inserted or updated row: func UpsertUserReturning(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoUpdate().\n        Set(instance.F(\"username\"), instance.P(\"username\")).\n        Build().\n        Returning(instance.F(\"id\"), instance.F(\"created_at\"), instance.F(\"updated_at\")).\n        Render()\n}\n\n// INSERT INTO \"users\" (\"email\", \"username\")\n// VALUES (:email, :username)\n// ON CONFLICT (\"email\") DO UPDATE SET \"username\" = :username\n// RETURNING \"id\", \"created_at\", \"updated_at\"",{"id":3516,"title":3517,"titles":3518,"content":3519,"level":136},"/v0.0.14/cookbook/upserts#batch-upsert","Batch Upsert",[1702],"Insert multiple rows with conflict handling: func BatchUpsertProducts(instance *astql.ASTQL, count int) (*astql.QueryResult, error) {\n    query := astql.Insert(instance.T(\"products\"))\n\n    // Add multiple value sets\n    for i := 0; i \u003C count; i++ {\n        values := instance.ValueMap()\n        values[instance.F(\"sku\")] = instance.P(fmt.Sprintf(\"sku_%d\", i))\n        values[instance.F(\"name\")] = instance.P(fmt.Sprintf(\"name_%d\", i))\n        values[instance.F(\"price\")] = instance.P(fmt.Sprintf(\"price_%d\", i))\n        query = query.Values(values)\n    }\n\n    return query.\n        OnConflict(instance.F(\"sku\")).\n        DoUpdate().\n        Set(instance.F(\"name\"), instance.P(\"name_0\")).  // Uses first row params\n        Set(instance.F(\"price\"), instance.P(\"price_0\")).\n        Build().\n        Render()\n}\n\n// INSERT INTO \"products\" (\"name\", \"price\", \"sku\")\n// VALUES (:name_0, :price_0, :sku_0), (:name_1, :price_1, :sku_1), ...\n// ON CONFLICT (\"sku\") DO UPDATE SET \"name\" = :name_0, \"price\" = :price_0",{"id":3521,"title":3522,"titles":3523,"content":3524,"level":136},"/v0.0.14/cookbook/upserts#conditional-upsert","Conditional Upsert",[1702],"Update only certain fields based on values: func UpsertWithCondition(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"product_id\")] = instance.P(\"product_id\")\n    values[instance.F(\"quantity\")] = instance.P(\"quantity\")\n    values[instance.F(\"updated_at\")] = instance.P(\"now\")\n\n    // Only update if new quantity is greater\n    // Note: This requires raw SQL for the WHERE clause on conflict\n    return astql.Insert(instance.T(\"inventory\")).\n        Values(values).\n        OnConflict(instance.F(\"product_id\")).\n        DoUpdate().\n        Set(instance.F(\"quantity\"), instance.P(\"quantity\")).\n        Set(instance.F(\"updated_at\"), instance.P(\"now\")).\n        Build().\n        Render()\n}",{"id":3526,"title":3527,"titles":3528,"content":3529,"level":136},"/v0.0.14/cookbook/upserts#sync-pattern","Sync Pattern",[1702],"Replace all rows for an entity (delete-then-insert pattern): func SyncUserPreferences(instance *astql.ASTQL, prefCount int) ([]astql.QueryResult, error) {\n    results := make([]astql.QueryResult, 0, 2)\n\n    // 1. Delete existing preferences\n    deleteResult, err := astql.Delete(instance.T(\"preferences\")).\n        Where(instance.C(instance.F(\"user_id\"), astql.EQ, instance.P(\"user_id\"))).\n        Render()\n    if err != nil {\n        return nil, err\n    }\n    results = append(results, *deleteResult)\n\n    // 2. Insert new preferences\n    query := astql.Insert(instance.T(\"preferences\"))\n    for i := 0; i \u003C prefCount; i++ {\n        values := instance.ValueMap()\n        values[instance.F(\"user_id\")] = instance.P(\"user_id\")\n        values[instance.F(\"key\")] = instance.P(fmt.Sprintf(\"key_%d\", i))\n        values[instance.F(\"value\")] = instance.P(fmt.Sprintf(\"value_%d\", i))\n        query = query.Values(values)\n    }\n\n    insertResult, err := query.Render()\n    if err != nil {\n        return nil, err\n    }\n    results = append(results, *insertResult)\n\n    return results, nil\n}",{"id":3531,"title":3532,"titles":3533,"content":3534,"level":136},"/v0.0.14/cookbook/upserts#upsert-with-timestamps","Upsert with Timestamps",[1702],"Common pattern: set created_at on insert, updated_at always: func UpsertWithTimestamps(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n    values[instance.F(\"created_at\")] = instance.P(\"now\")  // Set on insert\n    values[instance.F(\"updated_at\")] = instance.P(\"now\")  // Set always\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoUpdate().\n        Set(instance.F(\"username\"), instance.P(\"username\")).\n        Set(instance.F(\"updated_at\"), instance.P(\"now\")).  // Only update updated_at\n        Build().\n        Render()\n}",{"id":3536,"title":3304,"titles":3537,"content":99,"level":136},"/v0.0.14/cookbook/upserts#best-practices",[1702],{"id":3539,"title":3540,"titles":3541,"content":3542,"level":155},"/v0.0.14/cookbook/upserts#_1-always-use-unique-constraints","1. Always Use Unique Constraints",[1702,3304],"ON CONFLICT requires a unique constraint or index: -- Unique constraint\nALTER TABLE users ADD CONSTRAINT users_email_unique UNIQUE (email);\n\n-- Or unique index\nCREATE UNIQUE INDEX idx_users_email ON users(email);",{"id":3544,"title":3545,"titles":3546,"content":3547,"level":155},"/v0.0.14/cookbook/upserts#_2-be-explicit-about-updated-fields","2. Be Explicit About Updated Fields",[1702,3304],"Only update fields that should change on conflict: // Good: explicit updates\n.DoUpdate().\n    Set(instance.F(\"username\"), instance.P(\"username\")).\n    Set(instance.F(\"updated_at\"), instance.P(\"now\"))\n\n// Bad: might overwrite fields you want to preserve",{"id":3549,"title":3550,"titles":3551,"content":3552,"level":155},"/v0.0.14/cookbook/upserts#_3-use-returning-to-avoid-extra-queries","3. Use RETURNING to Avoid Extra Queries",[1702,3304],"// Good: single query\n.Returning(instance.F(\"id\"))\n\n// Less efficient: separate SELECT after INSERT",{"id":3554,"title":3555,"titles":3556,"content":3557,"level":155},"/v0.0.14/cookbook/upserts#_4-consider-do-nothing-for-idempotency","4. Consider DO NOTHING for Idempotency",[1702,3304],"When you only care about ensuring a row exists: // Idempotent: insert if missing, ignore if exists\n.OnConflict(instance.F(\"id\")).DoNothing() html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}",{"id":3559,"title":3560,"titles":3561,"content":3562,"level":107},"/v0.0.14/reference/api","API Reference",[],"Complete API reference for the astql package",{"id":3564,"title":3560,"titles":3565,"content":3566,"level":107},"/v0.0.14/reference/api#api-reference",[],"Complete API reference for the github.com/zoobzio/astql package.",{"id":3568,"title":3569,"titles":3570,"content":99,"level":136},"/v0.0.14/reference/api#instance-creation","Instance Creation",[3560],{"id":3572,"title":856,"titles":3573,"content":3574,"level":155},"/v0.0.14/reference/api#newfromdbml",[3560,3569],"func NewFromDBML(project *dbml.Project) (*ASTQL, error) Creates a new ASTQL instance from a DBML project. Returns an error if the project is nil.",{"id":3576,"title":3577,"titles":3578,"content":99,"level":136},"/v0.0.14/reference/api#instance-methods","Instance Methods",[3560],{"id":3580,"title":119,"titles":3581,"content":3582,"level":155},"/v0.0.14/reference/api#t",[3560,3577],"func (a *ASTQL) T(name string, alias ...string) types.Table Creates a validated table reference. Panics if the table doesn't exist in the schema. Optional single-letter alias (a-z).",{"id":3584,"title":3585,"titles":3586,"content":3587,"level":155},"/v0.0.14/reference/api#tryt","TryT",[3560,3577],"func (a *ASTQL) TryT(name string, alias ...string) (types.Table, error) Creates a validated table reference. Returns an error instead of panicking.",{"id":3589,"title":169,"titles":3590,"content":3591,"level":155},"/v0.0.14/reference/api#f",[3560,3577],"func (a *ASTQL) F(name string) types.Field Creates a validated field reference. Panics if the field doesn't exist in any table in the schema.",{"id":3593,"title":3594,"titles":3595,"content":3596,"level":155},"/v0.0.14/reference/api#tryf","TryF",[3560,3577],"func (a *ASTQL) TryF(name string) (types.Field, error) Creates a validated field reference. Returns an error instead of panicking.",{"id":3598,"title":316,"titles":3599,"content":3600,"level":155},"/v0.0.14/reference/api#p",[3560,3577],"func (a *ASTQL) P(name string) types.Param Creates a validated parameter reference. Panics if the name is not a valid SQL identifier.",{"id":3602,"title":3603,"titles":3604,"content":3605,"level":155},"/v0.0.14/reference/api#tryp","TryP",[3560,3577],"func (a *ASTQL) TryP(name string) (types.Param, error) Creates a validated parameter reference. Returns an error instead of panicking.",{"id":3607,"title":284,"titles":3608,"content":3609,"level":155},"/v0.0.14/reference/api#c",[3560,3577],"func (a *ASTQL) C(field types.Field, op types.Operator, param types.Param) types.Condition Creates a validated condition. Panics if the field doesn't exist in the schema.",{"id":3611,"title":3612,"titles":3613,"content":3614,"level":155},"/v0.0.14/reference/api#tryc","TryC",[3560,3577],"func (a *ASTQL) TryC(field types.Field, op types.Operator, param types.Param) (types.Condition, error) Creates a validated condition. Returns an error instead of panicking.",{"id":3616,"title":3617,"titles":3618,"content":3619,"level":155},"/v0.0.14/reference/api#and","And",[3560,3577],"func (a *ASTQL) And(conditions ...types.ConditionItem) types.ConditionGroup Creates an AND condition group. Panics if no conditions provided.",{"id":3621,"title":3622,"titles":3623,"content":3624,"level":155},"/v0.0.14/reference/api#or","Or",[3560,3577],"func (a *ASTQL) Or(conditions ...types.ConditionItem) types.ConditionGroup Creates an OR condition group. Panics if no conditions provided.",{"id":3626,"title":3627,"titles":3628,"content":3629,"level":155},"/v0.0.14/reference/api#null","Null",[3560,3577],"func (a *ASTQL) Null(field types.Field) types.Condition Creates an IS NULL condition.",{"id":3631,"title":3632,"titles":3633,"content":3634,"level":155},"/v0.0.14/reference/api#notnull","NotNull",[3560,3577],"func (a *ASTQL) NotNull(field types.Field) types.Condition Creates an IS NOT NULL condition.",{"id":3636,"title":3637,"titles":3638,"content":3639,"level":155},"/v0.0.14/reference/api#withtable","WithTable",[3560,3577],"func (a *ASTQL) WithTable(field types.Field, tableOrAlias string) types.Field Prefixes a field with a table name or alias. Panics if tableOrAlias is not a valid table name or single-letter alias.",{"id":3641,"title":3642,"titles":3643,"content":3644,"level":155},"/v0.0.14/reference/api#trywithtable","TryWithTable",[3560,3577],"func (a *ASTQL) TryWithTable(field types.Field, tableOrAlias string) (types.Field, error) Prefixes a field with a table name or alias. Returns an error instead of panicking.",{"id":3646,"title":3647,"titles":3648,"content":3649,"level":155},"/v0.0.14/reference/api#aggc","AggC",[3560,3577],"func (a *ASTQL) AggC(aggFunc types.AggregateFunc, field *types.Field, op types.Operator, param types.Param) types.AggregateCondition Creates a validated aggregate condition for HAVING clauses. Use nil for field to create COUNT(*).",{"id":3651,"title":3652,"titles":3653,"content":3654,"level":155},"/v0.0.14/reference/api#tryaggc","TryAggC",[3560,3577],"func (a *ASTQL) TryAggC(aggFunc types.AggregateFunc, field *types.Field, op types.Operator, param types.Param) (types.AggregateCondition, error) Creates a validated aggregate condition. Returns an error instead of panicking.",{"id":3656,"title":3657,"titles":3658,"content":3659,"level":155},"/v0.0.14/reference/api#valuemap","ValueMap",[3560,3577],"func (a *ASTQL) ValueMap() map[types.Field]types.Param Returns an empty map for building INSERT value sets.",{"id":3661,"title":3662,"titles":3663,"content":99,"level":136},"/v0.0.14/reference/api#query-builders","Query Builders",[3560],{"id":3665,"title":219,"titles":3666,"content":3667,"level":155},"/v0.0.14/reference/api#select",[3560,3662],"func Select(t types.Table) *Builder Creates a new SELECT query builder.",{"id":3669,"title":3670,"titles":3671,"content":3672,"level":155},"/v0.0.14/reference/api#insert","Insert",[3560,3662],"func Insert(t types.Table) *Builder Creates a new INSERT query builder.",{"id":3674,"title":3675,"titles":3676,"content":3677,"level":155},"/v0.0.14/reference/api#update","Update",[3560,3662],"func Update(t types.Table) *Builder Creates a new UPDATE query builder.",{"id":3679,"title":3680,"titles":3681,"content":3682,"level":155},"/v0.0.14/reference/api#delete","Delete",[3560,3662],"func Delete(t types.Table) *Builder Creates a new DELETE query builder.",{"id":3684,"title":3685,"titles":3686,"content":3687,"level":155},"/v0.0.14/reference/api#count","Count",[3560,3662],"func Count(t types.Table) *Builder Creates a new COUNT query builder.",{"id":3689,"title":3690,"titles":3691,"content":99,"level":136},"/v0.0.14/reference/api#builder-methods","Builder Methods",[3560],{"id":3693,"title":2665,"titles":3694,"content":3695,"level":155},"/v0.0.14/reference/api#fields",[3560,3690],"func (b *Builder) Fields(fields ...types.Field) *Builder Sets the fields to select. SELECT only.",{"id":3697,"title":3698,"titles":3699,"content":3700,"level":155},"/v0.0.14/reference/api#where","Where",[3560,3690],"func (b *Builder) Where(condition types.ConditionItem) *Builder Sets or adds WHERE conditions. Multiple calls combine with AND.",{"id":3702,"title":3703,"titles":3704,"content":3705,"level":155},"/v0.0.14/reference/api#wherefield","WhereField",[3560,3690],"func (b *Builder) WhereField(f types.Field, op types.Operator, p types.Param) *Builder Shorthand for simple field conditions.",{"id":3707,"title":3708,"titles":3709,"content":3710,"level":155},"/v0.0.14/reference/api#orderby","OrderBy",[3560,3690],"func (b *Builder) OrderBy(f types.Field, direction types.Direction) *Builder Adds ORDER BY clause.",{"id":3712,"title":3713,"titles":3714,"content":3715,"level":155},"/v0.0.14/reference/api#orderbynulls","OrderByNulls",[3560,3690],"func (b *Builder) OrderByNulls(f types.Field, direction types.Direction, nulls types.NullsOrdering) *Builder Adds ORDER BY with NULLS FIRST/LAST.",{"id":3717,"title":3718,"titles":3719,"content":3720,"level":155},"/v0.0.14/reference/api#orderbyexpr","OrderByExpr",[3560,3690],"func (b *Builder) OrderByExpr(f types.Field, op types.Operator, p types.Param, direction types.Direction) *Builder Adds ORDER BY with an expression (e.g., vector distance).",{"id":3722,"title":3723,"titles":3724,"content":3725,"level":155},"/v0.0.14/reference/api#limit","Limit",[3560,3690],"func (b *Builder) Limit(limit int) *Builder Sets the LIMIT clause.",{"id":3727,"title":3728,"titles":3729,"content":3730,"level":155},"/v0.0.14/reference/api#offset","Offset",[3560,3690],"func (b *Builder) Offset(offset int) *Builder Sets the OFFSET clause.",{"id":3732,"title":3733,"titles":3734,"content":3735,"level":155},"/v0.0.14/reference/api#set","Set",[3560,3690],"func (b *Builder) Set(f types.Field, p types.Param) *Builder Adds a field update. UPDATE only.",{"id":3737,"title":3738,"titles":3739,"content":3740,"level":155},"/v0.0.14/reference/api#values","Values",[3560,3690],"func (b *Builder) Values(valueMap map[types.Field]types.Param) *Builder Adds a row of values. INSERT only. Call multiple times for multiple rows.",{"id":3742,"title":3743,"titles":3744,"content":3745,"level":155},"/v0.0.14/reference/api#returning","Returning",[3560,3690],"func (b *Builder) Returning(fields ...types.Field) *Builder Adds RETURNING clause. INSERT, UPDATE, DELETE only.",{"id":3747,"title":3748,"titles":3749,"content":3750,"level":155},"/v0.0.14/reference/api#distinct","Distinct",[3560,3690],"func (b *Builder) Distinct() *Builder Adds DISTINCT to SELECT.",{"id":3752,"title":3753,"titles":3754,"content":3755,"level":155},"/v0.0.14/reference/api#distincton","DistinctOn",[3560,3690],"func (b *Builder) DistinctOn(fields ...types.Field) *Builder Adds DISTINCT ON to SELECT. PostgreSQL only.",{"id":3757,"title":3758,"titles":3759,"content":3760,"level":155},"/v0.0.14/reference/api#groupby","GroupBy",[3560,3690],"func (b *Builder) GroupBy(fields ...types.Field) *Builder Adds GROUP BY clause. SELECT only.",{"id":3762,"title":3763,"titles":3764,"content":3765,"level":155},"/v0.0.14/reference/api#having","Having",[3560,3690],"func (b *Builder) Having(conditions ...types.Condition) *Builder Adds HAVING conditions. Requires GROUP BY.",{"id":3767,"title":3768,"titles":3769,"content":3770,"level":155},"/v0.0.14/reference/api#havingagg","HavingAgg",[3560,3690],"func (b *Builder) HavingAgg(conditions ...types.AggregateCondition) *Builder Adds aggregate HAVING conditions (COUNT(*) > ). Requires GROUP BY.",{"id":3772,"title":3773,"titles":3774,"content":3775,"level":155},"/v0.0.14/reference/api#selectexpr","SelectExpr",[3560,3690],"func (b *Builder) SelectExpr(expr types.FieldExpression) *Builder Adds a field expression (aggregate, CASE, window function).",{"id":3777,"title":3778,"titles":3779,"content":3780,"level":155},"/v0.0.14/reference/api#onconflict","OnConflict",[3560,3690],"func (b *Builder) OnConflict(columns ...types.Field) *ConflictBuilder Starts ON CONFLICT clause. INSERT only.",{"id":3782,"title":3783,"titles":3784,"content":3785,"level":155},"/v0.0.14/reference/api#join-methods","Join Methods",[3560,3690],"func (b *Builder) Join(table types.Table, on types.ConditionItem) *Builder\nfunc (b *Builder) InnerJoin(table types.Table, on types.ConditionItem) *Builder\nfunc (b *Builder) LeftJoin(table types.Table, on types.ConditionItem) *Builder\nfunc (b *Builder) RightJoin(table types.Table, on types.ConditionItem) *Builder\nfunc (b *Builder) FullOuterJoin(table types.Table, on types.ConditionItem) *Builder\nfunc (b *Builder) CrossJoin(table types.Table) *Builder Adds JOIN clauses. SELECT and COUNT only.",{"id":3787,"title":3788,"titles":3789,"content":3790,"level":155},"/v0.0.14/reference/api#row-locking","Row Locking",[3560,3690],"func (b *Builder) ForUpdate() *Builder\nfunc (b *Builder) ForNoKeyUpdate() *Builder\nfunc (b *Builder) ForShare() *Builder\nfunc (b *Builder) ForKeyShare() *Builder Adds row locking. SELECT only.",{"id":3792,"title":3793,"titles":3794,"content":3795,"level":155},"/v0.0.14/reference/api#build","Build",[3560,3690],"func (b *Builder) Build() (*types.AST, error) Returns the constructed AST or an error.",{"id":3797,"title":3798,"titles":3799,"content":3800,"level":155},"/v0.0.14/reference/api#mustbuild","MustBuild",[3560,3690],"func (b *Builder) MustBuild() *types.AST Returns the AST or panics on error.",{"id":3802,"title":350,"titles":3803,"content":3804,"level":155},"/v0.0.14/reference/api#render",[3560,3690],"func (b *Builder) Render() (*QueryResult, error) Builds and renders the query to SQL.",{"id":3806,"title":3807,"titles":3808,"content":3809,"level":155},"/v0.0.14/reference/api#mustrender","MustRender",[3560,3690],"func (b *Builder) MustRender() *QueryResult Builds and renders the query or panics on error.",{"id":3811,"title":3812,"titles":3813,"content":99,"level":136},"/v0.0.14/reference/api#set-operations","Set Operations",[3560],{"id":3815,"title":3816,"titles":3817,"content":3818,"level":155},"/v0.0.14/reference/api#union-unionall","Union / UnionAll",[3560,3812],"func (b *Builder) Union(other *Builder) *CompoundBuilder\nfunc (b *Builder) UnionAll(other *Builder) *CompoundBuilder Creates a UNION or UNION ALL between two SELECT queries.",{"id":3820,"title":3821,"titles":3822,"content":3823,"level":155},"/v0.0.14/reference/api#intersect-intersectall","Intersect / IntersectAll",[3560,3812],"func (b *Builder) Intersect(other *Builder) *CompoundBuilder\nfunc (b *Builder) IntersectAll(other *Builder) *CompoundBuilder Creates an INTERSECT between two SELECT queries.",{"id":3825,"title":3826,"titles":3827,"content":3828,"level":155},"/v0.0.14/reference/api#except-exceptall","Except / ExceptAll",[3560,3812],"func (b *Builder) Except(other *Builder) *CompoundBuilder\nfunc (b *Builder) ExceptAll(other *Builder) *CompoundBuilder Creates an EXCEPT between two SELECT queries.",{"id":3830,"title":3831,"titles":3832,"content":99,"level":136},"/v0.0.14/reference/api#rendering","Rendering",[3560],{"id":3834,"title":350,"titles":3835,"content":3836,"level":155},"/v0.0.14/reference/api#render-1",[3560,3831],"func Render(ast *types.AST) (*QueryResult, error) Converts an AST to SQL with parameters.",{"id":3838,"title":3839,"titles":3840,"content":3841,"level":155},"/v0.0.14/reference/api#rendercompound","RenderCompound",[3560,3831],"func RenderCompound(query *types.CompoundQuery) (*QueryResult, error) Renders a compound query (set operations) to SQL.",{"id":3843,"title":3844,"titles":3845,"content":99,"level":136},"/v0.0.14/reference/api#expression-functions","Expression Functions",[3560],{"id":3847,"title":1668,"titles":3848,"content":3849,"level":155},"/v0.0.14/reference/api#aggregates",[3560,3844],"func Sum(field types.Field) types.FieldExpression\nfunc Avg(field types.Field) types.FieldExpression\nfunc Min(field types.Field) types.FieldExpression\nfunc Max(field types.Field) types.FieldExpression\nfunc CountField(field types.Field) types.FieldExpression\nfunc CountDistinct(field types.Field) types.FieldExpression\nfunc CountStar() types.FieldExpression",{"id":3851,"title":3852,"titles":3853,"content":3854,"level":155},"/v0.0.14/reference/api#filter-aggregates","Filter Aggregates",[3560,3844],"func SumFilter(field types.Field, filter types.ConditionItem) types.FieldExpression\nfunc AvgFilter(field types.Field, filter types.ConditionItem) types.FieldExpression\nfunc MinFilter(field types.Field, filter types.ConditionItem) types.FieldExpression\nfunc MaxFilter(field types.Field, filter types.ConditionItem) types.FieldExpression\nfunc CountFieldFilter(field types.Field, filter types.ConditionItem) types.FieldExpression\nfunc CountDistinctFilter(field types.Field, filter types.ConditionItem) types.FieldExpression",{"id":3856,"title":1251,"titles":3857,"content":3858,"level":155},"/v0.0.14/reference/api#conditions",[3560,3844],"func Between(field types.Field, low, high types.Param) types.BetweenCondition\nfunc NotBetween(field types.Field, low, high types.Param) types.BetweenCondition\nfunc CF(left types.Field, op types.Operator, right types.Field) types.FieldComparison",{"id":3860,"title":3006,"titles":3861,"content":3862,"level":155},"/v0.0.14/reference/api#subqueries",[3560,3844],"func Sub(builder *Builder) types.Subquery\nfunc CSub(field types.Field, op types.Operator, subquery types.Subquery) types.SubqueryCondition\nfunc CSubExists(op types.Operator, subquery types.Subquery) types.SubqueryCondition",{"id":3864,"title":3865,"titles":3866,"content":3867,"level":155},"/v0.0.14/reference/api#case-expression","CASE Expression",[3560,3844],"func Case() *CaseBuilder\nfunc (cb *CaseBuilder) When(condition types.ConditionItem, result types.Param) *CaseBuilder\nfunc (cb *CaseBuilder) Else(result types.Param) *CaseBuilder\nfunc (cb *CaseBuilder) As(alias string) *CaseBuilder\nfunc (cb *CaseBuilder) Build() types.FieldExpression",{"id":3869,"title":3870,"titles":3871,"content":3872,"level":155},"/v0.0.14/reference/api#null-handling","Null Handling",[3560,3844],"func Coalesce(values ...types.Param) types.FieldExpression\nfunc NullIf(value1, value2 types.Param) types.FieldExpression",{"id":3874,"title":3203,"titles":3875,"content":3876,"level":155},"/v0.0.14/reference/api#math-functions",[3560,3844],"func Round(field types.Field, precision ...types.Param) types.FieldExpression\nfunc Floor(field types.Field) types.FieldExpression\nfunc Ceil(field types.Field) types.FieldExpression\nfunc Abs(field types.Field) types.FieldExpression\nfunc Power(field types.Field, exponent types.Param) types.FieldExpression\nfunc Sqrt(field types.Field) types.FieldExpression",{"id":3878,"title":3221,"titles":3879,"content":3880,"level":155},"/v0.0.14/reference/api#type-casting",[3560,3844],"func Cast(field types.Field, castType types.CastType) types.FieldExpression",{"id":3882,"title":3173,"titles":3883,"content":3884,"level":155},"/v0.0.14/reference/api#window-functions",[3560,3844],"func RowNumber() *WindowBuilder\nfunc Rank() *WindowBuilder\nfunc DenseRank() *WindowBuilder\nfunc Ntile(n types.Param) *WindowBuilder\nfunc Lag(field types.Field, offset types.Param, defaultVal ...types.Param) *WindowBuilder\nfunc Lead(field types.Field, offset types.Param, defaultVal ...types.Param) *WindowBuilder\nfunc FirstValue(field types.Field) *WindowBuilder\nfunc LastValue(field types.Field) *WindowBuilder\nfunc SumOver(field types.Field) *WindowBuilder\nfunc AvgOver(field types.Field) *WindowBuilder\nfunc CountOver(field ...types.Field) *WindowBuilder\nfunc MinOver(field types.Field) *WindowBuilder\nfunc MaxOver(field types.Field) *WindowBuilder",{"id":3886,"title":3193,"titles":3887,"content":3888,"level":155},"/v0.0.14/reference/api#window-specification",[3560,3844],"func Window() *WindowSpecBuilder\nfunc (wsb *WindowSpecBuilder) PartitionBy(fields ...types.Field) *WindowSpecBuilder\nfunc (wsb *WindowSpecBuilder) OrderBy(field types.Field, direction types.Direction) *WindowSpecBuilder\nfunc (wsb *WindowSpecBuilder) OrderByNulls(field types.Field, direction types.Direction, nulls types.NullsOrdering) *WindowSpecBuilder\nfunc (wsb *WindowSpecBuilder) Rows(start, end types.FrameBound) *WindowSpecBuilder\nfunc (wsb *WindowSpecBuilder) Build() types.WindowSpec",{"id":3890,"title":3891,"titles":3892,"content":3893,"level":155},"/v0.0.14/reference/api#windowbuilder-methods","WindowBuilder Methods",[3560,3844],"func (wb *WindowBuilder) Over(spec types.WindowSpec) *WindowBuilder\nfunc (wb *WindowBuilder) OverBuilder(builder *WindowSpecBuilder) *WindowBuilder\nfunc (wb *WindowBuilder) PartitionBy(fields ...types.Field) *WindowBuilder\nfunc (wb *WindowBuilder) OrderBy(field types.Field, direction types.Direction) *WindowBuilder\nfunc (wb *WindowBuilder) Frame(start, end types.FrameBound) *WindowBuilder\nfunc (wb *WindowBuilder) As(alias string) types.FieldExpression\nfunc (wb *WindowBuilder) Build() types.FieldExpression",{"id":3895,"title":3896,"titles":3897,"content":3898,"level":155},"/v0.0.14/reference/api#expression-alias","Expression Alias",[3560,3844],"func As(expr types.FieldExpression, alias string) types.FieldExpression",{"id":3900,"title":3163,"titles":3901,"content":3902,"level":155},"/v0.0.14/reference/api#having-helpers",[3560,3844],"func HavingCount(op types.Operator, value types.Param) types.AggregateCondition\nfunc HavingCountField(field types.Field, op types.Operator, value types.Param) types.AggregateCondition\nfunc HavingCountDistinct(field types.Field, op types.Operator, value types.Param) types.AggregateCondition\nfunc HavingSum(field types.Field, op types.Operator, value types.Param) types.AggregateCondition\nfunc HavingAvg(field types.Field, op types.Operator, value types.Param) types.AggregateCondition\nfunc HavingMin(field types.Field, op types.Operator, value types.Param) types.AggregateCondition\nfunc HavingMax(field types.Field, op types.Operator, value types.Param) types.AggregateCondition",{"id":3904,"title":3905,"titles":3906,"content":99,"level":136},"/v0.0.14/reference/api#types","Types",[3560],{"id":3908,"title":3909,"titles":3910,"content":3911,"level":155},"/v0.0.14/reference/api#queryresult","QueryResult",[3560,3905],"type QueryResult struct {\n    SQL            string\n    RequiredParams []string\n} Contains the rendered SQL and list of required parameters.",{"id":3913,"title":3914,"titles":3915,"content":3916,"level":155},"/v0.0.14/reference/api#direction","Direction",[3560,3905],"const (\n    ASC  Direction = \"ASC\"\n    DESC Direction = \"DESC\"\n) Sort direction for ORDER BY.",{"id":3918,"title":3919,"titles":3920,"content":3921,"level":155},"/v0.0.14/reference/api#nullsordering","NullsOrdering",[3560,3905],"const (\n    NullsFirst NullsOrdering = \"NULLS FIRST\"\n    NullsLast  NullsOrdering = \"NULLS LAST\"\n) NULL ordering for ORDER BY.",{"id":3923,"title":3924,"titles":3925,"content":3926,"level":155},"/v0.0.14/reference/api#operation","Operation",[3560,3905],"const (\n    OpSelect Operation = \"SELECT\"\n    OpInsert Operation = \"INSERT\"\n    OpUpdate Operation = \"UPDATE\"\n    OpDelete Operation = \"DELETE\"\n    OpCount  Operation = \"COUNT\"\n) Query operation types. html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}",{"id":3928,"title":3929,"titles":3930,"content":3931,"level":107},"/v0.0.14/reference/operators","Operators Reference",[],"All comparison and special operators",{"id":3933,"title":3929,"titles":3934,"content":3935,"level":107},"/v0.0.14/reference/operators#operators-reference",[],"Complete list of operators available in ASTQL.",{"id":3937,"title":2959,"titles":3938,"content":3939,"level":136},"/v0.0.14/reference/operators#comparison-operators",[3929],"Basic comparison operators for WHERE conditions. ConstantSQLDescriptionExampleEQ=Equals\"id\" = :idNE!=Not equals\"status\" != :statusGT>Greater than\"price\" > :minGE>=Greater than or equal\"age\" >= :min_ageLT\u003CLess than\"date\" \u003C :cutoffLE\u003C=Less than or equal\"count\" \u003C= :max",{"id":3941,"title":3341,"titles":3942,"content":3943,"level":155},"/v0.0.14/reference/operators#usage",[3929,2959],"instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"id\"))\n// \"id\" = :id",{"id":3945,"title":2964,"titles":3946,"content":3947,"level":136},"/v0.0.14/reference/operators#pattern-matching",[3929],"String pattern matching operators. ConstantSQLDescriptionExampleLIKELIKEPattern match (case-sensitive)\"name\" LIKE :patternNotLikeNOT LIKEPattern non-match\"name\" NOT LIKE :patternILIKEILIKEPattern match (case-insensitive)\"name\" ILIKE :patternNotILikeNOT ILIKEPattern non-match (case-insensitive)\"name\" NOT ILIKE :pattern",{"id":3949,"title":3341,"titles":3950,"content":3951,"level":155},"/v0.0.14/reference/operators#usage-1",[3929,2964],"instance.C(instance.F(\"email\"), astql.ILIKE, instance.P(\"search\"))\n// \"email\" ILIKE :search\n\n// With wildcards in parameter value\nparams := map[string]any{\"search\": \"%@example.com\"}",{"id":3953,"title":3954,"titles":3955,"content":3956,"level":136},"/v0.0.14/reference/operators#null-operators","NULL Operators",[3929],"Check for NULL values. ConstantSQLDescriptionExampleIsNullIS NULLValue is NULL\"deleted_at\" IS NULLIsNotNullIS NOT NULLValue is not NULL\"verified_at\" IS NOT NULL",{"id":3958,"title":3341,"titles":3959,"content":3960,"level":155},"/v0.0.14/reference/operators#usage-2",[3929,3954],"instance.Null(instance.F(\"deleted_at\"))\n// \"deleted_at\" IS NULL\n\ninstance.NotNull(instance.F(\"email\"))\n// \"email\" IS NOT NULL",{"id":3962,"title":2974,"titles":3963,"content":3964,"level":136},"/v0.0.14/reference/operators#array-operators",[3929],"PostgreSQL array membership operators. ConstantSQLDescriptionExampleIN= ANY()Value in array\"id\" = ANY(:ids)NotIn!= ALL()Value not in array\"status\" != ALL(:excluded)",{"id":3966,"title":3341,"titles":3967,"content":3968,"level":155},"/v0.0.14/reference/operators#usage-3",[3929,2974],"instance.C(instance.F(\"id\"), astql.IN, instance.P(\"ids\"))\n// \"id\" = ANY(:ids)\n\ninstance.C(instance.F(\"status\"), astql.NotIn, instance.P(\"excluded\"))\n// \"status\" != ALL(:excluded)",{"id":3970,"title":3971,"titles":3972,"content":3973,"level":155},"/v0.0.14/reference/operators#with-sqlx","With sqlx",[3929,2974],"import \"github.com/lib/pq\"\n\nparams := map[string]any{\n    \"ids\": pq.Array([]int{1, 2, 3}),\n    \"excluded\": pq.Array([]string{\"draft\", \"deleted\"}),\n}",{"id":3975,"title":3976,"titles":3977,"content":3978,"level":136},"/v0.0.14/reference/operators#subquery-operators","Subquery Operators",[3929],"Operators for subquery conditions. ConstantSQLDescriptionININValue in subquery resultsNotInNOT INValue not in subquery resultsEXISTSEXISTSSubquery returns rowsNotExistsNOT EXISTSSubquery returns no rows",{"id":3980,"title":3341,"titles":3981,"content":3982,"level":155},"/v0.0.14/reference/operators#usage-4",[3929,3976],"// IN subquery\nsubquery := astql.Sub(astql.Select(table).Fields(field))\nastql.CSub(instance.F(\"id\"), astql.IN, subquery)\n// \"id\" IN (SELECT \"user_id\" FROM \"orders\")\n\n// EXISTS\nastql.CSubExists(astql.EXISTS, subquery)\n// EXISTS (SELECT \"id\" FROM \"orders\" WHERE ...)",{"id":3984,"title":3985,"titles":3986,"content":3987,"level":136},"/v0.0.14/reference/operators#regex-operators","Regex Operators",[3929],"PostgreSQL regular expression operators. ConstantSQLDescriptionExampleRegexMatch~Regex match (case-sensitive)\"code\" ~ :patternRegexIMatch~*Regex match (case-insensitive)\"name\" ~* :patternNotRegexMatch!~Regex non-match\"email\" !~ :patternNotRegexIMatch!~*Regex non-match (case-insensitive)\"name\" !~* :pattern",{"id":3989,"title":3341,"titles":3990,"content":3991,"level":155},"/v0.0.14/reference/operators#usage-5",[3929,3985],"instance.C(instance.F(\"code\"), astql.RegexMatch, instance.P(\"pattern\"))\n// \"code\" ~ :pattern\n\nparams := map[string]any{\"pattern\": \"^[A-Z]{3}-[0-9]+$\"}",{"id":3993,"title":3994,"titles":3995,"content":3996,"level":136},"/v0.0.14/reference/operators#postgresql-array-operators","PostgreSQL Array Operators",[3929],"Array containment and overlap operators. ConstantSQLDescriptionExampleArrayContains@>Array contains\"tags\" @> :required_tagsArrayContainedBy\u003C@Array is contained by\"permissions\" \u003C@ :allowedArrayOverlap&&Arrays overlap\"categories\" && :search_cats",{"id":3998,"title":3341,"titles":3999,"content":4000,"level":155},"/v0.0.14/reference/operators#usage-6",[3929,3994],"instance.C(instance.F(\"tags\"), astql.ArrayContains, instance.P(\"required\"))\n// \"tags\" @> :required\n\nparams := map[string]any{\n    \"required\": pq.Array([]string{\"featured\", \"published\"}),\n}",{"id":4002,"title":4003,"titles":4004,"content":4005,"level":136},"/v0.0.14/reference/operators#vector-operators-pgvector","Vector Operators (pgvector)",[3929],"Distance operators for vector similarity search. ConstantSQLDescriptionUse CaseVectorL2Distance\u003C->Euclidean (L2) distanceGeneral similarityVectorCosineDistance\u003C=>Cosine distanceText embeddingsVectorInnerProduct\u003C#>Negative inner productMaximum similarityVectorL1Distance\u003C+>Manhattan (L1) distanceSparse vectors",{"id":4007,"title":3341,"titles":4008,"content":4009,"level":155},"/v0.0.14/reference/operators#usage-7",[3929,4003],"// In WHERE clause\ninstance.C(instance.F(\"embedding\"), astql.VectorL2Distance, instance.P(\"query\"))\n// \"embedding\" \u003C-> :query\n\n// In ORDER BY (most common)\nquery.OrderByExpr(\n    instance.F(\"embedding\"),\n    astql.VectorCosineDistance,\n    instance.P(\"query_embedding\"),\n    astql.ASC,\n)\n// ORDER BY \"embedding\" \u003C=> :query_embedding ASC",{"id":4011,"title":4012,"titles":4013,"content":4014,"level":155},"/v0.0.14/reference/operators#with-pgvector","With pgvector",[3929,4003],"import \"github.com/pgvector/pgvector-go\"\n\nembedding := pgvector.NewVector([]float32{0.1, 0.2, 0.3, ...})\nparams := map[string]any{\"query_embedding\": embedding}",{"id":4016,"title":4017,"titles":4018,"content":4019,"level":136},"/v0.0.14/reference/operators#operator-selection-guide","Operator Selection Guide",[3929],"NeedOperatorExact matchEQNot equalNERange checkGT, GE, LT, LEPattern searchLIKE, ILIKENULL checkIsNull, IsNotNullList membershipIN, NotInRegex matchRegexMatch, RegexIMatchArray containmentArrayContains, ArrayContainedByVector similarityVectorL2Distance, VectorCosineDistanceSubquery checkEXISTS, NotExists",{"id":4021,"title":3124,"titles":4022,"content":4023,"level":136},"/v0.0.14/reference/operators#aggregate-functions",[3929],"For use with SelectExpr and aggregate expressions. ConstantSQLDescriptionAggSumSUM()Sum of valuesAggAvgAVG()Average of valuesAggMinMIN()Minimum valueAggMaxMAX()Maximum valueAggCountFieldCOUNT()Count of valuesAggCountDistinctCOUNT(DISTINCT)Count of unique values",{"id":4025,"title":3173,"titles":4026,"content":4027,"level":136},"/v0.0.14/reference/operators#window-functions",[3929],"For use with window expressions. ConstantSQLDescriptionWinRowNumberROW_NUMBER()Sequential row numberWinRankRANK()Rank with gapsWinDenseRankDENSE_RANK()Rank without gapsWinNtileNTILE(:param)Divide into n bucketsWinLagLAG()Previous row valueWinLeadLEAD()Next row valueWinFirstValueFIRST_VALUE()First value in windowWinLastValueLAST_VALUE()Last value in window",{"id":4029,"title":3198,"titles":4030,"content":4031,"level":136},"/v0.0.14/reference/operators#frame-bounds",[3929],"For window frame specifications. ConstantSQLFrameUnboundedPrecedingUNBOUNDED PRECEDINGFrameCurrentRowCURRENT ROWFrameUnboundedFollowingUNBOUNDED FOLLOWING",{"id":4033,"title":4034,"titles":4035,"content":4036,"level":136},"/v0.0.14/reference/operators#cast-types","Cast Types",[3929],"For type casting with Cast(). ConstantPostgreSQL TypeCastTextTEXTCastIntegerINTEGERCastBigintBIGINTCastSmallintSMALLINTCastNumericNUMERICCastRealREALCastDoublePrecisionDOUBLE PRECISIONCastBooleanBOOLEANCastDateDATECastTimeTIMECastTimestampTIMESTAMPCastTimestampTZTIMESTAMPTZCastIntervalINTERVALCastUUIDUUIDCastJSONJSONCastJSONBJSONBCastByteaBYTEA html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}",{"id":4038,"title":1614,"titles":4039,"content":2581,"level":107},"/v0.0.15/overview",[],{"id":4041,"title":1614,"titles":4042,"content":2585,"level":107},"/v0.0.15/overview#overview",[],{"id":4044,"title":1237,"titles":4045,"content":2589,"level":136},"/v0.0.15/overview#architecture",[1614],{"id":4047,"title":2592,"titles":4048,"content":2594,"level":136},"/v0.0.15/overview#philosophy",[1614],{"id":4050,"title":1187,"titles":4051,"content":2598,"level":136},"/v0.0.15/overview#capabilities",[1614],{"id":4053,"title":2601,"titles":4054,"content":99,"level":136},"/v0.0.15/overview#priorities",[1614],{"id":4056,"title":1782,"titles":4057,"content":2606,"level":155},"/v0.0.15/overview#security",[1614,2601],{"id":4059,"title":2609,"titles":4060,"content":2611,"level":155},"/v0.0.15/overview#ergonomics",[1614,2601],{"id":4062,"title":2614,"titles":4063,"content":2616,"level":155},"/v0.0.15/overview#postgresql-focus",[1614,2601],{"id":4065,"title":1628,"titles":4066,"content":2620,"level":107},"/v0.0.15/learn/quickstart",[],{"id":4068,"title":1628,"titles":4069,"content":99,"level":107},"/v0.0.15/learn/quickstart#quickstart",[],{"id":4071,"title":2626,"titles":4072,"content":2628,"level":136},"/v0.0.15/learn/quickstart#requirements",[1628],{"id":4074,"title":2631,"titles":4075,"content":2633,"level":136},"/v0.0.15/learn/quickstart#installation",[1628],{"id":4077,"title":2636,"titles":4078,"content":2638,"level":136},"/v0.0.15/learn/quickstart#basic-usage",[1628],{"id":4080,"title":2641,"titles":4081,"content":2643,"level":136},"/v0.0.15/learn/quickstart#whats-happening",[1628],{"id":4083,"title":2646,"titles":4084,"content":2648,"level":136},"/v0.0.15/learn/quickstart#using-with-sqlx",[1628],{"id":4086,"title":2651,"titles":4087,"content":2653,"level":107},"/v0.0.15/learn/concepts",[],{"id":4089,"title":2651,"titles":4090,"content":2657,"level":107},"/v0.0.15/learn/concepts#core-concepts",[],{"id":4092,"title":2660,"titles":4093,"content":2662,"level":136},"/v0.0.15/learn/concepts#tables",[2651],{"id":4095,"title":2665,"titles":4096,"content":2667,"level":136},"/v0.0.15/learn/concepts#fields",[2651],{"id":4098,"title":2670,"titles":4099,"content":2672,"level":155},"/v0.0.15/learn/concepts#field-validation",[2651,2665],{"id":4101,"title":2675,"titles":4102,"content":2677,"level":136},"/v0.0.15/learn/concepts#params",[2651],{"id":4104,"title":2680,"titles":4105,"content":2682,"level":155},"/v0.0.15/learn/concepts#parameter-validation",[2651,2675],{"id":4107,"title":1251,"titles":4108,"content":2686,"level":136},"/v0.0.15/learn/concepts#conditions",[2651],{"id":4110,"title":1727,"titles":4111,"content":2690,"level":155},"/v0.0.15/learn/concepts#operators",[2651,1251],{"id":4113,"title":2693,"titles":4114,"content":2695,"level":155},"/v0.0.15/learn/concepts#combining-conditions",[2651,1251],{"id":4116,"title":2698,"titles":4117,"content":2700,"level":155},"/v0.0.15/learn/concepts#nested-conditions",[2651,1251],{"id":4119,"title":2703,"titles":4120,"content":2705,"level":155},"/v0.0.15/learn/concepts#null-conditions",[2651,1251],{"id":4122,"title":2708,"titles":4123,"content":2710,"level":155},"/v0.0.15/learn/concepts#field-comparisons",[2651,1251],{"id":4125,"title":2713,"titles":4126,"content":2715,"level":136},"/v0.0.15/learn/concepts#builders",[2651],{"id":4128,"title":2718,"titles":4129,"content":2720,"level":155},"/v0.0.15/learn/concepts#fluent-api",[2651,2713],{"id":4131,"title":2723,"titles":4132,"content":2725,"level":155},"/v0.0.15/learn/concepts#build-vs-render",[2651,2713],{"id":4134,"title":2728,"titles":4135,"content":2730,"level":155},"/v0.0.15/learn/concepts#must-variants",[2651,2713],{"id":4137,"title":2733,"titles":4138,"content":2735,"level":136},"/v0.0.15/learn/concepts#try-variants",[2651],{"id":4140,"title":2738,"titles":4141,"content":2740,"level":136},"/v0.0.15/learn/concepts#query-result",[2651],{"id":4143,"title":1237,"titles":4144,"content":2744,"level":107},"/v0.0.15/learn/architecture",[],{"id":4146,"title":1237,"titles":4147,"content":2748,"level":107},"/v0.0.15/learn/architecture#architecture",[],{"id":4149,"title":2751,"titles":4150,"content":2753,"level":136},"/v0.0.15/learn/architecture#pipeline-overview",[1237],{"id":4152,"title":2756,"titles":4153,"content":99,"level":136},"/v0.0.15/learn/architecture#validation-layer",[1237],{"id":4155,"title":1215,"titles":4156,"content":2761,"level":155},"/v0.0.15/learn/architecture#schema-validation",[1237,2756],{"id":4158,"title":2764,"titles":4159,"content":2766,"level":155},"/v0.0.15/learn/architecture#identifier-validation",[1237,2756],{"id":4161,"title":2769,"titles":4162,"content":2771,"level":155},"/v0.0.15/learn/architecture#alias-restrictions",[1237,2756],{"id":4164,"title":2774,"titles":4165,"content":2776,"level":136},"/v0.0.15/learn/architecture#ast-structure",[1237],{"id":4167,"title":2779,"titles":4168,"content":2781,"level":155},"/v0.0.15/learn/architecture#internal-types",[1237,2774],{"id":4170,"title":2784,"titles":4171,"content":2786,"level":155},"/v0.0.15/learn/architecture#condition-types",[1237,2774],{"id":4173,"title":2789,"titles":4174,"content":2791,"level":136},"/v0.0.15/learn/architecture#render-engine",[1237],{"id":4176,"title":2794,"titles":4177,"content":2796,"level":155},"/v0.0.15/learn/architecture#identifier-quoting",[1237,2789],{"id":4179,"title":2799,"titles":4180,"content":2801,"level":155},"/v0.0.15/learn/architecture#parameter-placeholders",[1237,2789],{"id":4182,"title":2804,"titles":4183,"content":2806,"level":155},"/v0.0.15/learn/architecture#parameter-namespacing",[1237,2789],{"id":4185,"title":2809,"titles":4186,"content":2811,"level":136},"/v0.0.15/learn/architecture#file-structure",[1237],{"id":4188,"title":2814,"titles":4189,"content":2816,"level":136},"/v0.0.15/learn/architecture#security-layers",[1237],{"id":4191,"title":2819,"titles":4192,"content":99,"level":136},"/v0.0.15/learn/architecture#extension-points",[1237],{"id":4194,"title":2823,"titles":4195,"content":2825,"level":155},"/v0.0.15/learn/architecture#custom-expressions",[1237,2819],{"id":4197,"title":2828,"titles":4198,"content":2830,"level":155},"/v0.0.15/learn/architecture#compound-queries",[1237,2819],{"id":4200,"title":2833,"titles":4201,"content":2835,"level":155},"/v0.0.15/learn/architecture#direct-ast-access",[1237,2819],{"id":4203,"title":1215,"titles":4204,"content":2839,"level":107},"/v0.0.15/guides/schema-validation",[],{"id":4206,"title":1215,"titles":4207,"content":2843,"level":107},"/v0.0.15/guides/schema-validation#schema-validation",[],{"id":4209,"title":2846,"titles":4210,"content":2848,"level":136},"/v0.0.15/guides/schema-validation#defining-a-schema",[1215],{"id":4212,"title":2851,"titles":4213,"content":2853,"level":136},"/v0.0.15/guides/schema-validation#creating-an-instance",[1215],{"id":4215,"title":2856,"titles":4216,"content":99,"level":136},"/v0.0.15/guides/schema-validation#validation-behavior",[1215],{"id":4218,"title":2860,"titles":4219,"content":2862,"level":155},"/v0.0.15/guides/schema-validation#table-validation",[1215,2856],{"id":4221,"title":2670,"titles":4222,"content":2866,"level":155},"/v0.0.15/guides/schema-validation#field-validation",[1215,2856],{"id":4224,"title":2680,"titles":4225,"content":2870,"level":155},"/v0.0.15/guides/schema-validation#parameter-validation",[1215,2856],{"id":4227,"title":2873,"titles":4228,"content":2875,"level":136},"/v0.0.15/guides/schema-validation#panic-vs-error",[1215],{"id":4230,"title":2733,"titles":4231,"content":2879,"level":155},"/v0.0.15/guides/schema-validation#try-variants",[1215,2873],{"id":4233,"title":2882,"titles":4234,"content":2884,"level":155},"/v0.0.15/guides/schema-validation#when-to-use-each",[1215,2873],{"id":4236,"title":2887,"titles":4237,"content":2889,"level":136},"/v0.0.15/guides/schema-validation#table-aliases",[1215],{"id":4239,"title":2769,"titles":4240,"content":2893,"level":155},"/v0.0.15/guides/schema-validation#alias-restrictions",[1215,2887],{"id":4242,"title":2896,"titles":4243,"content":2898,"level":155},"/v0.0.15/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":4245,"title":2901,"titles":4246,"content":99,"level":136},"/v0.0.15/guides/schema-validation#schema-organization",[1215],{"id":4248,"title":2905,"titles":4249,"content":2907,"level":155},"/v0.0.15/guides/schema-validation#single-schema-instance",[1215,2901],{"id":4251,"title":2910,"titles":4252,"content":2912,"level":155},"/v0.0.15/guides/schema-validation#multiple-schemas",[1215,2901],{"id":4254,"title":2915,"titles":4255,"content":99,"level":136},"/v0.0.15/guides/schema-validation#dynamic-queries",[1215],{"id":4257,"title":2919,"titles":4258,"content":2921,"level":155},"/v0.0.15/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":4260,"title":2924,"titles":4261,"content":2926,"level":155},"/v0.0.15/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":4263,"title":2929,"titles":4264,"content":99,"level":136},"/v0.0.15/guides/schema-validation#validation-errors",[1215],{"id":4266,"title":2933,"titles":4267,"content":2935,"level":155},"/v0.0.15/guides/schema-validation#error-types",[1215,2929],{"id":4269,"title":2938,"titles":4270,"content":2940,"level":155},"/v0.0.15/guides/schema-validation#handling-errors",[1215,2929],{"id":4272,"title":1251,"titles":4273,"content":2944,"level":107},"/v0.0.15/guides/conditions",[],{"id":4275,"title":1251,"titles":4276,"content":2948,"level":107},"/v0.0.15/guides/conditions#conditions",[],{"id":4278,"title":2951,"titles":4279,"content":2953,"level":136},"/v0.0.15/guides/conditions#basic-conditions",[1251],{"id":4281,"title":1727,"titles":4282,"content":99,"level":136},"/v0.0.15/guides/conditions#operators",[1251],{"id":4284,"title":2959,"titles":4285,"content":2961,"level":155},"/v0.0.15/guides/conditions#comparison-operators",[1251,1727],{"id":4287,"title":2964,"titles":4288,"content":2966,"level":155},"/v0.0.15/guides/conditions#pattern-matching",[1251,1727],{"id":4290,"title":2969,"titles":4291,"content":2971,"level":155},"/v0.0.15/guides/conditions#null-checks",[1251,1727],{"id":4293,"title":2974,"titles":4294,"content":2976,"level":155},"/v0.0.15/guides/conditions#array-operators",[1251,1727],{"id":4296,"title":2693,"titles":4297,"content":99,"level":136},"/v0.0.15/guides/conditions#combining-conditions",[1251],{"id":4299,"title":2982,"titles":4300,"content":2984,"level":155},"/v0.0.15/guides/conditions#and",[1251,2693],{"id":4302,"title":2987,"titles":4303,"content":2989,"level":155},"/v0.0.15/guides/conditions#or",[1251,2693],{"id":4305,"title":2992,"titles":4306,"content":2994,"level":155},"/v0.0.15/guides/conditions#nested-logic",[1251,2693],{"id":4308,"title":2997,"titles":4309,"content":2999,"level":136},"/v0.0.15/guides/conditions#between",[1251],{"id":4311,"title":2708,"titles":4312,"content":3003,"level":136},"/v0.0.15/guides/conditions#field-comparisons",[1251],{"id":4314,"title":3006,"titles":4315,"content":99,"level":136},"/v0.0.15/guides/conditions#subqueries",[1251],{"id":4317,"title":3010,"titles":4318,"content":3012,"level":155},"/v0.0.15/guides/conditions#in-subquery",[1251,3006],{"id":4320,"title":3015,"titles":4321,"content":3017,"level":155},"/v0.0.15/guides/conditions#not-in-subquery",[1251,3006],{"id":4323,"title":3020,"titles":4324,"content":3022,"level":155},"/v0.0.15/guides/conditions#exists",[1251,3006],{"id":4326,"title":3025,"titles":4327,"content":3027,"level":155},"/v0.0.15/guides/conditions#not-exists",[1251,3006],{"id":4329,"title":2804,"titles":4330,"content":3031,"level":155},"/v0.0.15/guides/conditions#parameter-namespacing",[1251,3006],{"id":4332,"title":3034,"titles":4333,"content":3036,"level":136},"/v0.0.15/guides/conditions#multiple-where-clauses",[1251],{"id":4335,"title":3039,"titles":4336,"content":3041,"level":136},"/v0.0.15/guides/conditions#wherefield-shorthand",[1251],{"id":4338,"title":3044,"titles":4339,"content":3046,"level":136},"/v0.0.15/guides/conditions#building-conditions-dynamically",[1251],{"id":4341,"title":1265,"titles":4342,"content":3050,"level":107},"/v0.0.15/guides/joins",[],{"id":4344,"title":1265,"titles":4345,"content":3054,"level":107},"/v0.0.15/guides/joins#joins",[],{"id":4347,"title":3057,"titles":4348,"content":3059,"level":136},"/v0.0.15/guides/joins#join-types",[1265],{"id":4350,"title":3062,"titles":4351,"content":3064,"level":136},"/v0.0.15/guides/joins#basic-join",[1265],{"id":4353,"title":2887,"titles":4354,"content":3068,"level":136},"/v0.0.15/guides/joins#table-aliases",[1265],{"id":4356,"title":3071,"titles":4357,"content":3073,"level":136},"/v0.0.15/guides/joins#left-join",[1265],{"id":4359,"title":3076,"titles":4360,"content":3078,"level":136},"/v0.0.15/guides/joins#right-join",[1265],{"id":4362,"title":3081,"titles":4363,"content":3083,"level":136},"/v0.0.15/guides/joins#full-outer-join",[1265],{"id":4365,"title":3086,"titles":4366,"content":3088,"level":136},"/v0.0.15/guides/joins#cross-join",[1265],{"id":4368,"title":3091,"titles":4369,"content":3093,"level":136},"/v0.0.15/guides/joins#multiple-joins",[1265],{"id":4371,"title":3096,"titles":4372,"content":3098,"level":136},"/v0.0.15/guides/joins#complex-on-conditions",[1265],{"id":4374,"title":3101,"titles":4375,"content":3103,"level":136},"/v0.0.15/guides/joins#self-joins",[1265],{"id":4377,"title":3106,"titles":4378,"content":3108,"level":136},"/v0.0.15/guides/joins#joins-with-count",[1265],{"id":4380,"title":3111,"titles":4381,"content":3113,"level":136},"/v0.0.15/guides/joins#join-validation",[1265],{"id":4383,"title":1668,"titles":4384,"content":3117,"level":107},"/v0.0.15/guides/aggregates",[],{"id":4386,"title":1668,"titles":4387,"content":3121,"level":107},"/v0.0.15/guides/aggregates#aggregates",[],{"id":4389,"title":3124,"titles":4390,"content":99,"level":136},"/v0.0.15/guides/aggregates#aggregate-functions",[1668],{"id":4392,"title":3128,"titles":4393,"content":3130,"level":155},"/v0.0.15/guides/aggregates#basic-aggregates",[1668,3124],{"id":4395,"title":3133,"titles":4396,"content":3135,"level":155},"/v0.0.15/guides/aggregates#using-aggregates",[1668,3124],{"id":4398,"title":3138,"titles":4399,"content":3140,"level":155},"/v0.0.15/guides/aggregates#aliases",[1668,3124],{"id":4401,"title":3143,"titles":4402,"content":3145,"level":136},"/v0.0.15/guides/aggregates#group-by",[1668],{"id":4404,"title":3148,"titles":4405,"content":3150,"level":136},"/v0.0.15/guides/aggregates#having",[1668],{"id":4407,"title":3153,"titles":4408,"content":3155,"level":155},"/v0.0.15/guides/aggregates#simple-having",[1668,3148],{"id":4410,"title":3158,"titles":4411,"content":3160,"level":155},"/v0.0.15/guides/aggregates#aggregate-having",[1668,3148],{"id":4413,"title":3163,"titles":4414,"content":3165,"level":155},"/v0.0.15/guides/aggregates#having-helpers",[1668,3148],{"id":4416,"title":3168,"titles":4417,"content":3170,"level":136},"/v0.0.15/guides/aggregates#filter-clause",[1668],{"id":4419,"title":3173,"titles":4420,"content":3175,"level":136},"/v0.0.15/guides/aggregates#window-functions",[1668],{"id":4422,"title":3178,"titles":4423,"content":3180,"level":155},"/v0.0.15/guides/aggregates#basic-window-functions",[1668,3173],{"id":4425,"title":3183,"titles":4426,"content":3185,"level":155},"/v0.0.15/guides/aggregates#window-function-types",[1668,3173],{"id":4428,"title":3188,"titles":4429,"content":3190,"level":155},"/v0.0.15/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":4431,"title":3193,"titles":4432,"content":3195,"level":155},"/v0.0.15/guides/aggregates#window-specification",[1668,3173],{"id":4434,"title":3198,"titles":4435,"content":3200,"level":155},"/v0.0.15/guides/aggregates#frame-bounds",[1668,3173],{"id":4437,"title":3203,"titles":4438,"content":99,"level":136},"/v0.0.15/guides/aggregates#math-functions",[1668],{"id":4440,"title":3207,"titles":4441,"content":3209,"level":155},"/v0.0.15/guides/aggregates#available-functions",[1668,3203],{"id":4443,"title":3212,"titles":4444,"content":3214,"level":155},"/v0.0.15/guides/aggregates#example",[1668,3203],{"id":4446,"title":1270,"titles":4447,"content":3218,"level":136},"/v0.0.15/guides/aggregates#case-expressions",[1668],{"id":4449,"title":3221,"titles":4450,"content":3223,"level":136},"/v0.0.15/guides/aggregates#type-casting",[1668],{"id":4452,"title":3226,"titles":4453,"content":3228,"level":136},"/v0.0.15/guides/aggregates#coalesce-and-nullif",[1668],{"id":4455,"title":1675,"titles":4456,"content":3232,"level":107},"/v0.0.15/guides/testing",[],{"id":4458,"title":1675,"titles":4459,"content":3236,"level":107},"/v0.0.15/guides/testing#testing",[],{"id":4461,"title":3239,"titles":4462,"content":99,"level":136},"/v0.0.15/guides/testing#testing-query-output",[1675],{"id":4464,"title":3243,"titles":4465,"content":3245,"level":155},"/v0.0.15/guides/testing#basic-output-testing",[1675,3239],{"id":4467,"title":3248,"titles":4468,"content":3250,"level":155},"/v0.0.15/guides/testing#test-instance-setup",[1675,3239],{"id":4470,"title":3253,"titles":4471,"content":99,"level":136},"/v0.0.15/guides/testing#table-driven-tests",[1675],{"id":4473,"title":3257,"titles":4474,"content":3259,"level":155},"/v0.0.15/guides/testing#testing-multiple-queries",[1675,3253],{"id":4476,"title":3262,"titles":4477,"content":99,"level":136},"/v0.0.15/guides/testing#testing-validation",[1675],{"id":4479,"title":3266,"titles":4480,"content":3268,"level":155},"/v0.0.15/guides/testing#testing-invalid-input",[1675,3262],{"id":4482,"title":3271,"titles":4483,"content":3273,"level":155},"/v0.0.15/guides/testing#testing-try-variants",[1675,3262],{"id":4485,"title":3276,"titles":4486,"content":99,"level":136},"/v0.0.15/guides/testing#testing-error-cases",[1675],{"id":4488,"title":3280,"titles":4489,"content":3282,"level":155},"/v0.0.15/guides/testing#builder-errors",[1675,3276],{"id":4491,"title":3285,"titles":4492,"content":99,"level":136},"/v0.0.15/guides/testing#testing-complex-queries",[1675],{"id":4494,"title":3289,"titles":4495,"content":3291,"level":155},"/v0.0.15/guides/testing#join-tests",[1675,3285],{"id":4497,"title":3294,"titles":4498,"content":3296,"level":155},"/v0.0.15/guides/testing#subquery-tests",[1675,3285],{"id":4500,"title":3299,"titles":4501,"content":3301,"level":136},"/v0.0.15/guides/testing#snapshot-testing",[1675],{"id":4503,"title":3304,"titles":4504,"content":99,"level":136},"/v0.0.15/guides/testing#best-practices",[1675],{"id":4506,"title":3308,"titles":4507,"content":3310,"level":155},"/v0.0.15/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":4509,"title":3313,"titles":4510,"content":3315,"level":155},"/v0.0.15/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":4512,"title":3318,"titles":4513,"content":3320,"level":155},"/v0.0.15/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":4515,"title":3323,"titles":4516,"content":3325,"level":155},"/v0.0.15/guides/testing#_4-test-edge-cases",[1675,3304],{"id":4518,"title":1688,"titles":4519,"content":3329,"level":107},"/v0.0.15/cookbook/pagination",[],{"id":4521,"title":1688,"titles":4522,"content":3333,"level":107},"/v0.0.15/cookbook/pagination#pagination",[],{"id":4524,"title":3336,"titles":4525,"content":3338,"level":136},"/v0.0.15/cookbook/pagination#offset-pagination",[1688],{"id":4527,"title":3341,"titles":4528,"content":3343,"level":155},"/v0.0.15/cookbook/pagination#usage",[1688,3336],{"id":4530,"title":3346,"titles":4531,"content":3348,"level":155},"/v0.0.15/cookbook/pagination#with-total-count",[1688,3336],{"id":4533,"title":3351,"titles":4534,"content":3353,"level":155},"/v0.0.15/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":4536,"title":3356,"titles":4537,"content":3358,"level":136},"/v0.0.15/cookbook/pagination#cursor-pagination",[1688],{"id":4539,"title":3341,"titles":4540,"content":3362,"level":155},"/v0.0.15/cookbook/pagination#usage-1",[1688,3356],{"id":4542,"title":3365,"titles":4543,"content":3367,"level":155},"/v0.0.15/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":4545,"title":3370,"titles":4546,"content":3372,"level":155},"/v0.0.15/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":4548,"title":3375,"titles":4549,"content":3377,"level":136},"/v0.0.15/cookbook/pagination#filtering-with-pagination",[1688],{"id":4551,"title":3380,"titles":4552,"content":3382,"level":136},"/v0.0.15/cookbook/pagination#pagination-with-joins",[1688],{"id":4554,"title":3304,"titles":4555,"content":99,"level":136},"/v0.0.15/cookbook/pagination#best-practices",[1688],{"id":4557,"title":3388,"titles":4558,"content":3390,"level":155},"/v0.0.15/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":4560,"title":3393,"titles":4561,"content":3395,"level":155},"/v0.0.15/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":4563,"title":3398,"titles":4564,"content":3400,"level":155},"/v0.0.15/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":4566,"title":3403,"titles":4567,"content":3405,"level":155},"/v0.0.15/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":4569,"title":1695,"titles":4570,"content":3409,"level":107},"/v0.0.15/cookbook/vector-search",[],{"id":4572,"title":1695,"titles":4573,"content":3413,"level":107},"/v0.0.15/cookbook/vector-search#vector-search",[],{"id":4575,"title":3416,"titles":4576,"content":3418,"level":136},"/v0.0.15/cookbook/vector-search#schema-setup",[1695],{"id":4578,"title":3421,"titles":4579,"content":3423,"level":136},"/v0.0.15/cookbook/vector-search#distance-operators",[1695],{"id":4581,"title":3426,"titles":4582,"content":3428,"level":136},"/v0.0.15/cookbook/vector-search#basic-similarity-search",[1695],{"id":4584,"title":3431,"titles":4585,"content":3433,"level":155},"/v0.0.15/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":4587,"title":3436,"titles":4588,"content":3438,"level":136},"/v0.0.15/cookbook/vector-search#cosine-similarity",[1695],{"id":4590,"title":3441,"titles":4591,"content":3443,"level":136},"/v0.0.15/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":4593,"title":3446,"titles":4594,"content":3448,"level":136},"/v0.0.15/cookbook/vector-search#filtered-vector-search",[1695],{"id":4596,"title":3451,"titles":4597,"content":3453,"level":136},"/v0.0.15/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":4599,"title":3456,"titles":4600,"content":3458,"level":136},"/v0.0.15/cookbook/vector-search#hybrid-search",[1695],{"id":4602,"title":3461,"titles":4603,"content":3463,"level":136},"/v0.0.15/cookbook/vector-search#multi-vector-search",[1695],{"id":4605,"title":3466,"titles":4606,"content":3468,"level":136},"/v0.0.15/cookbook/vector-search#indexing-recommendations",[1695],{"id":4608,"title":3304,"titles":4609,"content":99,"level":136},"/v0.0.15/cookbook/vector-search#best-practices",[1695],{"id":4611,"title":3474,"titles":4612,"content":3476,"level":155},"/v0.0.15/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":4614,"title":3479,"titles":4615,"content":3481,"level":155},"/v0.0.15/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":4617,"title":3484,"titles":4618,"content":3486,"level":155},"/v0.0.15/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":4620,"title":1702,"titles":4621,"content":3490,"level":107},"/v0.0.15/cookbook/upserts",[],{"id":4623,"title":1702,"titles":4624,"content":3494,"level":107},"/v0.0.15/cookbook/upserts#upserts",[],{"id":4626,"title":3497,"titles":4627,"content":3499,"level":136},"/v0.0.15/cookbook/upserts#basic-upsert",[1702],{"id":4629,"title":3502,"titles":4630,"content":3504,"level":136},"/v0.0.15/cookbook/upserts#do-nothing",[1702],{"id":4632,"title":3507,"titles":4633,"content":3509,"level":136},"/v0.0.15/cookbook/upserts#multi-column-conflict",[1702],{"id":4635,"title":3512,"titles":4636,"content":3514,"level":136},"/v0.0.15/cookbook/upserts#returning-with-upsert",[1702],{"id":4638,"title":3517,"titles":4639,"content":3519,"level":136},"/v0.0.15/cookbook/upserts#batch-upsert",[1702],{"id":4641,"title":3522,"titles":4642,"content":3524,"level":136},"/v0.0.15/cookbook/upserts#conditional-upsert",[1702],{"id":4644,"title":3527,"titles":4645,"content":3529,"level":136},"/v0.0.15/cookbook/upserts#sync-pattern",[1702],{"id":4647,"title":3532,"titles":4648,"content":3534,"level":136},"/v0.0.15/cookbook/upserts#upsert-with-timestamps",[1702],{"id":4650,"title":3304,"titles":4651,"content":99,"level":136},"/v0.0.15/cookbook/upserts#best-practices",[1702],{"id":4653,"title":3540,"titles":4654,"content":3542,"level":155},"/v0.0.15/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":4656,"title":3545,"titles":4657,"content":3547,"level":155},"/v0.0.15/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":4659,"title":3550,"titles":4660,"content":3552,"level":155},"/v0.0.15/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":4662,"title":3555,"titles":4663,"content":3557,"level":155},"/v0.0.15/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":4665,"title":3560,"titles":4666,"content":3562,"level":107},"/v0.0.15/reference/api",[],{"id":4668,"title":3560,"titles":4669,"content":3566,"level":107},"/v0.0.15/reference/api#api-reference",[],{"id":4671,"title":3569,"titles":4672,"content":99,"level":136},"/v0.0.15/reference/api#instance-creation",[3560],{"id":4674,"title":856,"titles":4675,"content":3574,"level":155},"/v0.0.15/reference/api#newfromdbml",[3560,3569],{"id":4677,"title":3577,"titles":4678,"content":99,"level":136},"/v0.0.15/reference/api#instance-methods",[3560],{"id":4680,"title":119,"titles":4681,"content":3582,"level":155},"/v0.0.15/reference/api#t",[3560,3577],{"id":4683,"title":3585,"titles":4684,"content":3587,"level":155},"/v0.0.15/reference/api#tryt",[3560,3577],{"id":4686,"title":169,"titles":4687,"content":3591,"level":155},"/v0.0.15/reference/api#f",[3560,3577],{"id":4689,"title":3594,"titles":4690,"content":3596,"level":155},"/v0.0.15/reference/api#tryf",[3560,3577],{"id":4692,"title":316,"titles":4693,"content":3600,"level":155},"/v0.0.15/reference/api#p",[3560,3577],{"id":4695,"title":3603,"titles":4696,"content":3605,"level":155},"/v0.0.15/reference/api#tryp",[3560,3577],{"id":4698,"title":284,"titles":4699,"content":3609,"level":155},"/v0.0.15/reference/api#c",[3560,3577],{"id":4701,"title":3612,"titles":4702,"content":3614,"level":155},"/v0.0.15/reference/api#tryc",[3560,3577],{"id":4704,"title":3617,"titles":4705,"content":3619,"level":155},"/v0.0.15/reference/api#and",[3560,3577],{"id":4707,"title":3622,"titles":4708,"content":3624,"level":155},"/v0.0.15/reference/api#or",[3560,3577],{"id":4710,"title":3627,"titles":4711,"content":3629,"level":155},"/v0.0.15/reference/api#null",[3560,3577],{"id":4713,"title":3632,"titles":4714,"content":3634,"level":155},"/v0.0.15/reference/api#notnull",[3560,3577],{"id":4716,"title":3637,"titles":4717,"content":3639,"level":155},"/v0.0.15/reference/api#withtable",[3560,3577],{"id":4719,"title":3642,"titles":4720,"content":3644,"level":155},"/v0.0.15/reference/api#trywithtable",[3560,3577],{"id":4722,"title":3647,"titles":4723,"content":3649,"level":155},"/v0.0.15/reference/api#aggc",[3560,3577],{"id":4725,"title":3652,"titles":4726,"content":3654,"level":155},"/v0.0.15/reference/api#tryaggc",[3560,3577],{"id":4728,"title":3657,"titles":4729,"content":3659,"level":155},"/v0.0.15/reference/api#valuemap",[3560,3577],{"id":4731,"title":3662,"titles":4732,"content":99,"level":136},"/v0.0.15/reference/api#query-builders",[3560],{"id":4734,"title":219,"titles":4735,"content":3667,"level":155},"/v0.0.15/reference/api#select",[3560,3662],{"id":4737,"title":3670,"titles":4738,"content":3672,"level":155},"/v0.0.15/reference/api#insert",[3560,3662],{"id":4740,"title":3675,"titles":4741,"content":3677,"level":155},"/v0.0.15/reference/api#update",[3560,3662],{"id":4743,"title":3680,"titles":4744,"content":3682,"level":155},"/v0.0.15/reference/api#delete",[3560,3662],{"id":4746,"title":3685,"titles":4747,"content":3687,"level":155},"/v0.0.15/reference/api#count",[3560,3662],{"id":4749,"title":3690,"titles":4750,"content":99,"level":136},"/v0.0.15/reference/api#builder-methods",[3560],{"id":4752,"title":2665,"titles":4753,"content":3695,"level":155},"/v0.0.15/reference/api#fields",[3560,3690],{"id":4755,"title":3698,"titles":4756,"content":3700,"level":155},"/v0.0.15/reference/api#where",[3560,3690],{"id":4758,"title":3703,"titles":4759,"content":3705,"level":155},"/v0.0.15/reference/api#wherefield",[3560,3690],{"id":4761,"title":3708,"titles":4762,"content":3710,"level":155},"/v0.0.15/reference/api#orderby",[3560,3690],{"id":4764,"title":3713,"titles":4765,"content":3715,"level":155},"/v0.0.15/reference/api#orderbynulls",[3560,3690],{"id":4767,"title":3718,"titles":4768,"content":3720,"level":155},"/v0.0.15/reference/api#orderbyexpr",[3560,3690],{"id":4770,"title":3723,"titles":4771,"content":3725,"level":155},"/v0.0.15/reference/api#limit",[3560,3690],{"id":4773,"title":3728,"titles":4774,"content":3730,"level":155},"/v0.0.15/reference/api#offset",[3560,3690],{"id":4776,"title":3733,"titles":4777,"content":3735,"level":155},"/v0.0.15/reference/api#set",[3560,3690],{"id":4779,"title":3738,"titles":4780,"content":3740,"level":155},"/v0.0.15/reference/api#values",[3560,3690],{"id":4782,"title":3743,"titles":4783,"content":3745,"level":155},"/v0.0.15/reference/api#returning",[3560,3690],{"id":4785,"title":3748,"titles":4786,"content":3750,"level":155},"/v0.0.15/reference/api#distinct",[3560,3690],{"id":4788,"title":3753,"titles":4789,"content":3755,"level":155},"/v0.0.15/reference/api#distincton",[3560,3690],{"id":4791,"title":3758,"titles":4792,"content":3760,"level":155},"/v0.0.15/reference/api#groupby",[3560,3690],{"id":4794,"title":3763,"titles":4795,"content":3765,"level":155},"/v0.0.15/reference/api#having",[3560,3690],{"id":4797,"title":3768,"titles":4798,"content":3770,"level":155},"/v0.0.15/reference/api#havingagg",[3560,3690],{"id":4800,"title":3773,"titles":4801,"content":3775,"level":155},"/v0.0.15/reference/api#selectexpr",[3560,3690],{"id":4803,"title":3778,"titles":4804,"content":3780,"level":155},"/v0.0.15/reference/api#onconflict",[3560,3690],{"id":4806,"title":3783,"titles":4807,"content":3785,"level":155},"/v0.0.15/reference/api#join-methods",[3560,3690],{"id":4809,"title":3788,"titles":4810,"content":3790,"level":155},"/v0.0.15/reference/api#row-locking",[3560,3690],{"id":4812,"title":3793,"titles":4813,"content":3795,"level":155},"/v0.0.15/reference/api#build",[3560,3690],{"id":4815,"title":3798,"titles":4816,"content":3800,"level":155},"/v0.0.15/reference/api#mustbuild",[3560,3690],{"id":4818,"title":350,"titles":4819,"content":3804,"level":155},"/v0.0.15/reference/api#render",[3560,3690],{"id":4821,"title":3807,"titles":4822,"content":3809,"level":155},"/v0.0.15/reference/api#mustrender",[3560,3690],{"id":4824,"title":3812,"titles":4825,"content":99,"level":136},"/v0.0.15/reference/api#set-operations",[3560],{"id":4827,"title":3816,"titles":4828,"content":3818,"level":155},"/v0.0.15/reference/api#union-unionall",[3560,3812],{"id":4830,"title":3821,"titles":4831,"content":3823,"level":155},"/v0.0.15/reference/api#intersect-intersectall",[3560,3812],{"id":4833,"title":3826,"titles":4834,"content":3828,"level":155},"/v0.0.15/reference/api#except-exceptall",[3560,3812],{"id":4836,"title":3831,"titles":4837,"content":99,"level":136},"/v0.0.15/reference/api#rendering",[3560],{"id":4839,"title":350,"titles":4840,"content":3836,"level":155},"/v0.0.15/reference/api#render-1",[3560,3831],{"id":4842,"title":3839,"titles":4843,"content":3841,"level":155},"/v0.0.15/reference/api#rendercompound",[3560,3831],{"id":4845,"title":3844,"titles":4846,"content":99,"level":136},"/v0.0.15/reference/api#expression-functions",[3560],{"id":4848,"title":1668,"titles":4849,"content":3849,"level":155},"/v0.0.15/reference/api#aggregates",[3560,3844],{"id":4851,"title":3852,"titles":4852,"content":3854,"level":155},"/v0.0.15/reference/api#filter-aggregates",[3560,3844],{"id":4854,"title":1251,"titles":4855,"content":3858,"level":155},"/v0.0.15/reference/api#conditions",[3560,3844],{"id":4857,"title":3006,"titles":4858,"content":3862,"level":155},"/v0.0.15/reference/api#subqueries",[3560,3844],{"id":4860,"title":3865,"titles":4861,"content":3867,"level":155},"/v0.0.15/reference/api#case-expression",[3560,3844],{"id":4863,"title":3870,"titles":4864,"content":3872,"level":155},"/v0.0.15/reference/api#null-handling",[3560,3844],{"id":4866,"title":3203,"titles":4867,"content":3876,"level":155},"/v0.0.15/reference/api#math-functions",[3560,3844],{"id":4869,"title":3221,"titles":4870,"content":3880,"level":155},"/v0.0.15/reference/api#type-casting",[3560,3844],{"id":4872,"title":3173,"titles":4873,"content":3884,"level":155},"/v0.0.15/reference/api#window-functions",[3560,3844],{"id":4875,"title":3193,"titles":4876,"content":3888,"level":155},"/v0.0.15/reference/api#window-specification",[3560,3844],{"id":4878,"title":3891,"titles":4879,"content":3893,"level":155},"/v0.0.15/reference/api#windowbuilder-methods",[3560,3844],{"id":4881,"title":3896,"titles":4882,"content":3898,"level":155},"/v0.0.15/reference/api#expression-alias",[3560,3844],{"id":4884,"title":3163,"titles":4885,"content":3902,"level":155},"/v0.0.15/reference/api#having-helpers",[3560,3844],{"id":4887,"title":3905,"titles":4888,"content":99,"level":136},"/v0.0.15/reference/api#types",[3560],{"id":4890,"title":3909,"titles":4891,"content":3911,"level":155},"/v0.0.15/reference/api#queryresult",[3560,3905],{"id":4893,"title":3914,"titles":4894,"content":3916,"level":155},"/v0.0.15/reference/api#direction",[3560,3905],{"id":4896,"title":3919,"titles":4897,"content":3921,"level":155},"/v0.0.15/reference/api#nullsordering",[3560,3905],{"id":4899,"title":3924,"titles":4900,"content":3926,"level":155},"/v0.0.15/reference/api#operation",[3560,3905],{"id":4902,"title":3929,"titles":4903,"content":3931,"level":107},"/v0.0.15/reference/operators",[],{"id":4905,"title":3929,"titles":4906,"content":3935,"level":107},"/v0.0.15/reference/operators#operators-reference",[],{"id":4908,"title":2959,"titles":4909,"content":3939,"level":136},"/v0.0.15/reference/operators#comparison-operators",[3929],{"id":4911,"title":3341,"titles":4912,"content":3943,"level":155},"/v0.0.15/reference/operators#usage",[3929,2959],{"id":4914,"title":2964,"titles":4915,"content":3947,"level":136},"/v0.0.15/reference/operators#pattern-matching",[3929],{"id":4917,"title":3341,"titles":4918,"content":3951,"level":155},"/v0.0.15/reference/operators#usage-1",[3929,2964],{"id":4920,"title":3954,"titles":4921,"content":3956,"level":136},"/v0.0.15/reference/operators#null-operators",[3929],{"id":4923,"title":3341,"titles":4924,"content":3960,"level":155},"/v0.0.15/reference/operators#usage-2",[3929,3954],{"id":4926,"title":2974,"titles":4927,"content":3964,"level":136},"/v0.0.15/reference/operators#array-operators",[3929],{"id":4929,"title":3341,"titles":4930,"content":3968,"level":155},"/v0.0.15/reference/operators#usage-3",[3929,2974],{"id":4932,"title":3971,"titles":4933,"content":3973,"level":155},"/v0.0.15/reference/operators#with-sqlx",[3929,2974],{"id":4935,"title":3976,"titles":4936,"content":3978,"level":136},"/v0.0.15/reference/operators#subquery-operators",[3929],{"id":4938,"title":3341,"titles":4939,"content":3982,"level":155},"/v0.0.15/reference/operators#usage-4",[3929,3976],{"id":4941,"title":3985,"titles":4942,"content":3987,"level":136},"/v0.0.15/reference/operators#regex-operators",[3929],{"id":4944,"title":3341,"titles":4945,"content":3991,"level":155},"/v0.0.15/reference/operators#usage-5",[3929,3985],{"id":4947,"title":3994,"titles":4948,"content":3996,"level":136},"/v0.0.15/reference/operators#postgresql-array-operators",[3929],{"id":4950,"title":3341,"titles":4951,"content":4000,"level":155},"/v0.0.15/reference/operators#usage-6",[3929,3994],{"id":4953,"title":4003,"titles":4954,"content":4005,"level":136},"/v0.0.15/reference/operators#vector-operators-pgvector",[3929],{"id":4956,"title":3341,"titles":4957,"content":4009,"level":155},"/v0.0.15/reference/operators#usage-7",[3929,4003],{"id":4959,"title":4012,"titles":4960,"content":4014,"level":155},"/v0.0.15/reference/operators#with-pgvector",[3929,4003],{"id":4962,"title":4017,"titles":4963,"content":4019,"level":136},"/v0.0.15/reference/operators#operator-selection-guide",[3929],{"id":4965,"title":3124,"titles":4966,"content":4023,"level":136},"/v0.0.15/reference/operators#aggregate-functions",[3929],{"id":4968,"title":3173,"titles":4969,"content":4027,"level":136},"/v0.0.15/reference/operators#window-functions",[3929],{"id":4971,"title":3198,"titles":4972,"content":4031,"level":136},"/v0.0.15/reference/operators#frame-bounds",[3929],{"id":4974,"title":4034,"titles":4975,"content":4036,"level":136},"/v0.0.15/reference/operators#cast-types",[3929],{"id":4977,"title":1614,"titles":4978,"content":2581,"level":107},"/v0.0.16/overview",[],{"id":4980,"title":1614,"titles":4981,"content":2585,"level":107},"/v0.0.16/overview#overview",[],{"id":4983,"title":1237,"titles":4984,"content":2589,"level":136},"/v0.0.16/overview#architecture",[1614],{"id":4986,"title":2592,"titles":4987,"content":2594,"level":136},"/v0.0.16/overview#philosophy",[1614],{"id":4989,"title":1187,"titles":4990,"content":2598,"level":136},"/v0.0.16/overview#capabilities",[1614],{"id":4992,"title":2601,"titles":4993,"content":99,"level":136},"/v0.0.16/overview#priorities",[1614],{"id":4995,"title":1782,"titles":4996,"content":2606,"level":155},"/v0.0.16/overview#security",[1614,2601],{"id":4998,"title":2609,"titles":4999,"content":2611,"level":155},"/v0.0.16/overview#ergonomics",[1614,2601],{"id":5001,"title":5002,"titles":5003,"content":5004,"level":155},"/v0.0.16/overview#multi-provider-architecture","Multi-Provider Architecture",[1614,2601],"ASTQL supports multiple SQL dialects through providers: import (\n    \"github.com/zoobzio/astql/pkg/postgres\"\n    \"github.com/zoobzio/astql/pkg/sqlite\"\n)\n\n// PostgreSQL (default)\nresult, _ := query.Render()\nresult, _ := query.RenderWith(postgres.New())\n\n// SQLite\nresult, _ := query.RenderWith(sqlite.New()) Each provider handles dialect-specific syntax: identifier quoting, date functions, string concatenation, and unsupported feature rejection. PostgreSQL supports RETURNING, ON CONFLICT, DISTINCT ON, and pgvector operators. SQLite gracefully rejects unsupported features with clear error messages. html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}",{"id":5006,"title":1628,"titles":5007,"content":2620,"level":107},"/v0.0.16/learn/quickstart",[],{"id":5009,"title":1628,"titles":5010,"content":99,"level":107},"/v0.0.16/learn/quickstart#quickstart",[],{"id":5012,"title":2626,"titles":5013,"content":2628,"level":136},"/v0.0.16/learn/quickstart#requirements",[1628],{"id":5015,"title":2631,"titles":5016,"content":2633,"level":136},"/v0.0.16/learn/quickstart#installation",[1628],{"id":5018,"title":2636,"titles":5019,"content":2638,"level":136},"/v0.0.16/learn/quickstart#basic-usage",[1628],{"id":5021,"title":2641,"titles":5022,"content":2643,"level":136},"/v0.0.16/learn/quickstart#whats-happening",[1628],{"id":5024,"title":2646,"titles":5025,"content":2648,"level":136},"/v0.0.16/learn/quickstart#using-with-sqlx",[1628],{"id":5027,"title":2651,"titles":5028,"content":2653,"level":107},"/v0.0.16/learn/concepts",[],{"id":5030,"title":2651,"titles":5031,"content":2657,"level":107},"/v0.0.16/learn/concepts#core-concepts",[],{"id":5033,"title":2660,"titles":5034,"content":2662,"level":136},"/v0.0.16/learn/concepts#tables",[2651],{"id":5036,"title":2665,"titles":5037,"content":2667,"level":136},"/v0.0.16/learn/concepts#fields",[2651],{"id":5039,"title":2670,"titles":5040,"content":2672,"level":155},"/v0.0.16/learn/concepts#field-validation",[2651,2665],{"id":5042,"title":2675,"titles":5043,"content":2677,"level":136},"/v0.0.16/learn/concepts#params",[2651],{"id":5045,"title":2680,"titles":5046,"content":2682,"level":155},"/v0.0.16/learn/concepts#parameter-validation",[2651,2675],{"id":5048,"title":1251,"titles":5049,"content":2686,"level":136},"/v0.0.16/learn/concepts#conditions",[2651],{"id":5051,"title":1727,"titles":5052,"content":2690,"level":155},"/v0.0.16/learn/concepts#operators",[2651,1251],{"id":5054,"title":2693,"titles":5055,"content":2695,"level":155},"/v0.0.16/learn/concepts#combining-conditions",[2651,1251],{"id":5057,"title":2698,"titles":5058,"content":2700,"level":155},"/v0.0.16/learn/concepts#nested-conditions",[2651,1251],{"id":5060,"title":2703,"titles":5061,"content":2705,"level":155},"/v0.0.16/learn/concepts#null-conditions",[2651,1251],{"id":5063,"title":2708,"titles":5064,"content":2710,"level":155},"/v0.0.16/learn/concepts#field-comparisons",[2651,1251],{"id":5066,"title":2713,"titles":5067,"content":2715,"level":136},"/v0.0.16/learn/concepts#builders",[2651],{"id":5069,"title":2718,"titles":5070,"content":2720,"level":155},"/v0.0.16/learn/concepts#fluent-api",[2651,2713],{"id":5072,"title":2723,"titles":5073,"content":2725,"level":155},"/v0.0.16/learn/concepts#build-vs-render",[2651,2713],{"id":5075,"title":2728,"titles":5076,"content":2730,"level":155},"/v0.0.16/learn/concepts#must-variants",[2651,2713],{"id":5078,"title":2733,"titles":5079,"content":2735,"level":136},"/v0.0.16/learn/concepts#try-variants",[2651],{"id":5081,"title":2738,"titles":5082,"content":2740,"level":136},"/v0.0.16/learn/concepts#query-result",[2651],{"id":5084,"title":1237,"titles":5085,"content":2744,"level":107},"/v0.0.16/learn/architecture",[],{"id":5087,"title":1237,"titles":5088,"content":2748,"level":107},"/v0.0.16/learn/architecture#architecture",[],{"id":5090,"title":2751,"titles":5091,"content":2753,"level":136},"/v0.0.16/learn/architecture#pipeline-overview",[1237],{"id":5093,"title":2756,"titles":5094,"content":99,"level":136},"/v0.0.16/learn/architecture#validation-layer",[1237],{"id":5096,"title":1215,"titles":5097,"content":2761,"level":155},"/v0.0.16/learn/architecture#schema-validation",[1237,2756],{"id":5099,"title":2764,"titles":5100,"content":2766,"level":155},"/v0.0.16/learn/architecture#identifier-validation",[1237,2756],{"id":5102,"title":2769,"titles":5103,"content":2771,"level":155},"/v0.0.16/learn/architecture#alias-restrictions",[1237,2756],{"id":5105,"title":2774,"titles":5106,"content":5107,"level":136},"/v0.0.16/learn/architecture#ast-structure",[1237],"The Abstract Syntax Tree represents a query as nested Go structs: type AST struct {\n    Operation    Operation              // SELECT, INSERT, UPDATE, DELETE, COUNT\n    Target       Table                  // Main table\n    Fields       []Field                // Selected fields\n    WhereClause  ConditionItem          // WHERE conditions\n    Joins        []Join                 // JOIN clauses\n    GroupBy      []Field                // GROUP BY fields\n    Having       []ConditionItem        // HAVING conditions\n    Ordering     []OrderBy              // ORDER BY clauses\n    Limit        *PaginationValue       // LIMIT (static or parameterized)\n    Offset       *PaginationValue       // OFFSET (static or parameterized)\n    // ... additional fields for INSERT, UPDATE, etc.\n}",{"id":5109,"title":2779,"titles":5110,"content":2781,"level":155},"/v0.0.16/learn/architecture#internal-types",[1237,2774],{"id":5112,"title":2784,"titles":5113,"content":2786,"level":155},"/v0.0.16/learn/architecture#condition-types",[1237,2774],{"id":5115,"title":2789,"titles":5116,"content":2791,"level":136},"/v0.0.16/learn/architecture#render-engine",[1237],{"id":5118,"title":2794,"titles":5119,"content":2796,"level":155},"/v0.0.16/learn/architecture#identifier-quoting",[1237,2789],{"id":5121,"title":2799,"titles":5122,"content":2801,"level":155},"/v0.0.16/learn/architecture#parameter-placeholders",[1237,2789],{"id":5124,"title":2804,"titles":5125,"content":2806,"level":155},"/v0.0.16/learn/architecture#parameter-namespacing",[1237,2789],{"id":5127,"title":5128,"titles":5129,"content":5130,"level":136},"/v0.0.16/learn/architecture#provider-architecture","Provider Architecture",[1237],"Rendering is handled by dialect-specific providers that implement the Renderer interface: type Renderer interface {\n    Render(ast *types.AST) (*types.QueryResult, error)\n    RenderCompound(query *types.CompoundQuery) (*types.QueryResult, error)\n}",{"id":5132,"title":5133,"titles":5134,"content":5135,"level":155},"/v0.0.16/learn/architecture#available-providers","Available Providers",[1237,5128],"ProviderImportNotesPostgreSQLgithub.com/zoobzio/astql/pkg/postgresFull feature support, defaultSQLitegithub.com/zoobzio/astql/pkg/sqliteRejects unsupported featuresMySQLgithub.com/zoobzio/astql/pkg/mysqlON DUPLICATE KEY UPDATE, no RETURNINGSQL Servergithub.com/zoobzio/astql/pkg/mssqlOUTPUT clause, OFFSET/FETCH syntax",{"id":5137,"title":3341,"titles":5138,"content":5139,"level":155},"/v0.0.16/learn/architecture#usage",[1237,5128],"import \"github.com/zoobzio/astql/pkg/sqlite\"\n\n// Use specific provider\nresult, err := query.RenderWith(sqlite.New())",{"id":5141,"title":5142,"titles":5143,"content":5144,"level":155},"/v0.0.16/learn/architecture#dialect-differences","Dialect Differences",[1237,5128],"Providers handle syntax differences automatically: FeaturePostgreSQLSQLiteMySQLSQL ServerIdentifier quoting\"name\"\"name\"`name`[name]Param placeholder:name:name:name@nameString concatCONCAT()||CONCAT()CONCAT()String lengthLENGTH()LENGTH()LENGTH()LEN()Current timeNOW()DATETIME('now')NOW()GETDATE()Extract yearEXTRACT(YEAR FROM d)STRFTIME('%Y', d)EXTRACT(YEAR FROM d)DATEPART(YEAR, d)LIMIT/OFFSETLIMIT n OFFSET mLIMIT n OFFSET mLIMIT n OFFSET mOFFSET m ROWS FETCH NEXT n ROWS ONLYRETURNINGRETURNINGRETURNINGUnsupportedOUTPUTUpsertON CONFLICTON CONFLICTON DUPLICATE KEY UPDATEUnsupported Each provider rejects unsupported features with clear errors rather than generating invalid SQL.",{"id":5146,"title":2809,"titles":5147,"content":5148,"level":136},"/v0.0.16/learn/architecture#file-structure",[1237],"astql/\n├── api.go           # Public types and package docs\n├── builder.go       # Query builders (Select, Insert, Update, Delete)\n├── expressions.go   # Expression helpers (Sum, Case, Window, String, Date, etc.)\n├── instance.go      # ASTQL instance and validation\n├── render.go        # Default rendering (uses PostgreSQL provider)\n├── renderer.go      # Renderer interface\n├── internal/\n│   ├── types/       # Internal AST types\n│   │   ├── ast.go\n│   │   ├── condition.go\n│   │   ├── field.go\n│   │   ├── operator.go\n│   │   ├── param.go\n│   │   └── table.go\n│   └── render/      # Shared render utilities\n│       └── errors.go\n└── pkg/\n    ├── postgres/    # PostgreSQL provider\n    │   └── postgres.go\n    ├── sqlite/      # SQLite provider\n    │   └── sqlite.go\n    ├── mysql/       # MySQL provider\n    │   └── mysql.go\n    └── mssql/       # SQL Server provider\n        └── mssql.go",{"id":5150,"title":2814,"titles":5151,"content":2816,"level":136},"/v0.0.16/learn/architecture#security-layers",[1237],{"id":5153,"title":2819,"titles":5154,"content":99,"level":136},"/v0.0.16/learn/architecture#extension-points",[1237],{"id":5156,"title":2823,"titles":5157,"content":2825,"level":155},"/v0.0.16/learn/architecture#custom-expressions",[1237,2819],{"id":5159,"title":2828,"titles":5160,"content":2830,"level":155},"/v0.0.16/learn/architecture#compound-queries",[1237,2819],{"id":5162,"title":2833,"titles":5163,"content":2835,"level":155},"/v0.0.16/learn/architecture#direct-ast-access",[1237,2819],{"id":5165,"title":1215,"titles":5166,"content":2839,"level":107},"/v0.0.16/guides/schema-validation",[],{"id":5168,"title":1215,"titles":5169,"content":2843,"level":107},"/v0.0.16/guides/schema-validation#schema-validation",[],{"id":5171,"title":2846,"titles":5172,"content":2848,"level":136},"/v0.0.16/guides/schema-validation#defining-a-schema",[1215],{"id":5174,"title":2851,"titles":5175,"content":2853,"level":136},"/v0.0.16/guides/schema-validation#creating-an-instance",[1215],{"id":5177,"title":2856,"titles":5178,"content":99,"level":136},"/v0.0.16/guides/schema-validation#validation-behavior",[1215],{"id":5180,"title":2860,"titles":5181,"content":2862,"level":155},"/v0.0.16/guides/schema-validation#table-validation",[1215,2856],{"id":5183,"title":2670,"titles":5184,"content":2866,"level":155},"/v0.0.16/guides/schema-validation#field-validation",[1215,2856],{"id":5186,"title":2680,"titles":5187,"content":2870,"level":155},"/v0.0.16/guides/schema-validation#parameter-validation",[1215,2856],{"id":5189,"title":2873,"titles":5190,"content":2875,"level":136},"/v0.0.16/guides/schema-validation#panic-vs-error",[1215],{"id":5192,"title":2733,"titles":5193,"content":2879,"level":155},"/v0.0.16/guides/schema-validation#try-variants",[1215,2873],{"id":5195,"title":2882,"titles":5196,"content":2884,"level":155},"/v0.0.16/guides/schema-validation#when-to-use-each",[1215,2873],{"id":5198,"title":2887,"titles":5199,"content":2889,"level":136},"/v0.0.16/guides/schema-validation#table-aliases",[1215],{"id":5201,"title":2769,"titles":5202,"content":2893,"level":155},"/v0.0.16/guides/schema-validation#alias-restrictions",[1215,2887],{"id":5204,"title":2896,"titles":5205,"content":2898,"level":155},"/v0.0.16/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":5207,"title":2901,"titles":5208,"content":99,"level":136},"/v0.0.16/guides/schema-validation#schema-organization",[1215],{"id":5210,"title":2905,"titles":5211,"content":2907,"level":155},"/v0.0.16/guides/schema-validation#single-schema-instance",[1215,2901],{"id":5213,"title":2910,"titles":5214,"content":2912,"level":155},"/v0.0.16/guides/schema-validation#multiple-schemas",[1215,2901],{"id":5216,"title":2915,"titles":5217,"content":99,"level":136},"/v0.0.16/guides/schema-validation#dynamic-queries",[1215],{"id":5219,"title":2919,"titles":5220,"content":2921,"level":155},"/v0.0.16/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":5222,"title":2924,"titles":5223,"content":2926,"level":155},"/v0.0.16/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":5225,"title":2929,"titles":5226,"content":99,"level":136},"/v0.0.16/guides/schema-validation#validation-errors",[1215],{"id":5228,"title":2933,"titles":5229,"content":2935,"level":155},"/v0.0.16/guides/schema-validation#error-types",[1215,2929],{"id":5231,"title":2938,"titles":5232,"content":2940,"level":155},"/v0.0.16/guides/schema-validation#handling-errors",[1215,2929],{"id":5234,"title":1251,"titles":5235,"content":2944,"level":107},"/v0.0.16/guides/conditions",[],{"id":5237,"title":1251,"titles":5238,"content":2948,"level":107},"/v0.0.16/guides/conditions#conditions",[],{"id":5240,"title":2951,"titles":5241,"content":2953,"level":136},"/v0.0.16/guides/conditions#basic-conditions",[1251],{"id":5243,"title":1727,"titles":5244,"content":99,"level":136},"/v0.0.16/guides/conditions#operators",[1251],{"id":5246,"title":2959,"titles":5247,"content":2961,"level":155},"/v0.0.16/guides/conditions#comparison-operators",[1251,1727],{"id":5249,"title":2964,"titles":5250,"content":2966,"level":155},"/v0.0.16/guides/conditions#pattern-matching",[1251,1727],{"id":5252,"title":2969,"titles":5253,"content":2971,"level":155},"/v0.0.16/guides/conditions#null-checks",[1251,1727],{"id":5255,"title":2974,"titles":5256,"content":2976,"level":155},"/v0.0.16/guides/conditions#array-operators",[1251,1727],{"id":5258,"title":2693,"titles":5259,"content":99,"level":136},"/v0.0.16/guides/conditions#combining-conditions",[1251],{"id":5261,"title":2982,"titles":5262,"content":2984,"level":155},"/v0.0.16/guides/conditions#and",[1251,2693],{"id":5264,"title":2987,"titles":5265,"content":2989,"level":155},"/v0.0.16/guides/conditions#or",[1251,2693],{"id":5267,"title":2992,"titles":5268,"content":2994,"level":155},"/v0.0.16/guides/conditions#nested-logic",[1251,2693],{"id":5270,"title":2997,"titles":5271,"content":2999,"level":136},"/v0.0.16/guides/conditions#between",[1251],{"id":5273,"title":2708,"titles":5274,"content":3003,"level":136},"/v0.0.16/guides/conditions#field-comparisons",[1251],{"id":5276,"title":3006,"titles":5277,"content":99,"level":136},"/v0.0.16/guides/conditions#subqueries",[1251],{"id":5279,"title":3010,"titles":5280,"content":3012,"level":155},"/v0.0.16/guides/conditions#in-subquery",[1251,3006],{"id":5282,"title":3015,"titles":5283,"content":3017,"level":155},"/v0.0.16/guides/conditions#not-in-subquery",[1251,3006],{"id":5285,"title":3020,"titles":5286,"content":3022,"level":155},"/v0.0.16/guides/conditions#exists",[1251,3006],{"id":5288,"title":3025,"titles":5289,"content":3027,"level":155},"/v0.0.16/guides/conditions#not-exists",[1251,3006],{"id":5291,"title":2804,"titles":5292,"content":3031,"level":155},"/v0.0.16/guides/conditions#parameter-namespacing",[1251,3006],{"id":5294,"title":3034,"titles":5295,"content":3036,"level":136},"/v0.0.16/guides/conditions#multiple-where-clauses",[1251],{"id":5297,"title":3039,"titles":5298,"content":3041,"level":136},"/v0.0.16/guides/conditions#wherefield-shorthand",[1251],{"id":5300,"title":3044,"titles":5301,"content":3046,"level":136},"/v0.0.16/guides/conditions#building-conditions-dynamically",[1251],{"id":5303,"title":1265,"titles":5304,"content":3050,"level":107},"/v0.0.16/guides/joins",[],{"id":5306,"title":1265,"titles":5307,"content":3054,"level":107},"/v0.0.16/guides/joins#joins",[],{"id":5309,"title":3057,"titles":5310,"content":3059,"level":136},"/v0.0.16/guides/joins#join-types",[1265],{"id":5312,"title":3062,"titles":5313,"content":3064,"level":136},"/v0.0.16/guides/joins#basic-join",[1265],{"id":5315,"title":2887,"titles":5316,"content":3068,"level":136},"/v0.0.16/guides/joins#table-aliases",[1265],{"id":5318,"title":3071,"titles":5319,"content":3073,"level":136},"/v0.0.16/guides/joins#left-join",[1265],{"id":5321,"title":3076,"titles":5322,"content":3078,"level":136},"/v0.0.16/guides/joins#right-join",[1265],{"id":5324,"title":3081,"titles":5325,"content":3083,"level":136},"/v0.0.16/guides/joins#full-outer-join",[1265],{"id":5327,"title":3086,"titles":5328,"content":3088,"level":136},"/v0.0.16/guides/joins#cross-join",[1265],{"id":5330,"title":3091,"titles":5331,"content":3093,"level":136},"/v0.0.16/guides/joins#multiple-joins",[1265],{"id":5333,"title":3096,"titles":5334,"content":3098,"level":136},"/v0.0.16/guides/joins#complex-on-conditions",[1265],{"id":5336,"title":3101,"titles":5337,"content":3103,"level":136},"/v0.0.16/guides/joins#self-joins",[1265],{"id":5339,"title":3106,"titles":5340,"content":3108,"level":136},"/v0.0.16/guides/joins#joins-with-count",[1265],{"id":5342,"title":3111,"titles":5343,"content":3113,"level":136},"/v0.0.16/guides/joins#join-validation",[1265],{"id":5345,"title":1668,"titles":5346,"content":3117,"level":107},"/v0.0.16/guides/aggregates",[],{"id":5348,"title":1668,"titles":5349,"content":3121,"level":107},"/v0.0.16/guides/aggregates#aggregates",[],{"id":5351,"title":3124,"titles":5352,"content":99,"level":136},"/v0.0.16/guides/aggregates#aggregate-functions",[1668],{"id":5354,"title":3128,"titles":5355,"content":3130,"level":155},"/v0.0.16/guides/aggregates#basic-aggregates",[1668,3124],{"id":5357,"title":3133,"titles":5358,"content":3135,"level":155},"/v0.0.16/guides/aggregates#using-aggregates",[1668,3124],{"id":5360,"title":3138,"titles":5361,"content":3140,"level":155},"/v0.0.16/guides/aggregates#aliases",[1668,3124],{"id":5363,"title":3143,"titles":5364,"content":3145,"level":136},"/v0.0.16/guides/aggregates#group-by",[1668],{"id":5366,"title":3148,"titles":5367,"content":3150,"level":136},"/v0.0.16/guides/aggregates#having",[1668],{"id":5369,"title":3153,"titles":5370,"content":3155,"level":155},"/v0.0.16/guides/aggregates#simple-having",[1668,3148],{"id":5372,"title":3158,"titles":5373,"content":3160,"level":155},"/v0.0.16/guides/aggregates#aggregate-having",[1668,3148],{"id":5375,"title":3163,"titles":5376,"content":3165,"level":155},"/v0.0.16/guides/aggregates#having-helpers",[1668,3148],{"id":5378,"title":3168,"titles":5379,"content":3170,"level":136},"/v0.0.16/guides/aggregates#filter-clause",[1668],{"id":5381,"title":3173,"titles":5382,"content":3175,"level":136},"/v0.0.16/guides/aggregates#window-functions",[1668],{"id":5384,"title":3178,"titles":5385,"content":3180,"level":155},"/v0.0.16/guides/aggregates#basic-window-functions",[1668,3173],{"id":5387,"title":3183,"titles":5388,"content":3185,"level":155},"/v0.0.16/guides/aggregates#window-function-types",[1668,3173],{"id":5390,"title":3188,"titles":5391,"content":3190,"level":155},"/v0.0.16/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":5393,"title":3193,"titles":5394,"content":3195,"level":155},"/v0.0.16/guides/aggregates#window-specification",[1668,3173],{"id":5396,"title":3198,"titles":5397,"content":3200,"level":155},"/v0.0.16/guides/aggregates#frame-bounds",[1668,3173],{"id":5399,"title":3203,"titles":5400,"content":99,"level":136},"/v0.0.16/guides/aggregates#math-functions",[1668],{"id":5402,"title":3207,"titles":5403,"content":3209,"level":155},"/v0.0.16/guides/aggregates#available-functions",[1668,3203],{"id":5405,"title":3212,"titles":5406,"content":3214,"level":155},"/v0.0.16/guides/aggregates#example",[1668,3203],{"id":5408,"title":1270,"titles":5409,"content":3218,"level":136},"/v0.0.16/guides/aggregates#case-expressions",[1668],{"id":5411,"title":3221,"titles":5412,"content":3223,"level":136},"/v0.0.16/guides/aggregates#type-casting",[1668],{"id":5414,"title":3226,"titles":5415,"content":3228,"level":136},"/v0.0.16/guides/aggregates#coalesce-and-nullif",[1668],{"id":5417,"title":1675,"titles":5418,"content":3232,"level":107},"/v0.0.16/guides/testing",[],{"id":5420,"title":1675,"titles":5421,"content":3236,"level":107},"/v0.0.16/guides/testing#testing",[],{"id":5423,"title":3239,"titles":5424,"content":99,"level":136},"/v0.0.16/guides/testing#testing-query-output",[1675],{"id":5426,"title":3243,"titles":5427,"content":3245,"level":155},"/v0.0.16/guides/testing#basic-output-testing",[1675,3239],{"id":5429,"title":3248,"titles":5430,"content":3250,"level":155},"/v0.0.16/guides/testing#test-instance-setup",[1675,3239],{"id":5432,"title":3253,"titles":5433,"content":99,"level":136},"/v0.0.16/guides/testing#table-driven-tests",[1675],{"id":5435,"title":3257,"titles":5436,"content":3259,"level":155},"/v0.0.16/guides/testing#testing-multiple-queries",[1675,3253],{"id":5438,"title":3262,"titles":5439,"content":99,"level":136},"/v0.0.16/guides/testing#testing-validation",[1675],{"id":5441,"title":3266,"titles":5442,"content":3268,"level":155},"/v0.0.16/guides/testing#testing-invalid-input",[1675,3262],{"id":5444,"title":3271,"titles":5445,"content":3273,"level":155},"/v0.0.16/guides/testing#testing-try-variants",[1675,3262],{"id":5447,"title":3276,"titles":5448,"content":99,"level":136},"/v0.0.16/guides/testing#testing-error-cases",[1675],{"id":5450,"title":3280,"titles":5451,"content":3282,"level":155},"/v0.0.16/guides/testing#builder-errors",[1675,3276],{"id":5453,"title":3285,"titles":5454,"content":99,"level":136},"/v0.0.16/guides/testing#testing-complex-queries",[1675],{"id":5456,"title":3289,"titles":5457,"content":3291,"level":155},"/v0.0.16/guides/testing#join-tests",[1675,3285],{"id":5459,"title":3294,"titles":5460,"content":3296,"level":155},"/v0.0.16/guides/testing#subquery-tests",[1675,3285],{"id":5462,"title":3299,"titles":5463,"content":3301,"level":136},"/v0.0.16/guides/testing#snapshot-testing",[1675],{"id":5465,"title":3304,"titles":5466,"content":99,"level":136},"/v0.0.16/guides/testing#best-practices",[1675],{"id":5468,"title":3308,"titles":5469,"content":3310,"level":155},"/v0.0.16/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":5471,"title":3313,"titles":5472,"content":3315,"level":155},"/v0.0.16/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":5474,"title":3318,"titles":5475,"content":3320,"level":155},"/v0.0.16/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":5477,"title":3323,"titles":5478,"content":3325,"level":155},"/v0.0.16/guides/testing#_4-test-edge-cases",[1675,3304],{"id":5480,"title":1688,"titles":5481,"content":3329,"level":107},"/v0.0.16/cookbook/pagination",[],{"id":5483,"title":1688,"titles":5484,"content":3333,"level":107},"/v0.0.16/cookbook/pagination#pagination",[],{"id":5486,"title":3336,"titles":5487,"content":3338,"level":136},"/v0.0.16/cookbook/pagination#offset-pagination",[1688],{"id":5489,"title":3341,"titles":5490,"content":3343,"level":155},"/v0.0.16/cookbook/pagination#usage",[1688,3336],{"id":5492,"title":3346,"titles":5493,"content":3348,"level":155},"/v0.0.16/cookbook/pagination#with-total-count",[1688,3336],{"id":5495,"title":3351,"titles":5496,"content":3353,"level":155},"/v0.0.16/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":5498,"title":3356,"titles":5499,"content":3358,"level":136},"/v0.0.16/cookbook/pagination#cursor-pagination",[1688],{"id":5501,"title":3341,"titles":5502,"content":3362,"level":155},"/v0.0.16/cookbook/pagination#usage-1",[1688,3356],{"id":5504,"title":3365,"titles":5505,"content":3367,"level":155},"/v0.0.16/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":5507,"title":3370,"titles":5508,"content":3372,"level":155},"/v0.0.16/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":5510,"title":3375,"titles":5511,"content":3377,"level":136},"/v0.0.16/cookbook/pagination#filtering-with-pagination",[1688],{"id":5513,"title":3380,"titles":5514,"content":3382,"level":136},"/v0.0.16/cookbook/pagination#pagination-with-joins",[1688],{"id":5516,"title":3304,"titles":5517,"content":99,"level":136},"/v0.0.16/cookbook/pagination#best-practices",[1688],{"id":5519,"title":3388,"titles":5520,"content":3390,"level":155},"/v0.0.16/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":5522,"title":3393,"titles":5523,"content":3395,"level":155},"/v0.0.16/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":5525,"title":3398,"titles":5526,"content":3400,"level":155},"/v0.0.16/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":5528,"title":3403,"titles":5529,"content":3405,"level":155},"/v0.0.16/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":5531,"title":1695,"titles":5532,"content":3409,"level":107},"/v0.0.16/cookbook/vector-search",[],{"id":5534,"title":1695,"titles":5535,"content":3413,"level":107},"/v0.0.16/cookbook/vector-search#vector-search",[],{"id":5537,"title":3416,"titles":5538,"content":3418,"level":136},"/v0.0.16/cookbook/vector-search#schema-setup",[1695],{"id":5540,"title":3421,"titles":5541,"content":3423,"level":136},"/v0.0.16/cookbook/vector-search#distance-operators",[1695],{"id":5543,"title":3426,"titles":5544,"content":3428,"level":136},"/v0.0.16/cookbook/vector-search#basic-similarity-search",[1695],{"id":5546,"title":3431,"titles":5547,"content":3433,"level":155},"/v0.0.16/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":5549,"title":3436,"titles":5550,"content":3438,"level":136},"/v0.0.16/cookbook/vector-search#cosine-similarity",[1695],{"id":5552,"title":3441,"titles":5553,"content":3443,"level":136},"/v0.0.16/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":5555,"title":3446,"titles":5556,"content":3448,"level":136},"/v0.0.16/cookbook/vector-search#filtered-vector-search",[1695],{"id":5558,"title":3451,"titles":5559,"content":3453,"level":136},"/v0.0.16/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":5561,"title":3456,"titles":5562,"content":3458,"level":136},"/v0.0.16/cookbook/vector-search#hybrid-search",[1695],{"id":5564,"title":3461,"titles":5565,"content":3463,"level":136},"/v0.0.16/cookbook/vector-search#multi-vector-search",[1695],{"id":5567,"title":3466,"titles":5568,"content":3468,"level":136},"/v0.0.16/cookbook/vector-search#indexing-recommendations",[1695],{"id":5570,"title":3304,"titles":5571,"content":99,"level":136},"/v0.0.16/cookbook/vector-search#best-practices",[1695],{"id":5573,"title":3474,"titles":5574,"content":3476,"level":155},"/v0.0.16/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":5576,"title":3479,"titles":5577,"content":3481,"level":155},"/v0.0.16/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":5579,"title":3484,"titles":5580,"content":3486,"level":155},"/v0.0.16/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":5582,"title":1702,"titles":5583,"content":3490,"level":107},"/v0.0.16/cookbook/upserts",[],{"id":5585,"title":1702,"titles":5586,"content":3494,"level":107},"/v0.0.16/cookbook/upserts#upserts",[],{"id":5588,"title":3497,"titles":5589,"content":3499,"level":136},"/v0.0.16/cookbook/upserts#basic-upsert",[1702],{"id":5591,"title":3502,"titles":5592,"content":3504,"level":136},"/v0.0.16/cookbook/upserts#do-nothing",[1702],{"id":5594,"title":3507,"titles":5595,"content":3509,"level":136},"/v0.0.16/cookbook/upserts#multi-column-conflict",[1702],{"id":5597,"title":3512,"titles":5598,"content":3514,"level":136},"/v0.0.16/cookbook/upserts#returning-with-upsert",[1702],{"id":5600,"title":3517,"titles":5601,"content":3519,"level":136},"/v0.0.16/cookbook/upserts#batch-upsert",[1702],{"id":5603,"title":3522,"titles":5604,"content":3524,"level":136},"/v0.0.16/cookbook/upserts#conditional-upsert",[1702],{"id":5606,"title":3527,"titles":5607,"content":3529,"level":136},"/v0.0.16/cookbook/upserts#sync-pattern",[1702],{"id":5609,"title":3532,"titles":5610,"content":3534,"level":136},"/v0.0.16/cookbook/upserts#upsert-with-timestamps",[1702],{"id":5612,"title":3304,"titles":5613,"content":99,"level":136},"/v0.0.16/cookbook/upserts#best-practices",[1702],{"id":5615,"title":3540,"titles":5616,"content":3542,"level":155},"/v0.0.16/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":5618,"title":3545,"titles":5619,"content":3547,"level":155},"/v0.0.16/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":5621,"title":3550,"titles":5622,"content":3552,"level":155},"/v0.0.16/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":5624,"title":3555,"titles":5625,"content":3557,"level":155},"/v0.0.16/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":5627,"title":3560,"titles":5628,"content":3562,"level":107},"/v0.0.16/reference/api",[],{"id":5630,"title":3560,"titles":5631,"content":3566,"level":107},"/v0.0.16/reference/api#api-reference",[],{"id":5633,"title":3569,"titles":5634,"content":99,"level":136},"/v0.0.16/reference/api#instance-creation",[3560],{"id":5636,"title":856,"titles":5637,"content":3574,"level":155},"/v0.0.16/reference/api#newfromdbml",[3560,3569],{"id":5639,"title":3577,"titles":5640,"content":99,"level":136},"/v0.0.16/reference/api#instance-methods",[3560],{"id":5642,"title":119,"titles":5643,"content":3582,"level":155},"/v0.0.16/reference/api#t",[3560,3577],{"id":5645,"title":3585,"titles":5646,"content":3587,"level":155},"/v0.0.16/reference/api#tryt",[3560,3577],{"id":5648,"title":169,"titles":5649,"content":3591,"level":155},"/v0.0.16/reference/api#f",[3560,3577],{"id":5651,"title":3594,"titles":5652,"content":3596,"level":155},"/v0.0.16/reference/api#tryf",[3560,3577],{"id":5654,"title":316,"titles":5655,"content":3600,"level":155},"/v0.0.16/reference/api#p",[3560,3577],{"id":5657,"title":3603,"titles":5658,"content":3605,"level":155},"/v0.0.16/reference/api#tryp",[3560,3577],{"id":5660,"title":284,"titles":5661,"content":3609,"level":155},"/v0.0.16/reference/api#c",[3560,3577],{"id":5663,"title":3612,"titles":5664,"content":3614,"level":155},"/v0.0.16/reference/api#tryc",[3560,3577],{"id":5666,"title":3617,"titles":5667,"content":3619,"level":155},"/v0.0.16/reference/api#and",[3560,3577],{"id":5669,"title":3622,"titles":5670,"content":3624,"level":155},"/v0.0.16/reference/api#or",[3560,3577],{"id":5672,"title":3627,"titles":5673,"content":3629,"level":155},"/v0.0.16/reference/api#null",[3560,3577],{"id":5675,"title":3632,"titles":5676,"content":3634,"level":155},"/v0.0.16/reference/api#notnull",[3560,3577],{"id":5678,"title":3637,"titles":5679,"content":3639,"level":155},"/v0.0.16/reference/api#withtable",[3560,3577],{"id":5681,"title":3642,"titles":5682,"content":3644,"level":155},"/v0.0.16/reference/api#trywithtable",[3560,3577],{"id":5684,"title":3647,"titles":5685,"content":3649,"level":155},"/v0.0.16/reference/api#aggc",[3560,3577],{"id":5687,"title":3652,"titles":5688,"content":3654,"level":155},"/v0.0.16/reference/api#tryaggc",[3560,3577],{"id":5690,"title":3657,"titles":5691,"content":3659,"level":155},"/v0.0.16/reference/api#valuemap",[3560,3577],{"id":5693,"title":3662,"titles":5694,"content":99,"level":136},"/v0.0.16/reference/api#query-builders",[3560],{"id":5696,"title":219,"titles":5697,"content":3667,"level":155},"/v0.0.16/reference/api#select",[3560,3662],{"id":5699,"title":3670,"titles":5700,"content":3672,"level":155},"/v0.0.16/reference/api#insert",[3560,3662],{"id":5702,"title":3675,"titles":5703,"content":3677,"level":155},"/v0.0.16/reference/api#update",[3560,3662],{"id":5705,"title":3680,"titles":5706,"content":3682,"level":155},"/v0.0.16/reference/api#delete",[3560,3662],{"id":5708,"title":3685,"titles":5709,"content":3687,"level":155},"/v0.0.16/reference/api#count",[3560,3662],{"id":5711,"title":3690,"titles":5712,"content":99,"level":136},"/v0.0.16/reference/api#builder-methods",[3560],{"id":5714,"title":2665,"titles":5715,"content":3695,"level":155},"/v0.0.16/reference/api#fields",[3560,3690],{"id":5717,"title":3698,"titles":5718,"content":3700,"level":155},"/v0.0.16/reference/api#where",[3560,3690],{"id":5720,"title":3703,"titles":5721,"content":3705,"level":155},"/v0.0.16/reference/api#wherefield",[3560,3690],{"id":5723,"title":3708,"titles":5724,"content":3710,"level":155},"/v0.0.16/reference/api#orderby",[3560,3690],{"id":5726,"title":3713,"titles":5727,"content":3715,"level":155},"/v0.0.16/reference/api#orderbynulls",[3560,3690],{"id":5729,"title":3718,"titles":5730,"content":3720,"level":155},"/v0.0.16/reference/api#orderbyexpr",[3560,3690],{"id":5732,"title":3723,"titles":5733,"content":5734,"level":155},"/v0.0.16/reference/api#limit",[3560,3690],"func (b *Builder) Limit(limit int) *Builder Sets the LIMIT clause with a static value.",{"id":5736,"title":5737,"titles":5738,"content":5739,"level":155},"/v0.0.16/reference/api#limitparam","LimitParam",[3560,3690],"func (b *Builder) LimitParam(param types.Param) *Builder Sets the LIMIT clause with a parameterized value.",{"id":5741,"title":3728,"titles":5742,"content":5743,"level":155},"/v0.0.16/reference/api#offset",[3560,3690],"func (b *Builder) Offset(offset int) *Builder Sets the OFFSET clause with a static value.",{"id":5745,"title":5746,"titles":5747,"content":5748,"level":155},"/v0.0.16/reference/api#offsetparam","OffsetParam",[3560,3690],"func (b *Builder) OffsetParam(param types.Param) *Builder Sets the OFFSET clause with a parameterized value.",{"id":5750,"title":3733,"titles":5751,"content":3735,"level":155},"/v0.0.16/reference/api#set",[3560,3690],{"id":5753,"title":3738,"titles":5754,"content":3740,"level":155},"/v0.0.16/reference/api#values",[3560,3690],{"id":5756,"title":3743,"titles":5757,"content":3745,"level":155},"/v0.0.16/reference/api#returning",[3560,3690],{"id":5759,"title":3748,"titles":5760,"content":3750,"level":155},"/v0.0.16/reference/api#distinct",[3560,3690],{"id":5762,"title":3753,"titles":5763,"content":3755,"level":155},"/v0.0.16/reference/api#distincton",[3560,3690],{"id":5765,"title":3758,"titles":5766,"content":3760,"level":155},"/v0.0.16/reference/api#groupby",[3560,3690],{"id":5768,"title":3763,"titles":5769,"content":3765,"level":155},"/v0.0.16/reference/api#having",[3560,3690],{"id":5771,"title":3768,"titles":5772,"content":3770,"level":155},"/v0.0.16/reference/api#havingagg",[3560,3690],{"id":5774,"title":3773,"titles":5775,"content":3775,"level":155},"/v0.0.16/reference/api#selectexpr",[3560,3690],{"id":5777,"title":3778,"titles":5778,"content":3780,"level":155},"/v0.0.16/reference/api#onconflict",[3560,3690],{"id":5780,"title":3783,"titles":5781,"content":3785,"level":155},"/v0.0.16/reference/api#join-methods",[3560,3690],{"id":5783,"title":3788,"titles":5784,"content":3790,"level":155},"/v0.0.16/reference/api#row-locking",[3560,3690],{"id":5786,"title":3793,"titles":5787,"content":3795,"level":155},"/v0.0.16/reference/api#build",[3560,3690],{"id":5789,"title":3798,"titles":5790,"content":3800,"level":155},"/v0.0.16/reference/api#mustbuild",[3560,3690],{"id":5792,"title":350,"titles":5793,"content":5794,"level":155},"/v0.0.16/reference/api#render",[3560,3690],"func (b *Builder) Render() (*QueryResult, error) Builds and renders the query to SQL using the default PostgreSQL provider.",{"id":5796,"title":3807,"titles":5797,"content":3809,"level":155},"/v0.0.16/reference/api#mustrender",[3560,3690],{"id":5799,"title":5800,"titles":5801,"content":5802,"level":155},"/v0.0.16/reference/api#renderwith","RenderWith",[3560,3690],"func (b *Builder) RenderWith(renderer Renderer) (*QueryResult, error) Builds and renders the query using a specific provider (e.g., sqlite.New()).",{"id":5804,"title":5805,"titles":5806,"content":5807,"level":155},"/v0.0.16/reference/api#mustrenderwith","MustRenderWith",[3560,3690],"func (b *Builder) MustRenderWith(renderer Renderer) *QueryResult Builds and renders with a specific provider or panics on error.",{"id":5809,"title":3812,"titles":5810,"content":99,"level":136},"/v0.0.16/reference/api#set-operations",[3560],{"id":5812,"title":3816,"titles":5813,"content":3818,"level":155},"/v0.0.16/reference/api#union-unionall",[3560,3812],{"id":5815,"title":3821,"titles":5816,"content":3823,"level":155},"/v0.0.16/reference/api#intersect-intersectall",[3560,3812],{"id":5818,"title":3826,"titles":5819,"content":3828,"level":155},"/v0.0.16/reference/api#except-exceptall",[3560,3812],{"id":5821,"title":3831,"titles":5822,"content":99,"level":136},"/v0.0.16/reference/api#rendering",[3560],{"id":5824,"title":350,"titles":5825,"content":3836,"level":155},"/v0.0.16/reference/api#render-1",[3560,3831],{"id":5827,"title":3839,"titles":5828,"content":3841,"level":155},"/v0.0.16/reference/api#rendercompound",[3560,3831],{"id":5830,"title":3844,"titles":5831,"content":99,"level":136},"/v0.0.16/reference/api#expression-functions",[3560],{"id":5833,"title":1668,"titles":5834,"content":3849,"level":155},"/v0.0.16/reference/api#aggregates",[3560,3844],{"id":5836,"title":3852,"titles":5837,"content":3854,"level":155},"/v0.0.16/reference/api#filter-aggregates",[3560,3844],{"id":5839,"title":1251,"titles":5840,"content":3858,"level":155},"/v0.0.16/reference/api#conditions",[3560,3844],{"id":5842,"title":3006,"titles":5843,"content":3862,"level":155},"/v0.0.16/reference/api#subqueries",[3560,3844],{"id":5845,"title":3865,"titles":5846,"content":3867,"level":155},"/v0.0.16/reference/api#case-expression",[3560,3844],{"id":5848,"title":3870,"titles":5849,"content":3872,"level":155},"/v0.0.16/reference/api#null-handling",[3560,3844],{"id":5851,"title":3203,"titles":5852,"content":3876,"level":155},"/v0.0.16/reference/api#math-functions",[3560,3844],{"id":5854,"title":5855,"titles":5856,"content":5857,"level":155},"/v0.0.16/reference/api#string-functions","String Functions",[3560,3844],"func Upper(field types.Field) types.FieldExpression\nfunc Lower(field types.Field) types.FieldExpression\nfunc Trim(field types.Field) types.FieldExpression\nfunc LTrim(field types.Field) types.FieldExpression\nfunc RTrim(field types.Field) types.FieldExpression\nfunc Length(field types.Field) types.FieldExpression\nfunc Substring(field types.Field, start types.Param, length types.Param) types.FieldExpression\nfunc Replace(field types.Field, search types.Param, replacement types.Param) types.FieldExpression\nfunc Concat(fields ...types.Field) types.FieldExpression",{"id":5859,"title":5860,"titles":5861,"content":5862,"level":155},"/v0.0.16/reference/api#date-functions","Date Functions",[3560,3844],"func Now() types.FieldExpression                                    // Current timestamp\nfunc CurrentDate() types.FieldExpression                            // Current date\nfunc CurrentTime() types.FieldExpression                            // Current time\nfunc CurrentTimestamp() types.FieldExpression                       // Current timestamp\nfunc Extract(part types.DatePart, field types.Field) types.FieldExpression  // Extract part from date\nfunc DateTrunc(part types.DatePart, field types.Field) types.FieldExpression // Truncate to precision Date parts: PartYear, PartMonth, PartDay, PartHour, PartMinute, PartSecond, PartWeek, PartQuarter, PartDayOfWeek, PartDayOfYear, PartEpoch.",{"id":5864,"title":3221,"titles":5865,"content":3880,"level":155},"/v0.0.16/reference/api#type-casting",[3560,3844],{"id":5867,"title":3173,"titles":5868,"content":3884,"level":155},"/v0.0.16/reference/api#window-functions",[3560,3844],{"id":5870,"title":3193,"titles":5871,"content":3888,"level":155},"/v0.0.16/reference/api#window-specification",[3560,3844],{"id":5873,"title":3891,"titles":5874,"content":3893,"level":155},"/v0.0.16/reference/api#windowbuilder-methods",[3560,3844],{"id":5876,"title":3896,"titles":5877,"content":3898,"level":155},"/v0.0.16/reference/api#expression-alias",[3560,3844],{"id":5879,"title":3163,"titles":5880,"content":3902,"level":155},"/v0.0.16/reference/api#having-helpers",[3560,3844],{"id":5882,"title":3905,"titles":5883,"content":99,"level":136},"/v0.0.16/reference/api#types",[3560],{"id":5885,"title":3909,"titles":5886,"content":3911,"level":155},"/v0.0.16/reference/api#queryresult",[3560,3905],{"id":5888,"title":3914,"titles":5889,"content":3916,"level":155},"/v0.0.16/reference/api#direction",[3560,3905],{"id":5891,"title":3919,"titles":5892,"content":3921,"level":155},"/v0.0.16/reference/api#nullsordering",[3560,3905],{"id":5894,"title":3924,"titles":5895,"content":5896,"level":155},"/v0.0.16/reference/api#operation",[3560,3905],"const (\n    OpSelect Operation = \"SELECT\"\n    OpInsert Operation = \"INSERT\"\n    OpUpdate Operation = \"UPDATE\"\n    OpDelete Operation = \"DELETE\"\n    OpCount  Operation = \"COUNT\"\n) Query operation types.",{"id":5898,"title":5899,"titles":5900,"content":99,"level":136},"/v0.0.16/reference/api#providers","Providers",[3560],{"id":5902,"title":5903,"titles":5904,"content":5905,"level":155},"/v0.0.16/reference/api#renderer-interface","Renderer Interface",[3560,5899],"type Renderer interface {\n    Render(ast *types.AST) (*types.QueryResult, error)\n    RenderCompound(query *types.CompoundQuery) (*types.QueryResult, error)\n}",{"id":5907,"title":5908,"titles":5909,"content":5910,"level":155},"/v0.0.16/reference/api#postgresql-provider","PostgreSQL Provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/postgres\"\n\nrenderer := postgres.New()\nresult, err := query.RenderWith(renderer) Full feature support. Used by default when calling query.Render().",{"id":5912,"title":5913,"titles":5914,"content":5915,"level":155},"/v0.0.16/reference/api#sqlite-provider","SQLite Provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/sqlite\"\n\nrenderer := sqlite.New()\nresult, err := query.RenderWith(renderer) Returns UnsupportedFeatureError for features not available in SQLite: DISTINCT ONILIKE / NOT ILIKERegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)IN / NOT IN with array parametersRow-level locking (FOR UPDATE, FOR SHARE)POWER and SQRT math functions",{"id":5917,"title":5918,"titles":5919,"content":5920,"level":155},"/v0.0.16/reference/api#mysql-provider","MySQL Provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/mysql\"\n\nrenderer := mysql.New()\nresult, err := query.RenderWith(renderer) MySQL-specific behavior: Uses backtick quoting for identifiers: `name`Uses :name parameter placeholders (sqlx compatible)ON CONFLICT DO UPDATE → ON DUPLICATE KEY UPDATEON CONFLICT DO NOTHING → ON DUPLICATE KEY UPDATE field = field (no-op)ILIKE maps to LIKE (MySQL LIKE is case-insensitive by default)Standard IN (...) syntax instead of = ANY(:array) Returns UnsupportedFeatureError for: RETURNING clauseDISTINCT ONFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)FOR NO KEY UPDATE / FOR KEY SHARE (use FOR UPDATE or FOR SHARE instead)",{"id":5922,"title":5923,"titles":5924,"content":5925,"level":155},"/v0.0.16/reference/api#sql-server-provider","SQL Server Provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/mssql\"\n\nrenderer := mssql.New()\nresult, err := query.RenderWith(renderer) SQL Server-specific behavior: Uses square bracket quoting for identifiers: [name]Uses @name parameter placeholdersLIMIT/OFFSET → OFFSET n ROWS FETCH NEXT m ROWS ONLY (requires ORDER BY)RETURNING → OUTPUT INSERTED.* / OUTPUT DELETED.*LENGTH() → LEN()NOW() → GETDATE()EXTRACT() → DATEPART()!= → \u003C> (preferred SQL Server syntax) Returns UnsupportedFeatureError for: ON CONFLICT / upsert (MERGE is too complex)DISTINCT ONILIKE / NOT ILIKEFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)Row-level locking (FOR UPDATE, FOR SHARE)LIMIT without ORDER BY (returns error) html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}",{"id":5927,"title":3929,"titles":5928,"content":3931,"level":107},"/v0.0.16/reference/operators",[],{"id":5930,"title":3929,"titles":5931,"content":3935,"level":107},"/v0.0.16/reference/operators#operators-reference",[],{"id":5933,"title":2959,"titles":5934,"content":3939,"level":136},"/v0.0.16/reference/operators#comparison-operators",[3929],{"id":5936,"title":3341,"titles":5937,"content":3943,"level":155},"/v0.0.16/reference/operators#usage",[3929,2959],{"id":5939,"title":2964,"titles":5940,"content":3947,"level":136},"/v0.0.16/reference/operators#pattern-matching",[3929],{"id":5942,"title":3341,"titles":5943,"content":3951,"level":155},"/v0.0.16/reference/operators#usage-1",[3929,2964],{"id":5945,"title":3954,"titles":5946,"content":3956,"level":136},"/v0.0.16/reference/operators#null-operators",[3929],{"id":5948,"title":3341,"titles":5949,"content":3960,"level":155},"/v0.0.16/reference/operators#usage-2",[3929,3954],{"id":5951,"title":2974,"titles":5952,"content":3964,"level":136},"/v0.0.16/reference/operators#array-operators",[3929],{"id":5954,"title":3341,"titles":5955,"content":3968,"level":155},"/v0.0.16/reference/operators#usage-3",[3929,2974],{"id":5957,"title":3971,"titles":5958,"content":3973,"level":155},"/v0.0.16/reference/operators#with-sqlx",[3929,2974],{"id":5960,"title":3976,"titles":5961,"content":3978,"level":136},"/v0.0.16/reference/operators#subquery-operators",[3929],{"id":5963,"title":3341,"titles":5964,"content":3982,"level":155},"/v0.0.16/reference/operators#usage-4",[3929,3976],{"id":5966,"title":3985,"titles":5967,"content":3987,"level":136},"/v0.0.16/reference/operators#regex-operators",[3929],{"id":5969,"title":3341,"titles":5970,"content":3991,"level":155},"/v0.0.16/reference/operators#usage-5",[3929,3985],{"id":5972,"title":3994,"titles":5973,"content":3996,"level":136},"/v0.0.16/reference/operators#postgresql-array-operators",[3929],{"id":5975,"title":3341,"titles":5976,"content":4000,"level":155},"/v0.0.16/reference/operators#usage-6",[3929,3994],{"id":5978,"title":4003,"titles":5979,"content":4005,"level":136},"/v0.0.16/reference/operators#vector-operators-pgvector",[3929],{"id":5981,"title":3341,"titles":5982,"content":4009,"level":155},"/v0.0.16/reference/operators#usage-7",[3929,4003],{"id":5984,"title":4012,"titles":5985,"content":4014,"level":155},"/v0.0.16/reference/operators#with-pgvector",[3929,4003],{"id":5987,"title":4017,"titles":5988,"content":4019,"level":136},"/v0.0.16/reference/operators#operator-selection-guide",[3929],{"id":5990,"title":3124,"titles":5991,"content":4023,"level":136},"/v0.0.16/reference/operators#aggregate-functions",[3929],{"id":5993,"title":3173,"titles":5994,"content":4027,"level":136},"/v0.0.16/reference/operators#window-functions",[3929],{"id":5996,"title":3198,"titles":5997,"content":4031,"level":136},"/v0.0.16/reference/operators#frame-bounds",[3929],{"id":5999,"title":4034,"titles":6000,"content":4036,"level":136},"/v0.0.16/reference/operators#cast-types",[3929],{"id":6002,"title":1614,"titles":6003,"content":2581,"level":107},"/v0.0.17/overview",[],{"id":6005,"title":1614,"titles":6006,"content":6007,"level":107},"/v0.0.17/overview#overview",[],"SQL query builders in Go typically trust developers to provide valid identifiers. ASTQL takes a different approach: validate everything against a schema before rendering. import \"github.com/zoobzio/astql/pkg/postgres\"\n\n// Define your schema\nproject := dbml.NewProject(\"myapp\")\nusers := dbml.NewTable(\"users\")\nusers.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\nusers.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\nusers.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\nproject.AddTable(users)\n\n// Create a validated instance\ninstance, _ := astql.NewFromDBML(project)\n\n// Build queries - tables and fields validated against schema\nresult, _ := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"user_id\"))).\n    Render(postgres.New())\n\n// result.SQL: SELECT \"username\", \"email\" FROM \"users\" WHERE \"id\" = :user_id\n// result.RequiredParams: []string{\"user_id\"} Type-safe, schema-validated, injection-resistant.",{"id":6009,"title":1237,"titles":6010,"content":2589,"level":136},"/v0.0.17/overview#architecture",[1614],{"id":6012,"title":2592,"titles":6013,"content":2594,"level":136},"/v0.0.17/overview#philosophy",[1614],{"id":6015,"title":1187,"titles":6016,"content":2598,"level":136},"/v0.0.17/overview#capabilities",[1614],{"id":6018,"title":2601,"titles":6019,"content":99,"level":136},"/v0.0.17/overview#priorities",[1614],{"id":6021,"title":1782,"titles":6022,"content":2606,"level":155},"/v0.0.17/overview#security",[1614,2601],{"id":6024,"title":2609,"titles":6025,"content":6026,"level":155},"/v0.0.17/overview#ergonomics",[1614,2601],"The fluent builder API reads naturally: astql.Select(table).\n    Fields(field1, field2).\n    Where(condition).\n    OrderBy(field1, astql.ASC).\n    Limit(10).\n    Render(postgres.New()) Method chaining. Compile-time errors for invalid operations. Clear separation between building and rendering.",{"id":6028,"title":5002,"titles":6029,"content":6030,"level":155},"/v0.0.17/overview#multi-provider-architecture",[1614,2601],"ASTQL supports multiple SQL dialects through providers: import (\n    \"github.com/zoobzio/astql/pkg/postgres\"\n    \"github.com/zoobzio/astql/pkg/sqlite\"\n)\n\n// PostgreSQL\nresult, _ := query.Render(postgres.New())\n\n// SQLite\nresult, _ := query.Render(sqlite.New()) Each provider handles dialect-specific syntax: identifier quoting, date functions, string concatenation, and unsupported feature rejection. PostgreSQL supports RETURNING, ON CONFLICT, DISTINCT ON, and pgvector operators. SQLite gracefully rejects unsupported features with clear error messages. html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}",{"id":6032,"title":1628,"titles":6033,"content":2620,"level":107},"/v0.0.17/learn/quickstart",[],{"id":6035,"title":1628,"titles":6036,"content":99,"level":107},"/v0.0.17/learn/quickstart#quickstart",[],{"id":6038,"title":2626,"titles":6039,"content":6040,"level":136},"/v0.0.17/learn/quickstart#requirements",[1628],"Go 1.24 or later.",{"id":6042,"title":2631,"titles":6043,"content":2633,"level":136},"/v0.0.17/learn/quickstart#installation",[1628],{"id":6045,"title":2636,"titles":6046,"content":6047,"level":136},"/v0.0.17/learn/quickstart#basic-usage",[1628],"package main\n\nimport (\n    \"fmt\"\n    \"github.com/zoobzio/astql\"\n    \"github.com/zoobzio/astql/pkg/postgres\"\n    \"github.com/zoobzio/dbml\"\n)\n\nfunc main() {\n    // 1. Define your schema\n    project := dbml.NewProject(\"myapp\")\n\n    users := dbml.NewTable(\"users\")\n    users.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\n    users.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"active\", \"boolean\"))\n    project.AddTable(users)\n\n    // 2. Create an ASTQL instance\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n\n    // 3. Build a query\n    result, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"username\"), instance.F(\"email\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        OrderBy(instance.F(\"username\"), astql.ASC).\n        Limit(10).\n        Render(postgres.New())\n\n    if err != nil {\n        panic(err)\n    }\n\n    fmt.Println(result.SQL)\n    // SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active ORDER BY \"username\" ASC LIMIT 10\n\n    fmt.Println(result.RequiredParams)\n    // [is_active]\n}",{"id":6049,"title":2641,"titles":6050,"content":6051,"level":136},"/v0.0.17/learn/quickstart#whats-happening",[1628],"dbml.NewProject creates a schema definitiondbml.NewTable and AddColumn define your table structureastql.NewFromDBML creates a validated instance bound to your schemainstance.T, instance.F, instance.P create validated referencesastql.Select starts a query builder chain.Render(provider) produces SQL and a list of required parameters using the specified provider",{"id":6053,"title":2646,"titles":6054,"content":6055,"level":136},"/v0.0.17/learn/quickstart#using-with-sqlx",[1628],"The output is designed for use with sqlx named queries: result, _ := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n    Render(postgres.New())\n\n// Execute with sqlx\nparams := map[string]any{\"is_active\": true}\nrows, err := db.NamedQuery(result.SQL, params) html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":6057,"title":2651,"titles":6058,"content":2653,"level":107},"/v0.0.17/learn/concepts",[],{"id":6060,"title":2651,"titles":6061,"content":2657,"level":107},"/v0.0.17/learn/concepts#core-concepts",[],{"id":6063,"title":2660,"titles":6064,"content":2662,"level":136},"/v0.0.17/learn/concepts#tables",[2651],{"id":6066,"title":2665,"titles":6067,"content":2667,"level":136},"/v0.0.17/learn/concepts#fields",[2651],{"id":6069,"title":2670,"titles":6070,"content":2672,"level":155},"/v0.0.17/learn/concepts#field-validation",[2651,2665],{"id":6072,"title":2675,"titles":6073,"content":2677,"level":136},"/v0.0.17/learn/concepts#params",[2651],{"id":6075,"title":2680,"titles":6076,"content":2682,"level":155},"/v0.0.17/learn/concepts#parameter-validation",[2651,2675],{"id":6078,"title":1251,"titles":6079,"content":2686,"level":136},"/v0.0.17/learn/concepts#conditions",[2651],{"id":6081,"title":1727,"titles":6082,"content":2690,"level":155},"/v0.0.17/learn/concepts#operators",[2651,1251],{"id":6084,"title":2693,"titles":6085,"content":2695,"level":155},"/v0.0.17/learn/concepts#combining-conditions",[2651,1251],{"id":6087,"title":2698,"titles":6088,"content":2700,"level":155},"/v0.0.17/learn/concepts#nested-conditions",[2651,1251],{"id":6090,"title":2703,"titles":6091,"content":2705,"level":155},"/v0.0.17/learn/concepts#null-conditions",[2651,1251],{"id":6093,"title":2708,"titles":6094,"content":2710,"level":155},"/v0.0.17/learn/concepts#field-comparisons",[2651,1251],{"id":6096,"title":2713,"titles":6097,"content":2715,"level":136},"/v0.0.17/learn/concepts#builders",[2651],{"id":6099,"title":2718,"titles":6100,"content":6101,"level":155},"/v0.0.17/learn/concepts#fluent-api",[2651,2713],"Methods return the builder for chaining: result, err := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(condition).\n    OrderBy(instance.F(\"username\"), astql.ASC).\n    Limit(10).\n    Offset(20).\n    Render(postgres.New())",{"id":6103,"title":2723,"titles":6104,"content":6105,"level":155},"/v0.0.17/learn/concepts#build-vs-render",[2651,2713],"Build() returns the AST for inspection or modificationRender(provider) produces the final SQL and parameter list using the specified provider // Get the AST\nast, err := query.Build()\n\n// Get SQL output\nresult, err := query.Render(postgres.New())",{"id":6107,"title":2728,"titles":6108,"content":6109,"level":155},"/v0.0.17/learn/concepts#must-variants",[2651,2713],"MustBuild and MustRender panic on error instead of returning it: result := query.MustRender(postgres.New())  // Panics if invalid",{"id":6111,"title":2733,"titles":6112,"content":2735,"level":136},"/v0.0.17/learn/concepts#try-variants",[2651],{"id":6114,"title":2738,"titles":6115,"content":2740,"level":136},"/v0.0.17/learn/concepts#query-result",[2651],{"id":6117,"title":1237,"titles":6118,"content":2744,"level":107},"/v0.0.17/learn/architecture",[],{"id":6120,"title":1237,"titles":6121,"content":2748,"level":107},"/v0.0.17/learn/architecture#architecture",[],{"id":6123,"title":2751,"titles":6124,"content":2753,"level":136},"/v0.0.17/learn/architecture#pipeline-overview",[1237],{"id":6126,"title":2756,"titles":6127,"content":99,"level":136},"/v0.0.17/learn/architecture#validation-layer",[1237],{"id":6129,"title":1215,"titles":6130,"content":2761,"level":155},"/v0.0.17/learn/architecture#schema-validation",[1237,2756],{"id":6132,"title":2764,"titles":6133,"content":2766,"level":155},"/v0.0.17/learn/architecture#identifier-validation",[1237,2756],{"id":6135,"title":2769,"titles":6136,"content":2771,"level":155},"/v0.0.17/learn/architecture#alias-restrictions",[1237,2756],{"id":6138,"title":2774,"titles":6139,"content":5107,"level":136},"/v0.0.17/learn/architecture#ast-structure",[1237],{"id":6141,"title":2779,"titles":6142,"content":2781,"level":155},"/v0.0.17/learn/architecture#internal-types",[1237,2774],{"id":6144,"title":2784,"titles":6145,"content":2786,"level":155},"/v0.0.17/learn/architecture#condition-types",[1237,2774],{"id":6147,"title":2789,"titles":6148,"content":2791,"level":136},"/v0.0.17/learn/architecture#render-engine",[1237],{"id":6150,"title":2794,"titles":6151,"content":2796,"level":155},"/v0.0.17/learn/architecture#identifier-quoting",[1237,2789],{"id":6153,"title":2799,"titles":6154,"content":2801,"level":155},"/v0.0.17/learn/architecture#parameter-placeholders",[1237,2789],{"id":6156,"title":2804,"titles":6157,"content":2806,"level":155},"/v0.0.17/learn/architecture#parameter-namespacing",[1237,2789],{"id":6159,"title":5128,"titles":6160,"content":5130,"level":136},"/v0.0.17/learn/architecture#provider-architecture",[1237],{"id":6162,"title":5133,"titles":6163,"content":6164,"level":155},"/v0.0.17/learn/architecture#available-providers",[1237,5128],"ProviderImportNotesPostgreSQLgithub.com/zoobzio/astql/pkg/postgresFull feature supportSQLitegithub.com/zoobzio/astql/pkg/sqliteRejects unsupported featuresMySQLgithub.com/zoobzio/astql/pkg/mysqlON DUPLICATE KEY UPDATE, no RETURNINGSQL Servergithub.com/zoobzio/astql/pkg/mssqlOUTPUT clause, OFFSET/FETCH syntax",{"id":6166,"title":3341,"titles":6167,"content":6168,"level":155},"/v0.0.17/learn/architecture#usage",[1237,5128],"import \"github.com/zoobzio/astql/pkg/sqlite\"\n\n// Use specific provider\nresult, err := query.Render(sqlite.New())",{"id":6170,"title":5142,"titles":6171,"content":5144,"level":155},"/v0.0.17/learn/architecture#dialect-differences",[1237,5128],{"id":6173,"title":2809,"titles":6174,"content":6175,"level":136},"/v0.0.17/learn/architecture#file-structure",[1237],"astql/\n├── api.go           # Public types and package docs\n├── builder.go       # Query builders (Select, Insert, Update, Delete)\n├── expressions.go   # Expression helpers (Sum, Case, Window, String, Date, etc.)\n├── instance.go      # ASTQL instance and validation\n├── renderer.go      # Renderer interface\n├── internal/\n│   ├── types/       # Internal AST types\n│   │   ├── ast.go\n│   │   ├── condition.go\n│   │   ├── field.go\n│   │   ├── operator.go\n│   │   ├── param.go\n│   │   └── table.go\n│   └── render/      # Shared render utilities\n│       └── errors.go\n└── pkg/\n    ├── postgres/    # PostgreSQL provider\n    │   └── postgres.go\n    ├── sqlite/      # SQLite provider\n    │   └── sqlite.go\n    ├── mysql/       # MySQL provider\n    │   └── mysql.go\n    └── mssql/       # SQL Server provider\n        └── mssql.go",{"id":6177,"title":2814,"titles":6178,"content":2816,"level":136},"/v0.0.17/learn/architecture#security-layers",[1237],{"id":6180,"title":2819,"titles":6181,"content":99,"level":136},"/v0.0.17/learn/architecture#extension-points",[1237],{"id":6183,"title":2823,"titles":6184,"content":2825,"level":155},"/v0.0.17/learn/architecture#custom-expressions",[1237,2819],{"id":6186,"title":2828,"titles":6187,"content":2830,"level":155},"/v0.0.17/learn/architecture#compound-queries",[1237,2819],{"id":6189,"title":2833,"titles":6190,"content":6191,"level":155},"/v0.0.17/learn/architecture#direct-ast-access",[1237,2819],"For advanced use cases, access the AST directly: ast, _ := query.Build()\n// Inspect or modify ast\nresult, _ := postgres.New().Render(ast) html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}",{"id":6193,"title":1215,"titles":6194,"content":2839,"level":107},"/v0.0.17/guides/schema-validation",[],{"id":6196,"title":1215,"titles":6197,"content":2843,"level":107},"/v0.0.17/guides/schema-validation#schema-validation",[],{"id":6199,"title":2846,"titles":6200,"content":2848,"level":136},"/v0.0.17/guides/schema-validation#defining-a-schema",[1215],{"id":6202,"title":2851,"titles":6203,"content":2853,"level":136},"/v0.0.17/guides/schema-validation#creating-an-instance",[1215],{"id":6205,"title":2856,"titles":6206,"content":99,"level":136},"/v0.0.17/guides/schema-validation#validation-behavior",[1215],{"id":6208,"title":2860,"titles":6209,"content":2862,"level":155},"/v0.0.17/guides/schema-validation#table-validation",[1215,2856],{"id":6211,"title":2670,"titles":6212,"content":2866,"level":155},"/v0.0.17/guides/schema-validation#field-validation",[1215,2856],{"id":6214,"title":2680,"titles":6215,"content":2870,"level":155},"/v0.0.17/guides/schema-validation#parameter-validation",[1215,2856],{"id":6217,"title":2873,"titles":6218,"content":2875,"level":136},"/v0.0.17/guides/schema-validation#panic-vs-error",[1215],{"id":6220,"title":2733,"titles":6221,"content":2879,"level":155},"/v0.0.17/guides/schema-validation#try-variants",[1215,2873],{"id":6223,"title":2882,"titles":6224,"content":2884,"level":155},"/v0.0.17/guides/schema-validation#when-to-use-each",[1215,2873],{"id":6226,"title":2887,"titles":6227,"content":2889,"level":136},"/v0.0.17/guides/schema-validation#table-aliases",[1215],{"id":6229,"title":2769,"titles":6230,"content":2893,"level":155},"/v0.0.17/guides/schema-validation#alias-restrictions",[1215,2887],{"id":6232,"title":2896,"titles":6233,"content":2898,"level":155},"/v0.0.17/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":6235,"title":2901,"titles":6236,"content":99,"level":136},"/v0.0.17/guides/schema-validation#schema-organization",[1215],{"id":6238,"title":2905,"titles":6239,"content":6240,"level":155},"/v0.0.17/guides/schema-validation#single-schema-instance",[1215,2901],"Create one instance per schema and reuse it: // In a package-level variable or dependency injection\nvar db *astql.ASTQL\n\nfunc init() {\n    project := buildSchema()\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n    db = instance\n}\n\nfunc GetUsers() (*astql.QueryResult, error) {\n    return astql.Select(db.T(\"users\")).\n        Fields(db.F(\"username\"), db.F(\"email\")).\n        Render(postgres.New())\n}",{"id":6242,"title":2910,"titles":6243,"content":2912,"level":155},"/v0.0.17/guides/schema-validation#multiple-schemas",[1215,2901],{"id":6245,"title":2915,"titles":6246,"content":99,"level":136},"/v0.0.17/guides/schema-validation#dynamic-queries",[1215],{"id":6248,"title":2919,"titles":6249,"content":6250,"level":155},"/v0.0.17/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],"func SelectFields(instance *astql.ASTQL, tableName string, fieldNames []string) (*astql.QueryResult, error) {\n    table, err := instance.TryT(tableName)\n    if err != nil {\n        return nil, err\n    }\n\n    // Use instance.Fields() to get a typed slice\n    fields := instance.Fields()\n    for _, name := range fieldNames {\n        field, err := instance.TryF(name)\n        if err != nil {\n            return nil, fmt.Errorf(\"invalid field %q: %w\", name, err)\n        }\n        fields = append(fields, field)\n    }\n\n    return astql.Select(table).Fields(fields...).Render(postgres.New())\n}",{"id":6252,"title":2924,"titles":6253,"content":2926,"level":155},"/v0.0.17/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":6255,"title":2929,"titles":6256,"content":99,"level":136},"/v0.0.17/guides/schema-validation#validation-errors",[1215],{"id":6258,"title":2933,"titles":6259,"content":2935,"level":155},"/v0.0.17/guides/schema-validation#error-types",[1215,2929],{"id":6261,"title":2938,"titles":6262,"content":6263,"level":155},"/v0.0.17/guides/schema-validation#handling-errors",[1215,2929],"result, err := query.Render(postgres.New())\nif err != nil {\n    switch {\n    case strings.Contains(err.Error(), \"not found in schema\"):\n        // Schema mismatch - likely a bug or migration issue\n        log.Error(\"schema validation failed\", \"error\", err)\n    case strings.Contains(err.Error(), \"invalid\"):\n        // Invalid input\n        return nil, fmt.Errorf(\"invalid query: %w\", err)\n    default:\n        return nil, err\n    }\n} html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}",{"id":6265,"title":1251,"titles":6266,"content":2944,"level":107},"/v0.0.17/guides/conditions",[],{"id":6268,"title":1251,"titles":6269,"content":2948,"level":107},"/v0.0.17/guides/conditions#conditions",[],{"id":6271,"title":2951,"titles":6272,"content":2953,"level":136},"/v0.0.17/guides/conditions#basic-conditions",[1251],{"id":6274,"title":1727,"titles":6275,"content":99,"level":136},"/v0.0.17/guides/conditions#operators",[1251],{"id":6277,"title":2959,"titles":6278,"content":2961,"level":155},"/v0.0.17/guides/conditions#comparison-operators",[1251,1727],{"id":6280,"title":2964,"titles":6281,"content":2966,"level":155},"/v0.0.17/guides/conditions#pattern-matching",[1251,1727],{"id":6283,"title":2969,"titles":6284,"content":2971,"level":155},"/v0.0.17/guides/conditions#null-checks",[1251,1727],{"id":6286,"title":2974,"titles":6287,"content":2976,"level":155},"/v0.0.17/guides/conditions#array-operators",[1251,1727],{"id":6289,"title":2693,"titles":6290,"content":99,"level":136},"/v0.0.17/guides/conditions#combining-conditions",[1251],{"id":6292,"title":2982,"titles":6293,"content":2984,"level":155},"/v0.0.17/guides/conditions#and",[1251,2693],{"id":6295,"title":2987,"titles":6296,"content":2989,"level":155},"/v0.0.17/guides/conditions#or",[1251,2693],{"id":6298,"title":2992,"titles":6299,"content":2994,"level":155},"/v0.0.17/guides/conditions#nested-logic",[1251,2693],{"id":6301,"title":2997,"titles":6302,"content":2999,"level":136},"/v0.0.17/guides/conditions#between",[1251],{"id":6304,"title":2708,"titles":6305,"content":3003,"level":136},"/v0.0.17/guides/conditions#field-comparisons",[1251],{"id":6307,"title":3006,"titles":6308,"content":99,"level":136},"/v0.0.17/guides/conditions#subqueries",[1251],{"id":6310,"title":3010,"titles":6311,"content":3012,"level":155},"/v0.0.17/guides/conditions#in-subquery",[1251,3006],{"id":6313,"title":3015,"titles":6314,"content":3017,"level":155},"/v0.0.17/guides/conditions#not-in-subquery",[1251,3006],{"id":6316,"title":3020,"titles":6317,"content":3022,"level":155},"/v0.0.17/guides/conditions#exists",[1251,3006],{"id":6319,"title":3025,"titles":6320,"content":3027,"level":155},"/v0.0.17/guides/conditions#not-exists",[1251,3006],{"id":6322,"title":2804,"titles":6323,"content":3031,"level":155},"/v0.0.17/guides/conditions#parameter-namespacing",[1251,3006],{"id":6325,"title":3034,"titles":6326,"content":3036,"level":136},"/v0.0.17/guides/conditions#multiple-where-clauses",[1251],{"id":6328,"title":3039,"titles":6329,"content":3041,"level":136},"/v0.0.17/guides/conditions#wherefield-shorthand",[1251],{"id":6331,"title":3044,"titles":6332,"content":3046,"level":136},"/v0.0.17/guides/conditions#building-conditions-dynamically",[1251],{"id":6334,"title":1265,"titles":6335,"content":3050,"level":107},"/v0.0.17/guides/joins",[],{"id":6337,"title":1265,"titles":6338,"content":3054,"level":107},"/v0.0.17/guides/joins#joins",[],{"id":6340,"title":3057,"titles":6341,"content":3059,"level":136},"/v0.0.17/guides/joins#join-types",[1265],{"id":6343,"title":3062,"titles":6344,"content":3064,"level":136},"/v0.0.17/guides/joins#basic-join",[1265],{"id":6346,"title":2887,"titles":6347,"content":3068,"level":136},"/v0.0.17/guides/joins#table-aliases",[1265],{"id":6349,"title":3071,"titles":6350,"content":3073,"level":136},"/v0.0.17/guides/joins#left-join",[1265],{"id":6352,"title":3076,"titles":6353,"content":3078,"level":136},"/v0.0.17/guides/joins#right-join",[1265],{"id":6355,"title":3081,"titles":6356,"content":3083,"level":136},"/v0.0.17/guides/joins#full-outer-join",[1265],{"id":6358,"title":3086,"titles":6359,"content":3088,"level":136},"/v0.0.17/guides/joins#cross-join",[1265],{"id":6361,"title":3091,"titles":6362,"content":3093,"level":136},"/v0.0.17/guides/joins#multiple-joins",[1265],{"id":6364,"title":3096,"titles":6365,"content":3098,"level":136},"/v0.0.17/guides/joins#complex-on-conditions",[1265],{"id":6367,"title":3101,"titles":6368,"content":3103,"level":136},"/v0.0.17/guides/joins#self-joins",[1265],{"id":6370,"title":3106,"titles":6371,"content":3108,"level":136},"/v0.0.17/guides/joins#joins-with-count",[1265],{"id":6373,"title":3111,"titles":6374,"content":3113,"level":136},"/v0.0.17/guides/joins#join-validation",[1265],{"id":6376,"title":1668,"titles":6377,"content":3117,"level":107},"/v0.0.17/guides/aggregates",[],{"id":6379,"title":1668,"titles":6380,"content":3121,"level":107},"/v0.0.17/guides/aggregates#aggregates",[],{"id":6382,"title":3124,"titles":6383,"content":99,"level":136},"/v0.0.17/guides/aggregates#aggregate-functions",[1668],{"id":6385,"title":3128,"titles":6386,"content":3130,"level":155},"/v0.0.17/guides/aggregates#basic-aggregates",[1668,3124],{"id":6388,"title":3133,"titles":6389,"content":3135,"level":155},"/v0.0.17/guides/aggregates#using-aggregates",[1668,3124],{"id":6391,"title":3138,"titles":6392,"content":3140,"level":155},"/v0.0.17/guides/aggregates#aliases",[1668,3124],{"id":6394,"title":3143,"titles":6395,"content":3145,"level":136},"/v0.0.17/guides/aggregates#group-by",[1668],{"id":6397,"title":3148,"titles":6398,"content":3150,"level":136},"/v0.0.17/guides/aggregates#having",[1668],{"id":6400,"title":3153,"titles":6401,"content":3155,"level":155},"/v0.0.17/guides/aggregates#simple-having",[1668,3148],{"id":6403,"title":3158,"titles":6404,"content":3160,"level":155},"/v0.0.17/guides/aggregates#aggregate-having",[1668,3148],{"id":6406,"title":3163,"titles":6407,"content":3165,"level":155},"/v0.0.17/guides/aggregates#having-helpers",[1668,3148],{"id":6409,"title":3168,"titles":6410,"content":3170,"level":136},"/v0.0.17/guides/aggregates#filter-clause",[1668],{"id":6412,"title":3173,"titles":6413,"content":3175,"level":136},"/v0.0.17/guides/aggregates#window-functions",[1668],{"id":6415,"title":3178,"titles":6416,"content":3180,"level":155},"/v0.0.17/guides/aggregates#basic-window-functions",[1668,3173],{"id":6418,"title":3183,"titles":6419,"content":3185,"level":155},"/v0.0.17/guides/aggregates#window-function-types",[1668,3173],{"id":6421,"title":3188,"titles":6422,"content":3190,"level":155},"/v0.0.17/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":6424,"title":3193,"titles":6425,"content":3195,"level":155},"/v0.0.17/guides/aggregates#window-specification",[1668,3173],{"id":6427,"title":3198,"titles":6428,"content":3200,"level":155},"/v0.0.17/guides/aggregates#frame-bounds",[1668,3173],{"id":6430,"title":3203,"titles":6431,"content":99,"level":136},"/v0.0.17/guides/aggregates#math-functions",[1668],{"id":6433,"title":3207,"titles":6434,"content":3209,"level":155},"/v0.0.17/guides/aggregates#available-functions",[1668,3203],{"id":6436,"title":3212,"titles":6437,"content":3214,"level":155},"/v0.0.17/guides/aggregates#example",[1668,3203],{"id":6439,"title":1270,"titles":6440,"content":3218,"level":136},"/v0.0.17/guides/aggregates#case-expressions",[1668],{"id":6442,"title":3221,"titles":6443,"content":3223,"level":136},"/v0.0.17/guides/aggregates#type-casting",[1668],{"id":6445,"title":3226,"titles":6446,"content":3228,"level":136},"/v0.0.17/guides/aggregates#coalesce-and-nullif",[1668],{"id":6448,"title":1675,"titles":6449,"content":3232,"level":107},"/v0.0.17/guides/testing",[],{"id":6451,"title":1675,"titles":6452,"content":3236,"level":107},"/v0.0.17/guides/testing#testing",[],{"id":6454,"title":3239,"titles":6455,"content":99,"level":136},"/v0.0.17/guides/testing#testing-query-output",[1675],{"id":6457,"title":3243,"titles":6458,"content":6459,"level":155},"/v0.0.17/guides/testing#basic-output-testing",[1675,3239],"func TestUserQuery(t *testing.T) {\n    instance := setupTestInstance()\n\n    result, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"username\"), instance.F(\"email\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        Render(postgres.New())\n\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    expected := `SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active`\n    if result.SQL != expected {\n        t.Errorf(\"SQL mismatch\\ngot:  %s\\nwant: %s\", result.SQL, expected)\n    }\n\n    if len(result.RequiredParams) != 1 || result.RequiredParams[0] != \"is_active\" {\n        t.Errorf(\"params mismatch: got %v\", result.RequiredParams)\n    }\n}",{"id":6461,"title":3248,"titles":6462,"content":3250,"level":155},"/v0.0.17/guides/testing#test-instance-setup",[1675,3239],{"id":6464,"title":3253,"titles":6465,"content":99,"level":136},"/v0.0.17/guides/testing#table-driven-tests",[1675],{"id":6467,"title":3257,"titles":6468,"content":6469,"level":155},"/v0.0.17/guides/testing#testing-multiple-queries",[1675,3253],"func TestQueries(t *testing.T) {\n    instance := setupTestInstance()\n\n    tests := []struct {\n        name     string\n        query    func() (*astql.QueryResult, error)\n        wantSQL  string\n        wantParams []string\n    }{\n        {\n            name: \"simple select\",\n            query: func() (*astql.QueryResult, error) {\n                return astql.Select(instance.T(\"users\")).\n                    Fields(instance.F(\"username\")).\n                    Render(postgres.New())\n            },\n            wantSQL:    `SELECT \"username\" FROM \"users\"`,\n            wantParams: nil,\n        },\n        {\n            name: \"select with where\",\n            query: func() (*astql.QueryResult, error) {\n                return astql.Select(instance.T(\"users\")).\n                    Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"id\"))).\n                    Render(postgres.New())\n            },\n            wantSQL:    `SELECT * FROM \"users\" WHERE \"id\" = :id`,\n            wantParams: []string{\"id\"},\n        },\n        {\n            name: \"select with order and limit\",\n            query: func() (*astql.QueryResult, error) {\n                return astql.Select(instance.T(\"users\")).\n                    OrderBy(instance.F(\"username\"), astql.ASC).\n                    Limit(10).\n                    Render(postgres.New())\n            },\n            wantSQL:    `SELECT * FROM \"users\" ORDER BY \"username\" ASC LIMIT 10`,\n            wantParams: nil,\n        },\n    }\n\n    for _, tt := range tests {\n        t.Run(tt.name, func(t *testing.T) {\n            result, err := tt.query()\n            if err != nil {\n                t.Fatalf(\"unexpected error: %v\", err)\n            }\n            if result.SQL != tt.wantSQL {\n                t.Errorf(\"SQL mismatch\\ngot:  %s\\nwant: %s\", result.SQL, tt.wantSQL)\n            }\n            if !slicesEqual(result.RequiredParams, tt.wantParams) {\n                t.Errorf(\"params mismatch\\ngot:  %v\\nwant: %v\", result.RequiredParams, tt.wantParams)\n            }\n        })\n    }\n}\n\nfunc slicesEqual(a, b []string) bool {\n    if len(a) != len(b) {\n        return false\n    }\n    for i := range a {\n        if a[i] != b[i] {\n            return false\n        }\n    }\n    return true\n}",{"id":6471,"title":3262,"titles":6472,"content":99,"level":136},"/v0.0.17/guides/testing#testing-validation",[1675],{"id":6474,"title":3266,"titles":6475,"content":3268,"level":155},"/v0.0.17/guides/testing#testing-invalid-input",[1675,3262],{"id":6477,"title":3271,"titles":6478,"content":3273,"level":155},"/v0.0.17/guides/testing#testing-try-variants",[1675,3262],{"id":6480,"title":3276,"titles":6481,"content":99,"level":136},"/v0.0.17/guides/testing#testing-error-cases",[1675],{"id":6483,"title":3280,"titles":6484,"content":6485,"level":155},"/v0.0.17/guides/testing#builder-errors",[1675,3276],"func TestBuilderErrors(t *testing.T) {\n    instance := setupTestInstance()\n\n    // Fields on non-SELECT query\n    _, err := astql.Insert(instance.T(\"users\")).\n        Fields(instance.F(\"username\")).\n        Render(postgres.New())\n\n    if err == nil {\n        t.Error(\"expected error for Fields on INSERT\")\n    }\n\n    // SET on non-UPDATE query\n    _, err = astql.Select(instance.T(\"users\")).\n        Set(instance.F(\"username\"), instance.P(\"value\")).\n        Render(postgres.New())\n\n    if err == nil {\n        t.Error(\"expected error for Set on SELECT\")\n    }\n}",{"id":6487,"title":3285,"titles":6488,"content":99,"level":136},"/v0.0.17/guides/testing#testing-complex-queries",[1675],{"id":6490,"title":3289,"titles":6491,"content":6492,"level":155},"/v0.0.17/guides/testing#join-tests",[1675,3285],"func TestJoinQuery(t *testing.T) {\n    instance := setupTestInstance()\n\n    result, err := astql.Select(instance.T(\"users\", \"u\")).\n        Fields(\n            instance.WithTable(instance.F(\"username\"), \"u\"),\n            instance.WithTable(instance.F(\"title\"), \"p\"),\n        ).\n        LeftJoin(instance.T(\"posts\", \"p\"), astql.CF(\n            instance.WithTable(instance.F(\"id\"), \"u\"),\n            astql.EQ,\n            instance.WithTable(instance.F(\"user_id\"), \"p\"),\n        )).\n        Render(postgres.New())\n\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    // Check key parts of the query\n    if !strings.Contains(result.SQL, \"LEFT JOIN\") {\n        t.Error(\"missing LEFT JOIN\")\n    }\n    if !strings.Contains(result.SQL, `u.\"id\" = p.\"user_id\"`) {\n        t.Error(\"missing join condition\")\n    }\n}",{"id":6494,"title":3294,"titles":6495,"content":6496,"level":155},"/v0.0.17/guides/testing#subquery-tests",[1675,3285],"func TestSubquery(t *testing.T) {\n    instance := setupTestInstance()\n\n    subquery := astql.Sub(\n        astql.Select(instance.T(\"posts\")).\n            Fields(instance.F(\"user_id\")).\n            Where(instance.C(instance.F(\"published\"), astql.EQ, instance.P(\"is_pub\"))),\n    )\n\n    result, err := astql.Select(instance.T(\"users\")).\n        Where(astql.CSub(instance.F(\"id\"), astql.IN, subquery)).\n        Render(postgres.New())\n\n    if err != nil {\n        t.Fatalf(\"unexpected error: %v\", err)\n    }\n\n    // Check parameter namespacing\n    if !strings.Contains(result.SQL, \":sq1_is_pub\") {\n        t.Error(\"subquery parameter not namespaced\")\n    }\n}",{"id":6498,"title":3299,"titles":6499,"content":3301,"level":136},"/v0.0.17/guides/testing#snapshot-testing",[1675],{"id":6501,"title":3304,"titles":6502,"content":99,"level":136},"/v0.0.17/guides/testing#best-practices",[1675],{"id":6504,"title":3308,"titles":6505,"content":3310,"level":155},"/v0.0.17/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":6507,"title":3313,"titles":6508,"content":3315,"level":155},"/v0.0.17/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":6510,"title":3318,"titles":6511,"content":3320,"level":155},"/v0.0.17/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":6513,"title":3323,"titles":6514,"content":6515,"level":155},"/v0.0.17/guides/testing#_4-test-edge-cases",[1675,3304],"func TestEdgeCases(t *testing.T) {\n    instance := setupTestInstance()\n\n    // Empty fields (SELECT *)\n    result, _ := astql.Select(instance.T(\"users\")).Render(postgres.New())\n    if !strings.Contains(result.SQL, \"SELECT *\") {\n        t.Error(\"empty fields should produce SELECT *\")\n    }\n\n    // Multiple WHERE calls\n    result, _ = astql.Select(instance.T(\"users\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"a\"))).\n        Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"b\"))).\n        Render(postgres.New())\n    if !strings.Contains(result.SQL, \"AND\") {\n        t.Error(\"multiple WHERE should combine with AND\")\n    }\n} html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .scyPU, html code.shiki .scyPU{--shiki-default:var(--shiki-placeholder)}html pre.shiki code .suWN2, html code.shiki .suWN2{--shiki-default:var(--shiki-tag)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}",{"id":6517,"title":1688,"titles":6518,"content":3329,"level":107},"/v0.0.17/cookbook/pagination",[],{"id":6520,"title":1688,"titles":6521,"content":3333,"level":107},"/v0.0.17/cookbook/pagination#pagination",[],{"id":6523,"title":3336,"titles":6524,"content":6525,"level":136},"/v0.0.17/cookbook/pagination#offset-pagination",[1688],"The simplest approach using LIMIT and OFFSET: func GetUsersPage(instance *astql.ASTQL, page, pageSize int) (*astql.QueryResult, error) {\n    offset := (page - 1) * pageSize\n\n    return astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"), instance.F(\"email\")).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(pageSize).\n        Offset(offset).\n        Render(postgres.New())\n}",{"id":6527,"title":3341,"titles":6528,"content":3343,"level":155},"/v0.0.17/cookbook/pagination#usage",[1688,3336],{"id":6530,"title":3346,"titles":6531,"content":6532,"level":155},"/v0.0.17/cookbook/pagination#with-total-count",[1688,3336],"Get total count alongside paginated results: type PagedResult struct {\n    DataSQL    string\n    CountSQL   string\n    Params     []string\n}\n\nfunc GetPagedUsers(instance *astql.ASTQL, page, pageSize int) (*PagedResult, error) {\n    offset := (page - 1) * pageSize\n\n    // Data query\n    dataResult, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(pageSize).\n        Offset(offset).\n        Render(postgres.New())\n    if err != nil {\n        return nil, err\n    }\n\n    // Count query (same WHERE, no LIMIT/OFFSET)\n    countResult, err := astql.Count(instance.T(\"users\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        Render(postgres.New())\n    if err != nil {\n        return nil, err\n    }\n\n    return &PagedResult{\n        DataSQL:  dataResult.SQL,\n        CountSQL: countResult.SQL,\n        Params:   dataResult.RequiredParams,\n    }, nil\n}",{"id":6534,"title":3351,"titles":6535,"content":3353,"level":155},"/v0.0.17/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":6537,"title":3356,"titles":6538,"content":6539,"level":136},"/v0.0.17/cookbook/pagination#cursor-pagination",[1688],"For large datasets, use cursor-based pagination (keyset pagination): func GetUsersAfter(instance *astql.ASTQL, cursor int64, limit int) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"), instance.F(\"email\")).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(limit)\n\n    if cursor > 0 {\n        query = query.Where(instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor\")))\n    }\n\n    return query.Render(postgres.New())\n}",{"id":6541,"title":3341,"titles":6542,"content":3362,"level":155},"/v0.0.17/cookbook/pagination#usage-1",[1688,3356],{"id":6544,"title":3365,"titles":6545,"content":6546,"level":155},"/v0.0.17/cookbook/pagination#bidirectional-cursor",[1688,3356],"Support both forward and backward navigation: type Direction string\n\nconst (\n    Forward  Direction = \"forward\"\n    Backward Direction = \"backward\"\n)\n\nfunc GetUsersWithCursor(\n    instance *astql.ASTQL,\n    cursor int64,\n    direction Direction,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"))\n\n    if cursor > 0 {\n        if direction == Forward {\n            query = query.\n                Where(instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor\"))).\n                OrderBy(instance.F(\"id\"), astql.ASC)\n        } else {\n            query = query.\n                Where(instance.C(instance.F(\"id\"), astql.LT, instance.P(\"cursor\"))).\n                OrderBy(instance.F(\"id\"), astql.DESC)\n        }\n    } else {\n        query = query.OrderBy(instance.F(\"id\"), astql.ASC)\n    }\n\n    return query.Limit(limit).Render(postgres.New())\n}",{"id":6548,"title":3370,"titles":6549,"content":6550,"level":155},"/v0.0.17/cookbook/pagination#multi-column-cursor",[1688,3356],"For sorting by non-unique columns, use composite cursors: func GetPostsByDate(\n    instance *astql.ASTQL,\n    cursorDate string,\n    cursorID int64,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"posts\")).\n        Fields(instance.F(\"id\"), instance.F(\"title\"), instance.F(\"created_at\")).\n        Limit(limit)\n\n    if cursorDate != \"\" {\n        // Composite cursor: (created_at, id)\n        query = query.Where(instance.Or(\n            // Same date, higher ID\n            instance.And(\n                instance.C(instance.F(\"created_at\"), astql.EQ, instance.P(\"cursor_date\")),\n                instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor_id\")),\n            ),\n            // Later date\n            instance.C(instance.F(\"created_at\"), astql.GT, instance.P(\"cursor_date\")),\n        ))\n    }\n\n    return query.\n        OrderBy(instance.F(\"created_at\"), astql.ASC).\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Render(postgres.New())\n}",{"id":6552,"title":3375,"titles":6553,"content":6554,"level":136},"/v0.0.17/cookbook/pagination#filtering-with-pagination",[1688],"Combine filters with pagination: func SearchUsers(\n    instance *astql.ASTQL,\n    filters UserFilters,\n    cursor int64,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"id\"), instance.F(\"username\"), instance.F(\"email\"))\n\n    // Build filter conditions using instance.ConditionItems()\n    conditions := instance.ConditionItems()\n\n    if filters.Active != nil {\n        conditions = append(conditions,\n            instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\")))\n    }\n\n    if filters.Role != \"\" {\n        conditions = append(conditions,\n            instance.C(instance.F(\"role\"), astql.EQ, instance.P(\"role\")))\n    }\n\n    // Add cursor condition\n    if cursor > 0 {\n        conditions = append(conditions,\n            instance.C(instance.F(\"id\"), astql.GT, instance.P(\"cursor\")))\n    }\n\n    // Apply conditions\n    if len(conditions) > 0 {\n        query = query.Where(instance.And(conditions...))\n    }\n\n    return query.\n        OrderBy(instance.F(\"id\"), astql.ASC).\n        Limit(limit).\n        Render(postgres.New())\n}",{"id":6556,"title":3380,"titles":6557,"content":6558,"level":136},"/v0.0.17/cookbook/pagination#pagination-with-joins",[1688],"Paginate joined results: func GetUserPosts(\n    instance *astql.ASTQL,\n    userID int64,\n    cursor int64,\n    limit int,\n) (*astql.QueryResult, error) {\n    query := astql.Select(instance.T(\"posts\", \"p\")).\n        Fields(\n            instance.WithTable(instance.F(\"id\"), \"p\"),\n            instance.WithTable(instance.F(\"title\"), \"p\"),\n            instance.WithTable(instance.F(\"username\"), \"u\"),\n        ).\n        Join(instance.T(\"users\", \"u\"), astql.CF(\n            instance.WithTable(instance.F(\"user_id\"), \"p\"),\n            astql.EQ,\n            instance.WithTable(instance.F(\"id\"), \"u\"),\n        )).\n        Where(instance.C(\n            instance.WithTable(instance.F(\"user_id\"), \"p\"),\n            astql.EQ,\n            instance.P(\"user_id\"),\n        ))\n\n    if cursor > 0 {\n        query = query.Where(instance.C(\n            instance.WithTable(instance.F(\"id\"), \"p\"),\n            astql.GT,\n            instance.P(\"cursor\"),\n        ))\n    }\n\n    return query.\n        OrderBy(instance.WithTable(instance.F(\"id\"), \"p\"), astql.ASC).\n        Limit(limit).\n        Render(postgres.New())\n}",{"id":6560,"title":3304,"titles":6561,"content":99,"level":136},"/v0.0.17/cookbook/pagination#best-practices",[1688],{"id":6563,"title":3388,"titles":6564,"content":6565,"level":155},"/v0.0.17/cookbook/pagination#_1-always-include-order-by",[1688,3304],"Pagination without ORDER BY produces unpredictable results: // Bad: no ordering\nastql.Select(table).Limit(10).Render(postgres.New())\n\n// Good: explicit ordering\nastql.Select(table).OrderBy(field, astql.ASC).Limit(10).Render(postgres.New())",{"id":6567,"title":3393,"titles":6568,"content":3395,"level":155},"/v0.0.17/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":6570,"title":3398,"titles":6571,"content":3400,"level":155},"/v0.0.17/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":6573,"title":3403,"titles":6574,"content":3405,"level":155},"/v0.0.17/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":6576,"title":1695,"titles":6577,"content":3409,"level":107},"/v0.0.17/cookbook/vector-search",[],{"id":6579,"title":1695,"titles":6580,"content":3413,"level":107},"/v0.0.17/cookbook/vector-search#vector-search",[],{"id":6582,"title":3416,"titles":6583,"content":3418,"level":136},"/v0.0.17/cookbook/vector-search#schema-setup",[1695],{"id":6585,"title":3421,"titles":6586,"content":3423,"level":136},"/v0.0.17/cookbook/vector-search#distance-operators",[1695],{"id":6588,"title":3426,"titles":6589,"content":3428,"level":136},"/v0.0.17/cookbook/vector-search#basic-similarity-search",[1695],{"id":6591,"title":3431,"titles":6592,"content":3433,"level":155},"/v0.0.17/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":6594,"title":3436,"titles":6595,"content":3438,"level":136},"/v0.0.17/cookbook/vector-search#cosine-similarity",[1695],{"id":6597,"title":3441,"titles":6598,"content":3443,"level":136},"/v0.0.17/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":6600,"title":3446,"titles":6601,"content":3448,"level":136},"/v0.0.17/cookbook/vector-search#filtered-vector-search",[1695],{"id":6603,"title":3451,"titles":6604,"content":3453,"level":136},"/v0.0.17/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":6606,"title":3456,"titles":6607,"content":3458,"level":136},"/v0.0.17/cookbook/vector-search#hybrid-search",[1695],{"id":6609,"title":3461,"titles":6610,"content":3463,"level":136},"/v0.0.17/cookbook/vector-search#multi-vector-search",[1695],{"id":6612,"title":3466,"titles":6613,"content":3468,"level":136},"/v0.0.17/cookbook/vector-search#indexing-recommendations",[1695],{"id":6615,"title":3304,"titles":6616,"content":99,"level":136},"/v0.0.17/cookbook/vector-search#best-practices",[1695],{"id":6618,"title":3474,"titles":6619,"content":3476,"level":155},"/v0.0.17/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":6621,"title":3479,"titles":6622,"content":3481,"level":155},"/v0.0.17/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":6624,"title":3484,"titles":6625,"content":3486,"level":155},"/v0.0.17/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":6627,"title":1702,"titles":6628,"content":3490,"level":107},"/v0.0.17/cookbook/upserts",[],{"id":6630,"title":1702,"titles":6631,"content":3494,"level":107},"/v0.0.17/cookbook/upserts#upserts",[],{"id":6633,"title":3497,"titles":6634,"content":6635,"level":136},"/v0.0.17/cookbook/upserts#basic-upsert",[1702],"Insert a row or update if it already exists: func UpsertUser(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n    values[instance.F(\"updated_at\")] = instance.P(\"now\")\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoUpdate().\n        Set(instance.F(\"username\"), instance.P(\"username\")).\n        Set(instance.F(\"updated_at\"), instance.P(\"now\")).\n        Build().\n        Render(postgres.New())\n}\n\n// INSERT INTO \"users\" (\"email\", \"updated_at\", \"username\")\n// VALUES (:email, :now, :username)\n// ON CONFLICT (\"email\") DO UPDATE SET \"updated_at\" = :now, \"username\" = :username",{"id":6637,"title":3502,"titles":6638,"content":6639,"level":136},"/v0.0.17/cookbook/upserts#do-nothing",[1702],"Skip conflicting rows without updating: func InsertIgnoreDuplicates(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoNothing().\n        Render(postgres.New())\n}\n\n// INSERT INTO \"users\" (\"email\", \"username\")\n// VALUES (:email, :username)\n// ON CONFLICT (\"email\") DO NOTHING",{"id":6641,"title":3507,"titles":6642,"content":6643,"level":136},"/v0.0.17/cookbook/upserts#multi-column-conflict",[1702],"Handle conflicts on composite unique constraints: func UpsertUserRole(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"user_id\")] = instance.P(\"user_id\")\n    values[instance.F(\"role_id\")] = instance.P(\"role_id\")\n    values[instance.F(\"granted_at\")] = instance.P(\"now\")\n\n    return astql.Insert(instance.T(\"user_roles\")).\n        Values(values).\n        OnConflict(instance.F(\"user_id\"), instance.F(\"role_id\")).\n        DoUpdate().\n        Set(instance.F(\"granted_at\"), instance.P(\"now\")).\n        Build().\n        Render(postgres.New())\n}\n\n// INSERT INTO \"user_roles\" (\"granted_at\", \"role_id\", \"user_id\")\n// VALUES (:now, :role_id, :user_id)\n// ON CONFLICT (\"user_id\", \"role_id\") DO UPDATE SET \"granted_at\" = :now",{"id":6645,"title":3512,"titles":6646,"content":6647,"level":136},"/v0.0.17/cookbook/upserts#returning-with-upsert",[1702],"Get the inserted or updated row: func UpsertUserReturning(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoUpdate().\n        Set(instance.F(\"username\"), instance.P(\"username\")).\n        Build().\n        Returning(instance.F(\"id\"), instance.F(\"created_at\"), instance.F(\"updated_at\")).\n        Render(postgres.New())\n}\n\n// INSERT INTO \"users\" (\"email\", \"username\")\n// VALUES (:email, :username)\n// ON CONFLICT (\"email\") DO UPDATE SET \"username\" = :username\n// RETURNING \"id\", \"created_at\", \"updated_at\"",{"id":6649,"title":3517,"titles":6650,"content":6651,"level":136},"/v0.0.17/cookbook/upserts#batch-upsert",[1702],"Insert multiple rows with conflict handling: func BatchUpsertProducts(instance *astql.ASTQL, count int) (*astql.QueryResult, error) {\n    query := astql.Insert(instance.T(\"products\"))\n\n    // Add multiple value sets\n    for i := 0; i \u003C count; i++ {\n        values := instance.ValueMap()\n        values[instance.F(\"sku\")] = instance.P(fmt.Sprintf(\"sku_%d\", i))\n        values[instance.F(\"name\")] = instance.P(fmt.Sprintf(\"name_%d\", i))\n        values[instance.F(\"price\")] = instance.P(fmt.Sprintf(\"price_%d\", i))\n        query = query.Values(values)\n    }\n\n    return query.\n        OnConflict(instance.F(\"sku\")).\n        DoUpdate().\n        Set(instance.F(\"name\"), instance.P(\"name_0\")).  // Uses first row params\n        Set(instance.F(\"price\"), instance.P(\"price_0\")).\n        Build().\n        Render(postgres.New())\n}\n\n// INSERT INTO \"products\" (\"name\", \"price\", \"sku\")\n// VALUES (:name_0, :price_0, :sku_0), (:name_1, :price_1, :sku_1), ...\n// ON CONFLICT (\"sku\") DO UPDATE SET \"name\" = :name_0, \"price\" = :price_0",{"id":6653,"title":3522,"titles":6654,"content":6655,"level":136},"/v0.0.17/cookbook/upserts#conditional-upsert",[1702],"Update only certain fields based on values: func UpsertWithCondition(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"product_id\")] = instance.P(\"product_id\")\n    values[instance.F(\"quantity\")] = instance.P(\"quantity\")\n    values[instance.F(\"updated_at\")] = instance.P(\"now\")\n\n    // Only update if new quantity is greater\n    // Note: This requires raw SQL for the WHERE clause on conflict\n    return astql.Insert(instance.T(\"inventory\")).\n        Values(values).\n        OnConflict(instance.F(\"product_id\")).\n        DoUpdate().\n        Set(instance.F(\"quantity\"), instance.P(\"quantity\")).\n        Set(instance.F(\"updated_at\"), instance.P(\"now\")).\n        Build().\n        Render(postgres.New())\n}",{"id":6657,"title":3527,"titles":6658,"content":6659,"level":136},"/v0.0.17/cookbook/upserts#sync-pattern",[1702],"Replace all rows for an entity (delete-then-insert pattern): func SyncUserPreferences(instance *astql.ASTQL, prefCount int) ([]astql.QueryResult, error) {\n    results := make([]astql.QueryResult, 0, 2)\n\n    // 1. Delete existing preferences\n    deleteResult, err := astql.Delete(instance.T(\"preferences\")).\n        Where(instance.C(instance.F(\"user_id\"), astql.EQ, instance.P(\"user_id\"))).\n        Render(postgres.New())\n    if err != nil {\n        return nil, err\n    }\n    results = append(results, *deleteResult)\n\n    // 2. Insert new preferences\n    query := astql.Insert(instance.T(\"preferences\"))\n    for i := 0; i \u003C prefCount; i++ {\n        values := instance.ValueMap()\n        values[instance.F(\"user_id\")] = instance.P(\"user_id\")\n        values[instance.F(\"key\")] = instance.P(fmt.Sprintf(\"key_%d\", i))\n        values[instance.F(\"value\")] = instance.P(fmt.Sprintf(\"value_%d\", i))\n        query = query.Values(values)\n    }\n\n    insertResult, err := query.Render(postgres.New())\n    if err != nil {\n        return nil, err\n    }\n    results = append(results, *insertResult)\n\n    return results, nil\n}",{"id":6661,"title":3532,"titles":6662,"content":6663,"level":136},"/v0.0.17/cookbook/upserts#upsert-with-timestamps",[1702],"Common pattern: set created_at on insert, updated_at always: func UpsertWithTimestamps(instance *astql.ASTQL) (*astql.QueryResult, error) {\n    values := instance.ValueMap()\n    values[instance.F(\"email\")] = instance.P(\"email\")\n    values[instance.F(\"username\")] = instance.P(\"username\")\n    values[instance.F(\"created_at\")] = instance.P(\"now\")  // Set on insert\n    values[instance.F(\"updated_at\")] = instance.P(\"now\")  // Set always\n\n    return astql.Insert(instance.T(\"users\")).\n        Values(values).\n        OnConflict(instance.F(\"email\")).\n        DoUpdate().\n        Set(instance.F(\"username\"), instance.P(\"username\")).\n        Set(instance.F(\"updated_at\"), instance.P(\"now\")).  // Only update updated_at\n        Build().\n        Render(postgres.New())\n}",{"id":6665,"title":3304,"titles":6666,"content":99,"level":136},"/v0.0.17/cookbook/upserts#best-practices",[1702],{"id":6668,"title":3540,"titles":6669,"content":3542,"level":155},"/v0.0.17/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":6671,"title":3545,"titles":6672,"content":3547,"level":155},"/v0.0.17/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":6674,"title":3550,"titles":6675,"content":3552,"level":155},"/v0.0.17/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":6677,"title":3555,"titles":6678,"content":3557,"level":155},"/v0.0.17/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":6680,"title":1709,"titles":6681,"content":6682,"level":107},"/v0.0.17/cookbook/orm-foundation",[],"Building type-safe ORMs with ASTQL as the query layer",{"id":6684,"title":1709,"titles":6685,"content":6686,"level":107},"/v0.0.17/cookbook/orm-foundation#orm-foundation",[],"Recipe: Use ASTQL as the query building layer for type-safe ORMs. ASTQL provides the foundation for building ORMs that are structurally safe from SQL injection. This cookbook shows how cereal uses ASTQL to deliver a simple query API with full schema validation.",{"id":6688,"title":6689,"titles":6690,"content":6691,"level":136},"/v0.0.17/cookbook/orm-foundation#the-result","The Result",[1709],"Define your model: type User struct {\n    ID    int64  `db:\"id\" type:\"bigserial\" constraints:\"primarykey\"`\n    Email string `db:\"email\" type:\"text\" constraints:\"unique,notnull\"`\n    Name  string `db:\"name\" type:\"text\"`\n} Get a type-safe query API: users, _ := cereal.New[User](db, \"users\")\n\n// Simple queries hide ASTQL complexity\nuser, err := users.Select().\n    Where(\"email\", \"=\", \"user_email\").\n    Exec(ctx, map[string]any{\"user_email\": \"test@example.com\"})\n\n// Schema validation happens at initialization, not runtime\nusers.Select().Where(\"emai\", \"=\", \"x\")  // Error: field \"emai\" not in schema Three lines to set up. Zero reflection on the query path. Full SQL injection protection.",{"id":6693,"title":6694,"titles":6695,"content":6696,"level":136},"/v0.0.17/cookbook/orm-foundation#the-architecture","The Architecture",[1709],"Cereal wraps three libraries: +------------------+\n|     cereal       |  Simple query API (.Select(), .Insert(), etc.)\n+------------------+\n        |\n+------------------+\n|      astql       |  Schema validation + AST building\n+------------------+\n        |\n+------------------+\n|     sentinel     |  Struct metadata extraction\n+------------------+\n        |\n+------------------+\n|      sqlx        |  Database execution\n+------------------+ Each layer has a single responsibility: Sentinel extracts struct metadata (field names, tags, types)ASTQL validates queries against a DBML schemaCereal provides the user-facing API and execution",{"id":6698,"title":6699,"titles":6700,"content":6701,"level":136},"/v0.0.17/cookbook/orm-foundation#how-astql-enables-this","How ASTQL Enables This",[1709],"When you call cereal.New[T]():",{"id":6703,"title":6704,"titles":6705,"content":6706,"level":155},"/v0.0.17/cookbook/orm-foundation#_1-sentinel-extracts-metadata","1. Sentinel Extracts Metadata",[1709,6699],"metadata := sentinel.Inspect[User]()\n// metadata.Fields contains:\n// - {Name: \"ID\", Tags: {\"db\": \"id\", \"type\": \"bigserial\", \"constraints\": \"primarykey\"}}\n// - {Name: \"Email\", Tags: {\"db\": \"email\", \"type\": \"text\", \"constraints\": \"unique,notnull\"}}\n// - {Name: \"Name\", Tags: {\"db\": \"name\", \"type\": \"text\"}}",{"id":6708,"title":6709,"titles":6710,"content":6711,"level":155},"/v0.0.17/cookbook/orm-foundation#_2-cereal-builds-dbml-schema","2. Cereal Builds DBML Schema",[1709,6699],"project := dbml.NewProject(\"app\")\ntable := dbml.NewTable(\"users\")\ntable.AddColumn(dbml.NewColumn(\"id\", \"bigserial\"))\ntable.AddColumn(dbml.NewColumn(\"email\", \"text\"))\ntable.AddColumn(dbml.NewColumn(\"name\", \"text\"))\nproject.AddTable(table)",{"id":6713,"title":6714,"titles":6715,"content":6716,"level":155},"/v0.0.17/cookbook/orm-foundation#_3-astql-creates-validated-instance","3. ASTQL Creates Validated Instance",[1709,6699],"instance, err := astql.NewFromDBML(project)\n// instance now validates all table/field references against this schema",{"id":6718,"title":6719,"titles":6720,"content":6721,"level":155},"/v0.0.17/cookbook/orm-foundation#_4-queries-use-astql-builders","4. Queries Use ASTQL Builders",[1709,6699],"// cereal.Select() internally calls:\nbuilder := astql.Select(instance.T(\"users\"))\n\n// cereal.Where(\"email\", \"=\", \"user_email\") internally calls:\nfield, _ := instance.TryF(\"email\")      // Validates field exists\nparam, _ := instance.TryP(\"user_email\") // Validates param name\nbuilder = builder.Where(instance.C(field, astql.EQ, param))\n\n// cereal.Exec() internally calls:\nresult, _ := builder.Render(postgres.New())\n// result.SQL: SELECT ... FROM \"users\" WHERE \"email\" = :user_email",{"id":6723,"title":6724,"titles":6725,"content":6726,"level":136},"/v0.0.17/cookbook/orm-foundation#the-security-model","The Security Model",[1709],"User input can only provide values, never structure: // User provides: {\"user_email\": \"test@example.com\"}\n// This becomes a parameter value, not part of the SQL structure\n\nusers.Select().\n    Where(\"email\", \"=\", \"user_email\").  // \"email\" is validated against schema\n    Exec(ctx, map[string]any{\n        \"user_email\": userInput,  // User input is a value, safely parameterized\n    }) Even if userInput contains \"'; DROP TABLE users; --\", it's treated as a literal string value, not SQL. The field name \"email\" must exist in the struct. The table name \"users\" must match the schema. Injection vectors are eliminated by construction.",{"id":6728,"title":6729,"titles":6730,"content":6731,"level":136},"/v0.0.17/cookbook/orm-foundation#escape-hatch-to-astql","Escape Hatch to ASTQL",[1709],"For queries beyond cereal's simple API, access ASTQL directly: instance := users.Instance()\n\n// Build complex queries with full ASTQL power\nquery := astql.Select(instance.T(\"users\")).\n    Fields(\n        instance.F(\"id\"),\n        instance.F(\"email\"),\n        astql.Count(instance.F(\"id\")).As(\"order_count\"),\n    ).\n    Join(instance.T(\"orders\", \"o\"), astql.CF(\n        instance.WithTable(instance.F(\"id\"), \"users\"),\n        astql.EQ,\n        instance.WithTable(instance.F(\"user_id\"), \"o\"),\n    )).\n    GroupBy(instance.F(\"id\"), instance.F(\"email\")).\n    Having(instance.CAgg(astql.Count(instance.F(\"id\")), astql.GT, instance.P(\"min_orders\")))\n\nresult, _ := query.Render(postgres.New()) Same schema validation. Same injection protection. Full query expressiveness.",{"id":6733,"title":6734,"titles":6735,"content":6736,"level":136},"/v0.0.17/cookbook/orm-foundation#building-your-own-orm","Building Your Own ORM",[1709],"To build an ASTQL-backed ORM:",{"id":6738,"title":6739,"titles":6740,"content":6741,"level":155},"/v0.0.17/cookbook/orm-foundation#_1-extract-schema-from-your-source","1. Extract Schema from Your Source",[1709,6734],"// From structs (like cereal)\nmetadata := sentinel.Inspect[YourModel]()\nproject := buildDBMLFromMetadata(metadata)\n\n// Or from existing DBML files\nproject, _ := dbml.Parse(dbmlContent)\n\n// Or programmatically\nproject := dbml.NewProject(\"app\")\n// ... add tables and columns",{"id":6743,"title":6744,"titles":6745,"content":6746,"level":155},"/v0.0.17/cookbook/orm-foundation#_2-create-astql-instance","2. Create ASTQL Instance",[1709,6734],"instance, err := astql.NewFromDBML(project)\nif err != nil {\n    return err  // Schema validation failed\n}",{"id":6748,"title":6749,"titles":6750,"content":6751,"level":155},"/v0.0.17/cookbook/orm-foundation#_3-wrap-query-builders","3. Wrap Query Builders",[1709,6734],"type YourORM struct {\n    instance *astql.ASTQL\n    table    string\n}\n\nfunc (o *YourORM) Select(fields ...string) *YourSelectBuilder {\n    t := o.instance.T(o.table)\n    builder := astql.Select(t)\n\n    for _, name := range fields {\n        f := o.instance.F(name)  // Panics if invalid\n        builder = builder.Fields(f)\n    }\n\n    return &YourSelectBuilder{builder: builder, instance: o.instance}\n}",{"id":6753,"title":6754,"titles":6755,"content":6756,"level":155},"/v0.0.17/cookbook/orm-foundation#_4-render-with-provider","4. Render with Provider",[1709,6734],"func (b *YourSelectBuilder) SQL() (string, error) {\n    result, err := b.builder.Render(postgres.New())\n    if err != nil {\n        return \"\", err\n    }\n    return result.SQL, nil\n}",{"id":6758,"title":6759,"titles":6760,"content":6761,"level":136},"/v0.0.17/cookbook/orm-foundation#see-also","See Also",[1709],"cereal — the ORM built on ASTQLsentinel — struct metadata extractionSchema Validation guide — DBML integration detailsProviders — database dialect support html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}",{"id":6763,"title":3560,"titles":6764,"content":3562,"level":107},"/v0.0.17/reference/api",[],{"id":6766,"title":3560,"titles":6767,"content":3566,"level":107},"/v0.0.17/reference/api#api-reference",[],{"id":6769,"title":3569,"titles":6770,"content":99,"level":136},"/v0.0.17/reference/api#instance-creation",[3560],{"id":6772,"title":856,"titles":6773,"content":3574,"level":155},"/v0.0.17/reference/api#newfromdbml",[3560,3569],{"id":6775,"title":3577,"titles":6776,"content":99,"level":136},"/v0.0.17/reference/api#instance-methods",[3560],{"id":6778,"title":119,"titles":6779,"content":3582,"level":155},"/v0.0.17/reference/api#t",[3560,3577],{"id":6781,"title":3585,"titles":6782,"content":3587,"level":155},"/v0.0.17/reference/api#tryt",[3560,3577],{"id":6784,"title":169,"titles":6785,"content":3591,"level":155},"/v0.0.17/reference/api#f",[3560,3577],{"id":6787,"title":3594,"titles":6788,"content":3596,"level":155},"/v0.0.17/reference/api#tryf",[3560,3577],{"id":6790,"title":316,"titles":6791,"content":3600,"level":155},"/v0.0.17/reference/api#p",[3560,3577],{"id":6793,"title":3603,"titles":6794,"content":3605,"level":155},"/v0.0.17/reference/api#tryp",[3560,3577],{"id":6796,"title":284,"titles":6797,"content":3609,"level":155},"/v0.0.17/reference/api#c",[3560,3577],{"id":6799,"title":3612,"titles":6800,"content":3614,"level":155},"/v0.0.17/reference/api#tryc",[3560,3577],{"id":6802,"title":3617,"titles":6803,"content":3619,"level":155},"/v0.0.17/reference/api#and",[3560,3577],{"id":6805,"title":3622,"titles":6806,"content":3624,"level":155},"/v0.0.17/reference/api#or",[3560,3577],{"id":6808,"title":3627,"titles":6809,"content":3629,"level":155},"/v0.0.17/reference/api#null",[3560,3577],{"id":6811,"title":3632,"titles":6812,"content":3634,"level":155},"/v0.0.17/reference/api#notnull",[3560,3577],{"id":6814,"title":3637,"titles":6815,"content":3639,"level":155},"/v0.0.17/reference/api#withtable",[3560,3577],{"id":6817,"title":3642,"titles":6818,"content":3644,"level":155},"/v0.0.17/reference/api#trywithtable",[3560,3577],{"id":6820,"title":3647,"titles":6821,"content":3649,"level":155},"/v0.0.17/reference/api#aggc",[3560,3577],{"id":6823,"title":3652,"titles":6824,"content":3654,"level":155},"/v0.0.17/reference/api#tryaggc",[3560,3577],{"id":6826,"title":3657,"titles":6827,"content":3659,"level":155},"/v0.0.17/reference/api#valuemap",[3560,3577],{"id":6829,"title":3662,"titles":6830,"content":99,"level":136},"/v0.0.17/reference/api#query-builders",[3560],{"id":6832,"title":219,"titles":6833,"content":3667,"level":155},"/v0.0.17/reference/api#select",[3560,3662],{"id":6835,"title":3670,"titles":6836,"content":3672,"level":155},"/v0.0.17/reference/api#insert",[3560,3662],{"id":6838,"title":3675,"titles":6839,"content":3677,"level":155},"/v0.0.17/reference/api#update",[3560,3662],{"id":6841,"title":3680,"titles":6842,"content":3682,"level":155},"/v0.0.17/reference/api#delete",[3560,3662],{"id":6844,"title":3685,"titles":6845,"content":3687,"level":155},"/v0.0.17/reference/api#count",[3560,3662],{"id":6847,"title":3690,"titles":6848,"content":99,"level":136},"/v0.0.17/reference/api#builder-methods",[3560],{"id":6850,"title":2665,"titles":6851,"content":3695,"level":155},"/v0.0.17/reference/api#fields",[3560,3690],{"id":6853,"title":3698,"titles":6854,"content":3700,"level":155},"/v0.0.17/reference/api#where",[3560,3690],{"id":6856,"title":3703,"titles":6857,"content":3705,"level":155},"/v0.0.17/reference/api#wherefield",[3560,3690],{"id":6859,"title":3708,"titles":6860,"content":3710,"level":155},"/v0.0.17/reference/api#orderby",[3560,3690],{"id":6862,"title":3713,"titles":6863,"content":3715,"level":155},"/v0.0.17/reference/api#orderbynulls",[3560,3690],{"id":6865,"title":3718,"titles":6866,"content":3720,"level":155},"/v0.0.17/reference/api#orderbyexpr",[3560,3690],{"id":6868,"title":3723,"titles":6869,"content":5734,"level":155},"/v0.0.17/reference/api#limit",[3560,3690],{"id":6871,"title":5737,"titles":6872,"content":5739,"level":155},"/v0.0.17/reference/api#limitparam",[3560,3690],{"id":6874,"title":3728,"titles":6875,"content":5743,"level":155},"/v0.0.17/reference/api#offset",[3560,3690],{"id":6877,"title":5746,"titles":6878,"content":5748,"level":155},"/v0.0.17/reference/api#offsetparam",[3560,3690],{"id":6880,"title":3733,"titles":6881,"content":3735,"level":155},"/v0.0.17/reference/api#set",[3560,3690],{"id":6883,"title":3738,"titles":6884,"content":3740,"level":155},"/v0.0.17/reference/api#values",[3560,3690],{"id":6886,"title":3743,"titles":6887,"content":3745,"level":155},"/v0.0.17/reference/api#returning",[3560,3690],{"id":6889,"title":3748,"titles":6890,"content":3750,"level":155},"/v0.0.17/reference/api#distinct",[3560,3690],{"id":6892,"title":3753,"titles":6893,"content":3755,"level":155},"/v0.0.17/reference/api#distincton",[3560,3690],{"id":6895,"title":3758,"titles":6896,"content":3760,"level":155},"/v0.0.17/reference/api#groupby",[3560,3690],{"id":6898,"title":3763,"titles":6899,"content":3765,"level":155},"/v0.0.17/reference/api#having",[3560,3690],{"id":6901,"title":3768,"titles":6902,"content":3770,"level":155},"/v0.0.17/reference/api#havingagg",[3560,3690],{"id":6904,"title":3773,"titles":6905,"content":3775,"level":155},"/v0.0.17/reference/api#selectexpr",[3560,3690],{"id":6907,"title":3778,"titles":6908,"content":3780,"level":155},"/v0.0.17/reference/api#onconflict",[3560,3690],{"id":6910,"title":3783,"titles":6911,"content":3785,"level":155},"/v0.0.17/reference/api#join-methods",[3560,3690],{"id":6913,"title":3788,"titles":6914,"content":3790,"level":155},"/v0.0.17/reference/api#row-locking",[3560,3690],{"id":6916,"title":3793,"titles":6917,"content":3795,"level":155},"/v0.0.17/reference/api#build",[3560,3690],{"id":6919,"title":3798,"titles":6920,"content":3800,"level":155},"/v0.0.17/reference/api#mustbuild",[3560,3690],{"id":6922,"title":350,"titles":6923,"content":6924,"level":155},"/v0.0.17/reference/api#render",[3560,3690],"func (b *Builder) Render(renderer Renderer) (*QueryResult, error) Builds and renders the query to SQL using the specified provider (e.g., postgres.New(), sqlite.New()).",{"id":6926,"title":3807,"titles":6927,"content":6928,"level":155},"/v0.0.17/reference/api#mustrender",[3560,3690],"func (b *Builder) MustRender(renderer Renderer) *QueryResult Builds and renders the query with the specified provider or panics on error.",{"id":6930,"title":3812,"titles":6931,"content":99,"level":136},"/v0.0.17/reference/api#set-operations",[3560],{"id":6933,"title":3816,"titles":6934,"content":3818,"level":155},"/v0.0.17/reference/api#union-unionall",[3560,3812],{"id":6936,"title":3821,"titles":6937,"content":3823,"level":155},"/v0.0.17/reference/api#intersect-intersectall",[3560,3812],{"id":6939,"title":3826,"titles":6940,"content":3828,"level":155},"/v0.0.17/reference/api#except-exceptall",[3560,3812],{"id":6942,"title":3831,"titles":6943,"content":6944,"level":136},"/v0.0.17/reference/api#rendering",[3560],"Rendering is done through provider instances. Each provider implements the Renderer interface: type Renderer interface {\n    Render(ast *types.AST) (*QueryResult, error)\n    RenderCompound(query *types.CompoundQuery) (*QueryResult, error)\n} Use the provider's methods directly or through the builder's Render() method: // Through builder (recommended)\nresult, err := query.Render(postgres.New())\n\n// Direct provider use\nast, _ := query.Build()\nresult, err := postgres.New().Render(ast)",{"id":6946,"title":3844,"titles":6947,"content":99,"level":136},"/v0.0.17/reference/api#expression-functions",[3560],{"id":6949,"title":1668,"titles":6950,"content":3849,"level":155},"/v0.0.17/reference/api#aggregates",[3560,3844],{"id":6952,"title":3852,"titles":6953,"content":3854,"level":155},"/v0.0.17/reference/api#filter-aggregates",[3560,3844],{"id":6955,"title":1251,"titles":6956,"content":3858,"level":155},"/v0.0.17/reference/api#conditions",[3560,3844],{"id":6958,"title":3006,"titles":6959,"content":3862,"level":155},"/v0.0.17/reference/api#subqueries",[3560,3844],{"id":6961,"title":3865,"titles":6962,"content":3867,"level":155},"/v0.0.17/reference/api#case-expression",[3560,3844],{"id":6964,"title":3870,"titles":6965,"content":3872,"level":155},"/v0.0.17/reference/api#null-handling",[3560,3844],{"id":6967,"title":3203,"titles":6968,"content":3876,"level":155},"/v0.0.17/reference/api#math-functions",[3560,3844],{"id":6970,"title":5855,"titles":6971,"content":5857,"level":155},"/v0.0.17/reference/api#string-functions",[3560,3844],{"id":6973,"title":5860,"titles":6974,"content":5862,"level":155},"/v0.0.17/reference/api#date-functions",[3560,3844],{"id":6976,"title":3221,"titles":6977,"content":3880,"level":155},"/v0.0.17/reference/api#type-casting",[3560,3844],{"id":6979,"title":3173,"titles":6980,"content":3884,"level":155},"/v0.0.17/reference/api#window-functions",[3560,3844],{"id":6982,"title":3193,"titles":6983,"content":3888,"level":155},"/v0.0.17/reference/api#window-specification",[3560,3844],{"id":6985,"title":3891,"titles":6986,"content":3893,"level":155},"/v0.0.17/reference/api#windowbuilder-methods",[3560,3844],{"id":6988,"title":3896,"titles":6989,"content":3898,"level":155},"/v0.0.17/reference/api#expression-alias",[3560,3844],{"id":6991,"title":3163,"titles":6992,"content":3902,"level":155},"/v0.0.17/reference/api#having-helpers",[3560,3844],{"id":6994,"title":3905,"titles":6995,"content":99,"level":136},"/v0.0.17/reference/api#types",[3560],{"id":6997,"title":3909,"titles":6998,"content":3911,"level":155},"/v0.0.17/reference/api#queryresult",[3560,3905],{"id":7000,"title":3914,"titles":7001,"content":3916,"level":155},"/v0.0.17/reference/api#direction",[3560,3905],{"id":7003,"title":3919,"titles":7004,"content":3921,"level":155},"/v0.0.17/reference/api#nullsordering",[3560,3905],{"id":7006,"title":3924,"titles":7007,"content":5896,"level":155},"/v0.0.17/reference/api#operation",[3560,3905],{"id":7009,"title":5899,"titles":7010,"content":99,"level":136},"/v0.0.17/reference/api#providers",[3560],{"id":7012,"title":5903,"titles":7013,"content":5905,"level":155},"/v0.0.17/reference/api#renderer-interface",[3560,5899],{"id":7015,"title":5908,"titles":7016,"content":7017,"level":155},"/v0.0.17/reference/api#postgresql-provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/postgres\"\n\nrenderer := postgres.New()\nresult, err := query.Render(renderer) Full feature support.",{"id":7019,"title":5913,"titles":7020,"content":7021,"level":155},"/v0.0.17/reference/api#sqlite-provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/sqlite\"\n\nrenderer := sqlite.New()\nresult, err := query.Render(renderer) Returns UnsupportedFeatureError for features not available in SQLite: DISTINCT ONILIKE / NOT ILIKERegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)IN / NOT IN with array parametersRow-level locking (FOR UPDATE, FOR SHARE)POWER and SQRT math functions",{"id":7023,"title":5918,"titles":7024,"content":7025,"level":155},"/v0.0.17/reference/api#mysql-provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/mysql\"\n\nrenderer := mysql.New()\nresult, err := query.Render(renderer) MySQL-specific behavior: Uses backtick quoting for identifiers: `name`Uses :name parameter placeholders (sqlx compatible)ON CONFLICT DO UPDATE → ON DUPLICATE KEY UPDATEON CONFLICT DO NOTHING → ON DUPLICATE KEY UPDATE field = field (no-op)ILIKE maps to LIKE (MySQL LIKE is case-insensitive by default)Standard IN (...) syntax instead of = ANY(:array) Returns UnsupportedFeatureError for: RETURNING clauseDISTINCT ONFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)FOR NO KEY UPDATE / FOR KEY SHARE (use FOR UPDATE or FOR SHARE instead)",{"id":7027,"title":5923,"titles":7028,"content":7029,"level":155},"/v0.0.17/reference/api#sql-server-provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/mssql\"\n\nrenderer := mssql.New()\nresult, err := query.Render(renderer) SQL Server-specific behavior: Uses square bracket quoting for identifiers: [name]Uses @name parameter placeholdersLIMIT/OFFSET → OFFSET n ROWS FETCH NEXT m ROWS ONLY (requires ORDER BY)RETURNING → OUTPUT INSERTED.* / OUTPUT DELETED.*LENGTH() → LEN()NOW() → GETDATE()EXTRACT() → DATEPART()!= → \u003C> (preferred SQL Server syntax) Returns UnsupportedFeatureError for: ON CONFLICT / upsert (MERGE is too complex)DISTINCT ONILIKE / NOT ILIKEFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)Row-level locking (FOR UPDATE, FOR SHARE)LIMIT without ORDER BY (returns error) html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}",{"id":7031,"title":3929,"titles":7032,"content":3931,"level":107},"/v0.0.17/reference/operators",[],{"id":7034,"title":3929,"titles":7035,"content":3935,"level":107},"/v0.0.17/reference/operators#operators-reference",[],{"id":7037,"title":2959,"titles":7038,"content":3939,"level":136},"/v0.0.17/reference/operators#comparison-operators",[3929],{"id":7040,"title":3341,"titles":7041,"content":3943,"level":155},"/v0.0.17/reference/operators#usage",[3929,2959],{"id":7043,"title":2964,"titles":7044,"content":3947,"level":136},"/v0.0.17/reference/operators#pattern-matching",[3929],{"id":7046,"title":3341,"titles":7047,"content":3951,"level":155},"/v0.0.17/reference/operators#usage-1",[3929,2964],{"id":7049,"title":3954,"titles":7050,"content":3956,"level":136},"/v0.0.17/reference/operators#null-operators",[3929],{"id":7052,"title":3341,"titles":7053,"content":3960,"level":155},"/v0.0.17/reference/operators#usage-2",[3929,3954],{"id":7055,"title":2974,"titles":7056,"content":3964,"level":136},"/v0.0.17/reference/operators#array-operators",[3929],{"id":7058,"title":3341,"titles":7059,"content":3968,"level":155},"/v0.0.17/reference/operators#usage-3",[3929,2974],{"id":7061,"title":3971,"titles":7062,"content":3973,"level":155},"/v0.0.17/reference/operators#with-sqlx",[3929,2974],{"id":7064,"title":3976,"titles":7065,"content":3978,"level":136},"/v0.0.17/reference/operators#subquery-operators",[3929],{"id":7067,"title":3341,"titles":7068,"content":3982,"level":155},"/v0.0.17/reference/operators#usage-4",[3929,3976],{"id":7070,"title":3985,"titles":7071,"content":3987,"level":136},"/v0.0.17/reference/operators#regex-operators",[3929],{"id":7073,"title":3341,"titles":7074,"content":3991,"level":155},"/v0.0.17/reference/operators#usage-5",[3929,3985],{"id":7076,"title":3994,"titles":7077,"content":3996,"level":136},"/v0.0.17/reference/operators#postgresql-array-operators",[3929],{"id":7079,"title":3341,"titles":7080,"content":4000,"level":155},"/v0.0.17/reference/operators#usage-6",[3929,3994],{"id":7082,"title":4003,"titles":7083,"content":4005,"level":136},"/v0.0.17/reference/operators#vector-operators-pgvector",[3929],{"id":7085,"title":3341,"titles":7086,"content":4009,"level":155},"/v0.0.17/reference/operators#usage-7",[3929,4003],{"id":7088,"title":4012,"titles":7089,"content":4014,"level":155},"/v0.0.17/reference/operators#with-pgvector",[3929,4003],{"id":7091,"title":4017,"titles":7092,"content":4019,"level":136},"/v0.0.17/reference/operators#operator-selection-guide",[3929],{"id":7094,"title":3124,"titles":7095,"content":4023,"level":136},"/v0.0.17/reference/operators#aggregate-functions",[3929],{"id":7097,"title":3173,"titles":7098,"content":4027,"level":136},"/v0.0.17/reference/operators#window-functions",[3929],{"id":7100,"title":3198,"titles":7101,"content":4031,"level":136},"/v0.0.17/reference/operators#frame-bounds",[3929],{"id":7103,"title":4034,"titles":7104,"content":4036,"level":136},"/v0.0.17/reference/operators#cast-types",[3929],{"id":7106,"title":1614,"titles":7107,"content":2581,"level":107},"/v0.0.18/overview",[],{"id":7109,"title":1614,"titles":7110,"content":6007,"level":107},"/v0.0.18/overview#overview",[],{"id":7112,"title":1237,"titles":7113,"content":2589,"level":136},"/v0.0.18/overview#architecture",[1614],{"id":7115,"title":2592,"titles":7116,"content":2594,"level":136},"/v0.0.18/overview#philosophy",[1614],{"id":7118,"title":1187,"titles":7119,"content":2598,"level":136},"/v0.0.18/overview#capabilities",[1614],{"id":7121,"title":2601,"titles":7122,"content":99,"level":136},"/v0.0.18/overview#priorities",[1614],{"id":7124,"title":1782,"titles":7125,"content":2606,"level":155},"/v0.0.18/overview#security",[1614,2601],{"id":7127,"title":2609,"titles":7128,"content":6026,"level":155},"/v0.0.18/overview#ergonomics",[1614,2601],{"id":7130,"title":5002,"titles":7131,"content":6030,"level":155},"/v0.0.18/overview#multi-provider-architecture",[1614,2601],{"id":7133,"title":1628,"titles":7134,"content":2620,"level":107},"/v0.0.18/learn/quickstart",[],{"id":7136,"title":1628,"titles":7137,"content":99,"level":107},"/v0.0.18/learn/quickstart#quickstart",[],{"id":7139,"title":2626,"titles":7140,"content":6040,"level":136},"/v0.0.18/learn/quickstart#requirements",[1628],{"id":7142,"title":2631,"titles":7143,"content":2633,"level":136},"/v0.0.18/learn/quickstart#installation",[1628],{"id":7145,"title":2636,"titles":7146,"content":6047,"level":136},"/v0.0.18/learn/quickstart#basic-usage",[1628],{"id":7148,"title":2641,"titles":7149,"content":6051,"level":136},"/v0.0.18/learn/quickstart#whats-happening",[1628],{"id":7151,"title":2646,"titles":7152,"content":6055,"level":136},"/v0.0.18/learn/quickstart#using-with-sqlx",[1628],{"id":7154,"title":2651,"titles":7155,"content":2653,"level":107},"/v0.0.18/learn/concepts",[],{"id":7157,"title":2651,"titles":7158,"content":2657,"level":107},"/v0.0.18/learn/concepts#core-concepts",[],{"id":7160,"title":2660,"titles":7161,"content":2662,"level":136},"/v0.0.18/learn/concepts#tables",[2651],{"id":7163,"title":2665,"titles":7164,"content":2667,"level":136},"/v0.0.18/learn/concepts#fields",[2651],{"id":7166,"title":2670,"titles":7167,"content":2672,"level":155},"/v0.0.18/learn/concepts#field-validation",[2651,2665],{"id":7169,"title":2675,"titles":7170,"content":2677,"level":136},"/v0.0.18/learn/concepts#params",[2651],{"id":7172,"title":2680,"titles":7173,"content":2682,"level":155},"/v0.0.18/learn/concepts#parameter-validation",[2651,2675],{"id":7175,"title":1251,"titles":7176,"content":2686,"level":136},"/v0.0.18/learn/concepts#conditions",[2651],{"id":7178,"title":1727,"titles":7179,"content":2690,"level":155},"/v0.0.18/learn/concepts#operators",[2651,1251],{"id":7181,"title":2693,"titles":7182,"content":2695,"level":155},"/v0.0.18/learn/concepts#combining-conditions",[2651,1251],{"id":7184,"title":2698,"titles":7185,"content":2700,"level":155},"/v0.0.18/learn/concepts#nested-conditions",[2651,1251],{"id":7187,"title":2703,"titles":7188,"content":2705,"level":155},"/v0.0.18/learn/concepts#null-conditions",[2651,1251],{"id":7190,"title":2708,"titles":7191,"content":2710,"level":155},"/v0.0.18/learn/concepts#field-comparisons",[2651,1251],{"id":7193,"title":2713,"titles":7194,"content":2715,"level":136},"/v0.0.18/learn/concepts#builders",[2651],{"id":7196,"title":2718,"titles":7197,"content":6101,"level":155},"/v0.0.18/learn/concepts#fluent-api",[2651,2713],{"id":7199,"title":2723,"titles":7200,"content":6105,"level":155},"/v0.0.18/learn/concepts#build-vs-render",[2651,2713],{"id":7202,"title":2728,"titles":7203,"content":6109,"level":155},"/v0.0.18/learn/concepts#must-variants",[2651,2713],{"id":7205,"title":2733,"titles":7206,"content":2735,"level":136},"/v0.0.18/learn/concepts#try-variants",[2651],{"id":7208,"title":2738,"titles":7209,"content":2740,"level":136},"/v0.0.18/learn/concepts#query-result",[2651],{"id":7211,"title":1237,"titles":7212,"content":2744,"level":107},"/v0.0.18/learn/architecture",[],{"id":7214,"title":1237,"titles":7215,"content":2748,"level":107},"/v0.0.18/learn/architecture#architecture",[],{"id":7217,"title":2751,"titles":7218,"content":2753,"level":136},"/v0.0.18/learn/architecture#pipeline-overview",[1237],{"id":7220,"title":2756,"titles":7221,"content":99,"level":136},"/v0.0.18/learn/architecture#validation-layer",[1237],{"id":7223,"title":1215,"titles":7224,"content":2761,"level":155},"/v0.0.18/learn/architecture#schema-validation",[1237,2756],{"id":7226,"title":2764,"titles":7227,"content":2766,"level":155},"/v0.0.18/learn/architecture#identifier-validation",[1237,2756],{"id":7229,"title":2769,"titles":7230,"content":2771,"level":155},"/v0.0.18/learn/architecture#alias-restrictions",[1237,2756],{"id":7232,"title":2774,"titles":7233,"content":5107,"level":136},"/v0.0.18/learn/architecture#ast-structure",[1237],{"id":7235,"title":2779,"titles":7236,"content":2781,"level":155},"/v0.0.18/learn/architecture#internal-types",[1237,2774],{"id":7238,"title":2784,"titles":7239,"content":2786,"level":155},"/v0.0.18/learn/architecture#condition-types",[1237,2774],{"id":7241,"title":2789,"titles":7242,"content":2791,"level":136},"/v0.0.18/learn/architecture#render-engine",[1237],{"id":7244,"title":2794,"titles":7245,"content":2796,"level":155},"/v0.0.18/learn/architecture#identifier-quoting",[1237,2789],{"id":7247,"title":2799,"titles":7248,"content":2801,"level":155},"/v0.0.18/learn/architecture#parameter-placeholders",[1237,2789],{"id":7250,"title":2804,"titles":7251,"content":2806,"level":155},"/v0.0.18/learn/architecture#parameter-namespacing",[1237,2789],{"id":7253,"title":5128,"titles":7254,"content":5130,"level":136},"/v0.0.18/learn/architecture#provider-architecture",[1237],{"id":7256,"title":5133,"titles":7257,"content":6164,"level":155},"/v0.0.18/learn/architecture#available-providers",[1237,5128],{"id":7259,"title":3341,"titles":7260,"content":6168,"level":155},"/v0.0.18/learn/architecture#usage",[1237,5128],{"id":7262,"title":5142,"titles":7263,"content":5144,"level":155},"/v0.0.18/learn/architecture#dialect-differences",[1237,5128],{"id":7265,"title":2809,"titles":7266,"content":6175,"level":136},"/v0.0.18/learn/architecture#file-structure",[1237],{"id":7268,"title":2814,"titles":7269,"content":2816,"level":136},"/v0.0.18/learn/architecture#security-layers",[1237],{"id":7271,"title":2819,"titles":7272,"content":99,"level":136},"/v0.0.18/learn/architecture#extension-points",[1237],{"id":7274,"title":2823,"titles":7275,"content":2825,"level":155},"/v0.0.18/learn/architecture#custom-expressions",[1237,2819],{"id":7277,"title":2828,"titles":7278,"content":2830,"level":155},"/v0.0.18/learn/architecture#compound-queries",[1237,2819],{"id":7280,"title":2833,"titles":7281,"content":6191,"level":155},"/v0.0.18/learn/architecture#direct-ast-access",[1237,2819],{"id":7283,"title":1215,"titles":7284,"content":2839,"level":107},"/v0.0.18/guides/schema-validation",[],{"id":7286,"title":1215,"titles":7287,"content":2843,"level":107},"/v0.0.18/guides/schema-validation#schema-validation",[],{"id":7289,"title":2846,"titles":7290,"content":2848,"level":136},"/v0.0.18/guides/schema-validation#defining-a-schema",[1215],{"id":7292,"title":2851,"titles":7293,"content":2853,"level":136},"/v0.0.18/guides/schema-validation#creating-an-instance",[1215],{"id":7295,"title":2856,"titles":7296,"content":99,"level":136},"/v0.0.18/guides/schema-validation#validation-behavior",[1215],{"id":7298,"title":2860,"titles":7299,"content":2862,"level":155},"/v0.0.18/guides/schema-validation#table-validation",[1215,2856],{"id":7301,"title":2670,"titles":7302,"content":2866,"level":155},"/v0.0.18/guides/schema-validation#field-validation",[1215,2856],{"id":7304,"title":2680,"titles":7305,"content":2870,"level":155},"/v0.0.18/guides/schema-validation#parameter-validation",[1215,2856],{"id":7307,"title":2873,"titles":7308,"content":2875,"level":136},"/v0.0.18/guides/schema-validation#panic-vs-error",[1215],{"id":7310,"title":2733,"titles":7311,"content":2879,"level":155},"/v0.0.18/guides/schema-validation#try-variants",[1215,2873],{"id":7313,"title":2882,"titles":7314,"content":2884,"level":155},"/v0.0.18/guides/schema-validation#when-to-use-each",[1215,2873],{"id":7316,"title":2887,"titles":7317,"content":2889,"level":136},"/v0.0.18/guides/schema-validation#table-aliases",[1215],{"id":7319,"title":2769,"titles":7320,"content":2893,"level":155},"/v0.0.18/guides/schema-validation#alias-restrictions",[1215,2887],{"id":7322,"title":2896,"titles":7323,"content":2898,"level":155},"/v0.0.18/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":7325,"title":2901,"titles":7326,"content":99,"level":136},"/v0.0.18/guides/schema-validation#schema-organization",[1215],{"id":7328,"title":2905,"titles":7329,"content":6240,"level":155},"/v0.0.18/guides/schema-validation#single-schema-instance",[1215,2901],{"id":7331,"title":2910,"titles":7332,"content":2912,"level":155},"/v0.0.18/guides/schema-validation#multiple-schemas",[1215,2901],{"id":7334,"title":2915,"titles":7335,"content":99,"level":136},"/v0.0.18/guides/schema-validation#dynamic-queries",[1215],{"id":7337,"title":2919,"titles":7338,"content":6250,"level":155},"/v0.0.18/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":7340,"title":2924,"titles":7341,"content":2926,"level":155},"/v0.0.18/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":7343,"title":2929,"titles":7344,"content":99,"level":136},"/v0.0.18/guides/schema-validation#validation-errors",[1215],{"id":7346,"title":2933,"titles":7347,"content":2935,"level":155},"/v0.0.18/guides/schema-validation#error-types",[1215,2929],{"id":7349,"title":2938,"titles":7350,"content":6263,"level":155},"/v0.0.18/guides/schema-validation#handling-errors",[1215,2929],{"id":7352,"title":1251,"titles":7353,"content":2944,"level":107},"/v0.0.18/guides/conditions",[],{"id":7355,"title":1251,"titles":7356,"content":2948,"level":107},"/v0.0.18/guides/conditions#conditions",[],{"id":7358,"title":2951,"titles":7359,"content":2953,"level":136},"/v0.0.18/guides/conditions#basic-conditions",[1251],{"id":7361,"title":1727,"titles":7362,"content":99,"level":136},"/v0.0.18/guides/conditions#operators",[1251],{"id":7364,"title":2959,"titles":7365,"content":2961,"level":155},"/v0.0.18/guides/conditions#comparison-operators",[1251,1727],{"id":7367,"title":2964,"titles":7368,"content":2966,"level":155},"/v0.0.18/guides/conditions#pattern-matching",[1251,1727],{"id":7370,"title":2969,"titles":7371,"content":2971,"level":155},"/v0.0.18/guides/conditions#null-checks",[1251,1727],{"id":7373,"title":2974,"titles":7374,"content":2976,"level":155},"/v0.0.18/guides/conditions#array-operators",[1251,1727],{"id":7376,"title":2693,"titles":7377,"content":99,"level":136},"/v0.0.18/guides/conditions#combining-conditions",[1251],{"id":7379,"title":2982,"titles":7380,"content":2984,"level":155},"/v0.0.18/guides/conditions#and",[1251,2693],{"id":7382,"title":2987,"titles":7383,"content":2989,"level":155},"/v0.0.18/guides/conditions#or",[1251,2693],{"id":7385,"title":2992,"titles":7386,"content":2994,"level":155},"/v0.0.18/guides/conditions#nested-logic",[1251,2693],{"id":7388,"title":2997,"titles":7389,"content":2999,"level":136},"/v0.0.18/guides/conditions#between",[1251],{"id":7391,"title":2708,"titles":7392,"content":3003,"level":136},"/v0.0.18/guides/conditions#field-comparisons",[1251],{"id":7394,"title":3006,"titles":7395,"content":99,"level":136},"/v0.0.18/guides/conditions#subqueries",[1251],{"id":7397,"title":3010,"titles":7398,"content":3012,"level":155},"/v0.0.18/guides/conditions#in-subquery",[1251,3006],{"id":7400,"title":3015,"titles":7401,"content":3017,"level":155},"/v0.0.18/guides/conditions#not-in-subquery",[1251,3006],{"id":7403,"title":3020,"titles":7404,"content":3022,"level":155},"/v0.0.18/guides/conditions#exists",[1251,3006],{"id":7406,"title":3025,"titles":7407,"content":3027,"level":155},"/v0.0.18/guides/conditions#not-exists",[1251,3006],{"id":7409,"title":2804,"titles":7410,"content":3031,"level":155},"/v0.0.18/guides/conditions#parameter-namespacing",[1251,3006],{"id":7412,"title":3034,"titles":7413,"content":3036,"level":136},"/v0.0.18/guides/conditions#multiple-where-clauses",[1251],{"id":7415,"title":3039,"titles":7416,"content":3041,"level":136},"/v0.0.18/guides/conditions#wherefield-shorthand",[1251],{"id":7418,"title":3044,"titles":7419,"content":3046,"level":136},"/v0.0.18/guides/conditions#building-conditions-dynamically",[1251],{"id":7421,"title":1265,"titles":7422,"content":3050,"level":107},"/v0.0.18/guides/joins",[],{"id":7424,"title":1265,"titles":7425,"content":3054,"level":107},"/v0.0.18/guides/joins#joins",[],{"id":7427,"title":3057,"titles":7428,"content":3059,"level":136},"/v0.0.18/guides/joins#join-types",[1265],{"id":7430,"title":3062,"titles":7431,"content":3064,"level":136},"/v0.0.18/guides/joins#basic-join",[1265],{"id":7433,"title":2887,"titles":7434,"content":3068,"level":136},"/v0.0.18/guides/joins#table-aliases",[1265],{"id":7436,"title":3071,"titles":7437,"content":3073,"level":136},"/v0.0.18/guides/joins#left-join",[1265],{"id":7439,"title":3076,"titles":7440,"content":3078,"level":136},"/v0.0.18/guides/joins#right-join",[1265],{"id":7442,"title":3081,"titles":7443,"content":3083,"level":136},"/v0.0.18/guides/joins#full-outer-join",[1265],{"id":7445,"title":3086,"titles":7446,"content":3088,"level":136},"/v0.0.18/guides/joins#cross-join",[1265],{"id":7448,"title":3091,"titles":7449,"content":3093,"level":136},"/v0.0.18/guides/joins#multiple-joins",[1265],{"id":7451,"title":3096,"titles":7452,"content":3098,"level":136},"/v0.0.18/guides/joins#complex-on-conditions",[1265],{"id":7454,"title":3101,"titles":7455,"content":3103,"level":136},"/v0.0.18/guides/joins#self-joins",[1265],{"id":7457,"title":3106,"titles":7458,"content":3108,"level":136},"/v0.0.18/guides/joins#joins-with-count",[1265],{"id":7460,"title":3111,"titles":7461,"content":3113,"level":136},"/v0.0.18/guides/joins#join-validation",[1265],{"id":7463,"title":1668,"titles":7464,"content":3117,"level":107},"/v0.0.18/guides/aggregates",[],{"id":7466,"title":1668,"titles":7467,"content":3121,"level":107},"/v0.0.18/guides/aggregates#aggregates",[],{"id":7469,"title":3124,"titles":7470,"content":99,"level":136},"/v0.0.18/guides/aggregates#aggregate-functions",[1668],{"id":7472,"title":3128,"titles":7473,"content":3130,"level":155},"/v0.0.18/guides/aggregates#basic-aggregates",[1668,3124],{"id":7475,"title":3133,"titles":7476,"content":3135,"level":155},"/v0.0.18/guides/aggregates#using-aggregates",[1668,3124],{"id":7478,"title":3138,"titles":7479,"content":3140,"level":155},"/v0.0.18/guides/aggregates#aliases",[1668,3124],{"id":7481,"title":3143,"titles":7482,"content":3145,"level":136},"/v0.0.18/guides/aggregates#group-by",[1668],{"id":7484,"title":3148,"titles":7485,"content":3150,"level":136},"/v0.0.18/guides/aggregates#having",[1668],{"id":7487,"title":3153,"titles":7488,"content":3155,"level":155},"/v0.0.18/guides/aggregates#simple-having",[1668,3148],{"id":7490,"title":3158,"titles":7491,"content":3160,"level":155},"/v0.0.18/guides/aggregates#aggregate-having",[1668,3148],{"id":7493,"title":3163,"titles":7494,"content":3165,"level":155},"/v0.0.18/guides/aggregates#having-helpers",[1668,3148],{"id":7496,"title":3168,"titles":7497,"content":3170,"level":136},"/v0.0.18/guides/aggregates#filter-clause",[1668],{"id":7499,"title":3173,"titles":7500,"content":3175,"level":136},"/v0.0.18/guides/aggregates#window-functions",[1668],{"id":7502,"title":3178,"titles":7503,"content":3180,"level":155},"/v0.0.18/guides/aggregates#basic-window-functions",[1668,3173],{"id":7505,"title":3183,"titles":7506,"content":3185,"level":155},"/v0.0.18/guides/aggregates#window-function-types",[1668,3173],{"id":7508,"title":3188,"titles":7509,"content":3190,"level":155},"/v0.0.18/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":7511,"title":3193,"titles":7512,"content":3195,"level":155},"/v0.0.18/guides/aggregates#window-specification",[1668,3173],{"id":7514,"title":3198,"titles":7515,"content":3200,"level":155},"/v0.0.18/guides/aggregates#frame-bounds",[1668,3173],{"id":7517,"title":3203,"titles":7518,"content":99,"level":136},"/v0.0.18/guides/aggregates#math-functions",[1668],{"id":7520,"title":3207,"titles":7521,"content":3209,"level":155},"/v0.0.18/guides/aggregates#available-functions",[1668,3203],{"id":7523,"title":3212,"titles":7524,"content":3214,"level":155},"/v0.0.18/guides/aggregates#example",[1668,3203],{"id":7526,"title":1270,"titles":7527,"content":3218,"level":136},"/v0.0.18/guides/aggregates#case-expressions",[1668],{"id":7529,"title":3221,"titles":7530,"content":3223,"level":136},"/v0.0.18/guides/aggregates#type-casting",[1668],{"id":7532,"title":3226,"titles":7533,"content":3228,"level":136},"/v0.0.18/guides/aggregates#coalesce-and-nullif",[1668],{"id":7535,"title":1675,"titles":7536,"content":3232,"level":107},"/v0.0.18/guides/testing",[],{"id":7538,"title":1675,"titles":7539,"content":3236,"level":107},"/v0.0.18/guides/testing#testing",[],{"id":7541,"title":3239,"titles":7542,"content":99,"level":136},"/v0.0.18/guides/testing#testing-query-output",[1675],{"id":7544,"title":3243,"titles":7545,"content":6459,"level":155},"/v0.0.18/guides/testing#basic-output-testing",[1675,3239],{"id":7547,"title":3248,"titles":7548,"content":3250,"level":155},"/v0.0.18/guides/testing#test-instance-setup",[1675,3239],{"id":7550,"title":3253,"titles":7551,"content":99,"level":136},"/v0.0.18/guides/testing#table-driven-tests",[1675],{"id":7553,"title":3257,"titles":7554,"content":6469,"level":155},"/v0.0.18/guides/testing#testing-multiple-queries",[1675,3253],{"id":7556,"title":3262,"titles":7557,"content":99,"level":136},"/v0.0.18/guides/testing#testing-validation",[1675],{"id":7559,"title":3266,"titles":7560,"content":3268,"level":155},"/v0.0.18/guides/testing#testing-invalid-input",[1675,3262],{"id":7562,"title":3271,"titles":7563,"content":3273,"level":155},"/v0.0.18/guides/testing#testing-try-variants",[1675,3262],{"id":7565,"title":3276,"titles":7566,"content":99,"level":136},"/v0.0.18/guides/testing#testing-error-cases",[1675],{"id":7568,"title":3280,"titles":7569,"content":6485,"level":155},"/v0.0.18/guides/testing#builder-errors",[1675,3276],{"id":7571,"title":3285,"titles":7572,"content":99,"level":136},"/v0.0.18/guides/testing#testing-complex-queries",[1675],{"id":7574,"title":3289,"titles":7575,"content":6492,"level":155},"/v0.0.18/guides/testing#join-tests",[1675,3285],{"id":7577,"title":3294,"titles":7578,"content":6496,"level":155},"/v0.0.18/guides/testing#subquery-tests",[1675,3285],{"id":7580,"title":3299,"titles":7581,"content":3301,"level":136},"/v0.0.18/guides/testing#snapshot-testing",[1675],{"id":7583,"title":3304,"titles":7584,"content":99,"level":136},"/v0.0.18/guides/testing#best-practices",[1675],{"id":7586,"title":3308,"titles":7587,"content":3310,"level":155},"/v0.0.18/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":7589,"title":3313,"titles":7590,"content":3315,"level":155},"/v0.0.18/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":7592,"title":3318,"titles":7593,"content":3320,"level":155},"/v0.0.18/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":7595,"title":3323,"titles":7596,"content":6515,"level":155},"/v0.0.18/guides/testing#_4-test-edge-cases",[1675,3304],{"id":7598,"title":1688,"titles":7599,"content":3329,"level":107},"/v0.0.18/cookbook/pagination",[],{"id":7601,"title":1688,"titles":7602,"content":3333,"level":107},"/v0.0.18/cookbook/pagination#pagination",[],{"id":7604,"title":3336,"titles":7605,"content":6525,"level":136},"/v0.0.18/cookbook/pagination#offset-pagination",[1688],{"id":7607,"title":3341,"titles":7608,"content":3343,"level":155},"/v0.0.18/cookbook/pagination#usage",[1688,3336],{"id":7610,"title":3346,"titles":7611,"content":6532,"level":155},"/v0.0.18/cookbook/pagination#with-total-count",[1688,3336],{"id":7613,"title":3351,"titles":7614,"content":3353,"level":155},"/v0.0.18/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":7616,"title":3356,"titles":7617,"content":6539,"level":136},"/v0.0.18/cookbook/pagination#cursor-pagination",[1688],{"id":7619,"title":3341,"titles":7620,"content":3362,"level":155},"/v0.0.18/cookbook/pagination#usage-1",[1688,3356],{"id":7622,"title":3365,"titles":7623,"content":6546,"level":155},"/v0.0.18/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":7625,"title":3370,"titles":7626,"content":6550,"level":155},"/v0.0.18/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":7628,"title":3375,"titles":7629,"content":6554,"level":136},"/v0.0.18/cookbook/pagination#filtering-with-pagination",[1688],{"id":7631,"title":3380,"titles":7632,"content":6558,"level":136},"/v0.0.18/cookbook/pagination#pagination-with-joins",[1688],{"id":7634,"title":3304,"titles":7635,"content":99,"level":136},"/v0.0.18/cookbook/pagination#best-practices",[1688],{"id":7637,"title":3388,"titles":7638,"content":6565,"level":155},"/v0.0.18/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":7640,"title":3393,"titles":7641,"content":3395,"level":155},"/v0.0.18/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":7643,"title":3398,"titles":7644,"content":3400,"level":155},"/v0.0.18/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":7646,"title":3403,"titles":7647,"content":3405,"level":155},"/v0.0.18/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":7649,"title":1695,"titles":7650,"content":3409,"level":107},"/v0.0.18/cookbook/vector-search",[],{"id":7652,"title":1695,"titles":7653,"content":3413,"level":107},"/v0.0.18/cookbook/vector-search#vector-search",[],{"id":7655,"title":3416,"titles":7656,"content":3418,"level":136},"/v0.0.18/cookbook/vector-search#schema-setup",[1695],{"id":7658,"title":3421,"titles":7659,"content":3423,"level":136},"/v0.0.18/cookbook/vector-search#distance-operators",[1695],{"id":7661,"title":3426,"titles":7662,"content":3428,"level":136},"/v0.0.18/cookbook/vector-search#basic-similarity-search",[1695],{"id":7664,"title":3431,"titles":7665,"content":3433,"level":155},"/v0.0.18/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":7667,"title":3436,"titles":7668,"content":3438,"level":136},"/v0.0.18/cookbook/vector-search#cosine-similarity",[1695],{"id":7670,"title":3441,"titles":7671,"content":3443,"level":136},"/v0.0.18/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":7673,"title":3446,"titles":7674,"content":3448,"level":136},"/v0.0.18/cookbook/vector-search#filtered-vector-search",[1695],{"id":7676,"title":3451,"titles":7677,"content":3453,"level":136},"/v0.0.18/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":7679,"title":3456,"titles":7680,"content":3458,"level":136},"/v0.0.18/cookbook/vector-search#hybrid-search",[1695],{"id":7682,"title":3461,"titles":7683,"content":3463,"level":136},"/v0.0.18/cookbook/vector-search#multi-vector-search",[1695],{"id":7685,"title":3466,"titles":7686,"content":3468,"level":136},"/v0.0.18/cookbook/vector-search#indexing-recommendations",[1695],{"id":7688,"title":3304,"titles":7689,"content":99,"level":136},"/v0.0.18/cookbook/vector-search#best-practices",[1695],{"id":7691,"title":3474,"titles":7692,"content":3476,"level":155},"/v0.0.18/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":7694,"title":3479,"titles":7695,"content":3481,"level":155},"/v0.0.18/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":7697,"title":3484,"titles":7698,"content":3486,"level":155},"/v0.0.18/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":7700,"title":1702,"titles":7701,"content":3490,"level":107},"/v0.0.18/cookbook/upserts",[],{"id":7703,"title":1702,"titles":7704,"content":3494,"level":107},"/v0.0.18/cookbook/upserts#upserts",[],{"id":7706,"title":3497,"titles":7707,"content":6635,"level":136},"/v0.0.18/cookbook/upserts#basic-upsert",[1702],{"id":7709,"title":3502,"titles":7710,"content":6639,"level":136},"/v0.0.18/cookbook/upserts#do-nothing",[1702],{"id":7712,"title":3507,"titles":7713,"content":6643,"level":136},"/v0.0.18/cookbook/upserts#multi-column-conflict",[1702],{"id":7715,"title":3512,"titles":7716,"content":6647,"level":136},"/v0.0.18/cookbook/upserts#returning-with-upsert",[1702],{"id":7718,"title":3517,"titles":7719,"content":6651,"level":136},"/v0.0.18/cookbook/upserts#batch-upsert",[1702],{"id":7721,"title":3522,"titles":7722,"content":6655,"level":136},"/v0.0.18/cookbook/upserts#conditional-upsert",[1702],{"id":7724,"title":3527,"titles":7725,"content":6659,"level":136},"/v0.0.18/cookbook/upserts#sync-pattern",[1702],{"id":7727,"title":3532,"titles":7728,"content":6663,"level":136},"/v0.0.18/cookbook/upserts#upsert-with-timestamps",[1702],{"id":7730,"title":3304,"titles":7731,"content":99,"level":136},"/v0.0.18/cookbook/upserts#best-practices",[1702],{"id":7733,"title":3540,"titles":7734,"content":3542,"level":155},"/v0.0.18/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":7736,"title":3545,"titles":7737,"content":3547,"level":155},"/v0.0.18/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":7739,"title":3550,"titles":7740,"content":3552,"level":155},"/v0.0.18/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":7742,"title":3555,"titles":7743,"content":3557,"level":155},"/v0.0.18/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":7745,"title":1709,"titles":7746,"content":6682,"level":107},"/v0.0.18/cookbook/orm-foundation",[],{"id":7748,"title":1709,"titles":7749,"content":6686,"level":107},"/v0.0.18/cookbook/orm-foundation#orm-foundation",[],{"id":7751,"title":6689,"titles":7752,"content":6691,"level":136},"/v0.0.18/cookbook/orm-foundation#the-result",[1709],{"id":7754,"title":6694,"titles":7755,"content":6696,"level":136},"/v0.0.18/cookbook/orm-foundation#the-architecture",[1709],{"id":7757,"title":6699,"titles":7758,"content":6701,"level":136},"/v0.0.18/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":7760,"title":6704,"titles":7761,"content":6706,"level":155},"/v0.0.18/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":7763,"title":6709,"titles":7764,"content":6711,"level":155},"/v0.0.18/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":7766,"title":6714,"titles":7767,"content":6716,"level":155},"/v0.0.18/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":7769,"title":6719,"titles":7770,"content":6721,"level":155},"/v0.0.18/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":7772,"title":6724,"titles":7773,"content":6726,"level":136},"/v0.0.18/cookbook/orm-foundation#the-security-model",[1709],{"id":7775,"title":6729,"titles":7776,"content":6731,"level":136},"/v0.0.18/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":7778,"title":6734,"titles":7779,"content":6736,"level":136},"/v0.0.18/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":7781,"title":6739,"titles":7782,"content":6741,"level":155},"/v0.0.18/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":7784,"title":6744,"titles":7785,"content":6746,"level":155},"/v0.0.18/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":7787,"title":6749,"titles":7788,"content":6751,"level":155},"/v0.0.18/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":7790,"title":6754,"titles":7791,"content":6756,"level":155},"/v0.0.18/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":7793,"title":6759,"titles":7794,"content":6761,"level":136},"/v0.0.18/cookbook/orm-foundation#see-also",[1709],{"id":7796,"title":3560,"titles":7797,"content":3562,"level":107},"/v0.0.18/reference/api",[],{"id":7799,"title":3560,"titles":7800,"content":3566,"level":107},"/v0.0.18/reference/api#api-reference",[],{"id":7802,"title":3569,"titles":7803,"content":99,"level":136},"/v0.0.18/reference/api#instance-creation",[3560],{"id":7805,"title":856,"titles":7806,"content":3574,"level":155},"/v0.0.18/reference/api#newfromdbml",[3560,3569],{"id":7808,"title":3577,"titles":7809,"content":99,"level":136},"/v0.0.18/reference/api#instance-methods",[3560],{"id":7811,"title":119,"titles":7812,"content":3582,"level":155},"/v0.0.18/reference/api#t",[3560,3577],{"id":7814,"title":3585,"titles":7815,"content":3587,"level":155},"/v0.0.18/reference/api#tryt",[3560,3577],{"id":7817,"title":169,"titles":7818,"content":3591,"level":155},"/v0.0.18/reference/api#f",[3560,3577],{"id":7820,"title":3594,"titles":7821,"content":3596,"level":155},"/v0.0.18/reference/api#tryf",[3560,3577],{"id":7823,"title":316,"titles":7824,"content":3600,"level":155},"/v0.0.18/reference/api#p",[3560,3577],{"id":7826,"title":3603,"titles":7827,"content":3605,"level":155},"/v0.0.18/reference/api#tryp",[3560,3577],{"id":7829,"title":284,"titles":7830,"content":3609,"level":155},"/v0.0.18/reference/api#c",[3560,3577],{"id":7832,"title":3612,"titles":7833,"content":3614,"level":155},"/v0.0.18/reference/api#tryc",[3560,3577],{"id":7835,"title":3617,"titles":7836,"content":3619,"level":155},"/v0.0.18/reference/api#and",[3560,3577],{"id":7838,"title":3622,"titles":7839,"content":3624,"level":155},"/v0.0.18/reference/api#or",[3560,3577],{"id":7841,"title":3627,"titles":7842,"content":3629,"level":155},"/v0.0.18/reference/api#null",[3560,3577],{"id":7844,"title":3632,"titles":7845,"content":3634,"level":155},"/v0.0.18/reference/api#notnull",[3560,3577],{"id":7847,"title":3637,"titles":7848,"content":3639,"level":155},"/v0.0.18/reference/api#withtable",[3560,3577],{"id":7850,"title":3642,"titles":7851,"content":3644,"level":155},"/v0.0.18/reference/api#trywithtable",[3560,3577],{"id":7853,"title":3647,"titles":7854,"content":3649,"level":155},"/v0.0.18/reference/api#aggc",[3560,3577],{"id":7856,"title":3652,"titles":7857,"content":3654,"level":155},"/v0.0.18/reference/api#tryaggc",[3560,3577],{"id":7859,"title":3657,"titles":7860,"content":3659,"level":155},"/v0.0.18/reference/api#valuemap",[3560,3577],{"id":7862,"title":3662,"titles":7863,"content":99,"level":136},"/v0.0.18/reference/api#query-builders",[3560],{"id":7865,"title":219,"titles":7866,"content":3667,"level":155},"/v0.0.18/reference/api#select",[3560,3662],{"id":7868,"title":3670,"titles":7869,"content":3672,"level":155},"/v0.0.18/reference/api#insert",[3560,3662],{"id":7871,"title":3675,"titles":7872,"content":3677,"level":155},"/v0.0.18/reference/api#update",[3560,3662],{"id":7874,"title":3680,"titles":7875,"content":3682,"level":155},"/v0.0.18/reference/api#delete",[3560,3662],{"id":7877,"title":3685,"titles":7878,"content":3687,"level":155},"/v0.0.18/reference/api#count",[3560,3662],{"id":7880,"title":3690,"titles":7881,"content":99,"level":136},"/v0.0.18/reference/api#builder-methods",[3560],{"id":7883,"title":2665,"titles":7884,"content":3695,"level":155},"/v0.0.18/reference/api#fields",[3560,3690],{"id":7886,"title":3698,"titles":7887,"content":3700,"level":155},"/v0.0.18/reference/api#where",[3560,3690],{"id":7889,"title":3703,"titles":7890,"content":3705,"level":155},"/v0.0.18/reference/api#wherefield",[3560,3690],{"id":7892,"title":3708,"titles":7893,"content":3710,"level":155},"/v0.0.18/reference/api#orderby",[3560,3690],{"id":7895,"title":3713,"titles":7896,"content":3715,"level":155},"/v0.0.18/reference/api#orderbynulls",[3560,3690],{"id":7898,"title":3718,"titles":7899,"content":3720,"level":155},"/v0.0.18/reference/api#orderbyexpr",[3560,3690],{"id":7901,"title":3723,"titles":7902,"content":5734,"level":155},"/v0.0.18/reference/api#limit",[3560,3690],{"id":7904,"title":5737,"titles":7905,"content":5739,"level":155},"/v0.0.18/reference/api#limitparam",[3560,3690],{"id":7907,"title":3728,"titles":7908,"content":5743,"level":155},"/v0.0.18/reference/api#offset",[3560,3690],{"id":7910,"title":5746,"titles":7911,"content":5748,"level":155},"/v0.0.18/reference/api#offsetparam",[3560,3690],{"id":7913,"title":3733,"titles":7914,"content":3735,"level":155},"/v0.0.18/reference/api#set",[3560,3690],{"id":7916,"title":3738,"titles":7917,"content":3740,"level":155},"/v0.0.18/reference/api#values",[3560,3690],{"id":7919,"title":3743,"titles":7920,"content":3745,"level":155},"/v0.0.18/reference/api#returning",[3560,3690],{"id":7922,"title":3748,"titles":7923,"content":3750,"level":155},"/v0.0.18/reference/api#distinct",[3560,3690],{"id":7925,"title":3753,"titles":7926,"content":3755,"level":155},"/v0.0.18/reference/api#distincton",[3560,3690],{"id":7928,"title":3758,"titles":7929,"content":3760,"level":155},"/v0.0.18/reference/api#groupby",[3560,3690],{"id":7931,"title":3763,"titles":7932,"content":3765,"level":155},"/v0.0.18/reference/api#having",[3560,3690],{"id":7934,"title":3768,"titles":7935,"content":3770,"level":155},"/v0.0.18/reference/api#havingagg",[3560,3690],{"id":7937,"title":3773,"titles":7938,"content":3775,"level":155},"/v0.0.18/reference/api#selectexpr",[3560,3690],{"id":7940,"title":3778,"titles":7941,"content":3780,"level":155},"/v0.0.18/reference/api#onconflict",[3560,3690],{"id":7943,"title":3783,"titles":7944,"content":3785,"level":155},"/v0.0.18/reference/api#join-methods",[3560,3690],{"id":7946,"title":3788,"titles":7947,"content":3790,"level":155},"/v0.0.18/reference/api#row-locking",[3560,3690],{"id":7949,"title":3793,"titles":7950,"content":3795,"level":155},"/v0.0.18/reference/api#build",[3560,3690],{"id":7952,"title":3798,"titles":7953,"content":3800,"level":155},"/v0.0.18/reference/api#mustbuild",[3560,3690],{"id":7955,"title":350,"titles":7956,"content":6924,"level":155},"/v0.0.18/reference/api#render",[3560,3690],{"id":7958,"title":3807,"titles":7959,"content":6928,"level":155},"/v0.0.18/reference/api#mustrender",[3560,3690],{"id":7961,"title":3812,"titles":7962,"content":99,"level":136},"/v0.0.18/reference/api#set-operations",[3560],{"id":7964,"title":3816,"titles":7965,"content":3818,"level":155},"/v0.0.18/reference/api#union-unionall",[3560,3812],{"id":7967,"title":3821,"titles":7968,"content":3823,"level":155},"/v0.0.18/reference/api#intersect-intersectall",[3560,3812],{"id":7970,"title":3826,"titles":7971,"content":3828,"level":155},"/v0.0.18/reference/api#except-exceptall",[3560,3812],{"id":7973,"title":3831,"titles":7974,"content":6944,"level":136},"/v0.0.18/reference/api#rendering",[3560],{"id":7976,"title":3844,"titles":7977,"content":99,"level":136},"/v0.0.18/reference/api#expression-functions",[3560],{"id":7979,"title":1668,"titles":7980,"content":3849,"level":155},"/v0.0.18/reference/api#aggregates",[3560,3844],{"id":7982,"title":3852,"titles":7983,"content":3854,"level":155},"/v0.0.18/reference/api#filter-aggregates",[3560,3844],{"id":7985,"title":1251,"titles":7986,"content":3858,"level":155},"/v0.0.18/reference/api#conditions",[3560,3844],{"id":7988,"title":3006,"titles":7989,"content":3862,"level":155},"/v0.0.18/reference/api#subqueries",[3560,3844],{"id":7991,"title":3865,"titles":7992,"content":3867,"level":155},"/v0.0.18/reference/api#case-expression",[3560,3844],{"id":7994,"title":3870,"titles":7995,"content":3872,"level":155},"/v0.0.18/reference/api#null-handling",[3560,3844],{"id":7997,"title":3203,"titles":7998,"content":3876,"level":155},"/v0.0.18/reference/api#math-functions",[3560,3844],{"id":8000,"title":5855,"titles":8001,"content":5857,"level":155},"/v0.0.18/reference/api#string-functions",[3560,3844],{"id":8003,"title":5860,"titles":8004,"content":5862,"level":155},"/v0.0.18/reference/api#date-functions",[3560,3844],{"id":8006,"title":3221,"titles":8007,"content":3880,"level":155},"/v0.0.18/reference/api#type-casting",[3560,3844],{"id":8009,"title":3173,"titles":8010,"content":3884,"level":155},"/v0.0.18/reference/api#window-functions",[3560,3844],{"id":8012,"title":3193,"titles":8013,"content":3888,"level":155},"/v0.0.18/reference/api#window-specification",[3560,3844],{"id":8015,"title":3891,"titles":8016,"content":3893,"level":155},"/v0.0.18/reference/api#windowbuilder-methods",[3560,3844],{"id":8018,"title":3896,"titles":8019,"content":3898,"level":155},"/v0.0.18/reference/api#expression-alias",[3560,3844],{"id":8021,"title":3163,"titles":8022,"content":3902,"level":155},"/v0.0.18/reference/api#having-helpers",[3560,3844],{"id":8024,"title":3905,"titles":8025,"content":99,"level":136},"/v0.0.18/reference/api#types",[3560],{"id":8027,"title":3909,"titles":8028,"content":3911,"level":155},"/v0.0.18/reference/api#queryresult",[3560,3905],{"id":8030,"title":3914,"titles":8031,"content":3916,"level":155},"/v0.0.18/reference/api#direction",[3560,3905],{"id":8033,"title":3919,"titles":8034,"content":3921,"level":155},"/v0.0.18/reference/api#nullsordering",[3560,3905],{"id":8036,"title":3924,"titles":8037,"content":5896,"level":155},"/v0.0.18/reference/api#operation",[3560,3905],{"id":8039,"title":5899,"titles":8040,"content":99,"level":136},"/v0.0.18/reference/api#providers",[3560],{"id":8042,"title":5903,"titles":8043,"content":5905,"level":155},"/v0.0.18/reference/api#renderer-interface",[3560,5899],{"id":8045,"title":5908,"titles":8046,"content":7017,"level":155},"/v0.0.18/reference/api#postgresql-provider",[3560,5899],{"id":8048,"title":5913,"titles":8049,"content":7021,"level":155},"/v0.0.18/reference/api#sqlite-provider",[3560,5899],{"id":8051,"title":5918,"titles":8052,"content":7025,"level":155},"/v0.0.18/reference/api#mysql-provider",[3560,5899],{"id":8054,"title":5923,"titles":8055,"content":7029,"level":155},"/v0.0.18/reference/api#sql-server-provider",[3560,5899],{"id":8057,"title":3929,"titles":8058,"content":3931,"level":107},"/v0.0.18/reference/operators",[],{"id":8060,"title":3929,"titles":8061,"content":3935,"level":107},"/v0.0.18/reference/operators#operators-reference",[],{"id":8063,"title":2959,"titles":8064,"content":3939,"level":136},"/v0.0.18/reference/operators#comparison-operators",[3929],{"id":8066,"title":3341,"titles":8067,"content":3943,"level":155},"/v0.0.18/reference/operators#usage",[3929,2959],{"id":8069,"title":2964,"titles":8070,"content":3947,"level":136},"/v0.0.18/reference/operators#pattern-matching",[3929],{"id":8072,"title":3341,"titles":8073,"content":3951,"level":155},"/v0.0.18/reference/operators#usage-1",[3929,2964],{"id":8075,"title":3954,"titles":8076,"content":3956,"level":136},"/v0.0.18/reference/operators#null-operators",[3929],{"id":8078,"title":3341,"titles":8079,"content":3960,"level":155},"/v0.0.18/reference/operators#usage-2",[3929,3954],{"id":8081,"title":2974,"titles":8082,"content":3964,"level":136},"/v0.0.18/reference/operators#array-operators",[3929],{"id":8084,"title":3341,"titles":8085,"content":3968,"level":155},"/v0.0.18/reference/operators#usage-3",[3929,2974],{"id":8087,"title":3971,"titles":8088,"content":3973,"level":155},"/v0.0.18/reference/operators#with-sqlx",[3929,2974],{"id":8090,"title":3976,"titles":8091,"content":3978,"level":136},"/v0.0.18/reference/operators#subquery-operators",[3929],{"id":8093,"title":3341,"titles":8094,"content":3982,"level":155},"/v0.0.18/reference/operators#usage-4",[3929,3976],{"id":8096,"title":3985,"titles":8097,"content":3987,"level":136},"/v0.0.18/reference/operators#regex-operators",[3929],{"id":8099,"title":3341,"titles":8100,"content":3991,"level":155},"/v0.0.18/reference/operators#usage-5",[3929,3985],{"id":8102,"title":3994,"titles":8103,"content":3996,"level":136},"/v0.0.18/reference/operators#postgresql-array-operators",[3929],{"id":8105,"title":3341,"titles":8106,"content":4000,"level":155},"/v0.0.18/reference/operators#usage-6",[3929,3994],{"id":8108,"title":4003,"titles":8109,"content":4005,"level":136},"/v0.0.18/reference/operators#vector-operators-pgvector",[3929],{"id":8111,"title":3341,"titles":8112,"content":4009,"level":155},"/v0.0.18/reference/operators#usage-7",[3929,4003],{"id":8114,"title":4012,"titles":8115,"content":4014,"level":155},"/v0.0.18/reference/operators#with-pgvector",[3929,4003],{"id":8117,"title":4017,"titles":8118,"content":4019,"level":136},"/v0.0.18/reference/operators#operator-selection-guide",[3929],{"id":8120,"title":3124,"titles":8121,"content":4023,"level":136},"/v0.0.18/reference/operators#aggregate-functions",[3929],{"id":8123,"title":3173,"titles":8124,"content":4027,"level":136},"/v0.0.18/reference/operators#window-functions",[3929],{"id":8126,"title":3198,"titles":8127,"content":4031,"level":136},"/v0.0.18/reference/operators#frame-bounds",[3929],{"id":8129,"title":4034,"titles":8130,"content":4036,"level":136},"/v0.0.18/reference/operators#cast-types",[3929],{"id":8132,"title":1614,"titles":8133,"content":2581,"level":107},"/v0.0.19/overview",[],{"id":8135,"title":1614,"titles":8136,"content":6007,"level":107},"/v0.0.19/overview#overview",[],{"id":8138,"title":1237,"titles":8139,"content":2589,"level":136},"/v0.0.19/overview#architecture",[1614],{"id":8141,"title":2592,"titles":8142,"content":2594,"level":136},"/v0.0.19/overview#philosophy",[1614],{"id":8144,"title":1187,"titles":8145,"content":2598,"level":136},"/v0.0.19/overview#capabilities",[1614],{"id":8147,"title":2601,"titles":8148,"content":99,"level":136},"/v0.0.19/overview#priorities",[1614],{"id":8150,"title":1782,"titles":8151,"content":2606,"level":155},"/v0.0.19/overview#security",[1614,2601],{"id":8153,"title":2609,"titles":8154,"content":6026,"level":155},"/v0.0.19/overview#ergonomics",[1614,2601],{"id":8156,"title":5002,"titles":8157,"content":6030,"level":155},"/v0.0.19/overview#multi-provider-architecture",[1614,2601],{"id":8159,"title":1628,"titles":8160,"content":2620,"level":107},"/v0.0.19/learn/quickstart",[],{"id":8162,"title":1628,"titles":8163,"content":99,"level":107},"/v0.0.19/learn/quickstart#quickstart",[],{"id":8165,"title":2626,"titles":8166,"content":6040,"level":136},"/v0.0.19/learn/quickstart#requirements",[1628],{"id":8168,"title":2631,"titles":8169,"content":2633,"level":136},"/v0.0.19/learn/quickstart#installation",[1628],{"id":8171,"title":2636,"titles":8172,"content":6047,"level":136},"/v0.0.19/learn/quickstart#basic-usage",[1628],{"id":8174,"title":2641,"titles":8175,"content":6051,"level":136},"/v0.0.19/learn/quickstart#whats-happening",[1628],{"id":8177,"title":2646,"titles":8178,"content":6055,"level":136},"/v0.0.19/learn/quickstart#using-with-sqlx",[1628],{"id":8180,"title":2651,"titles":8181,"content":2653,"level":107},"/v0.0.19/learn/concepts",[],{"id":8183,"title":2651,"titles":8184,"content":2657,"level":107},"/v0.0.19/learn/concepts#core-concepts",[],{"id":8186,"title":2660,"titles":8187,"content":2662,"level":136},"/v0.0.19/learn/concepts#tables",[2651],{"id":8189,"title":2665,"titles":8190,"content":2667,"level":136},"/v0.0.19/learn/concepts#fields",[2651],{"id":8192,"title":2670,"titles":8193,"content":2672,"level":155},"/v0.0.19/learn/concepts#field-validation",[2651,2665],{"id":8195,"title":2675,"titles":8196,"content":2677,"level":136},"/v0.0.19/learn/concepts#params",[2651],{"id":8198,"title":2680,"titles":8199,"content":2682,"level":155},"/v0.0.19/learn/concepts#parameter-validation",[2651,2675],{"id":8201,"title":1251,"titles":8202,"content":2686,"level":136},"/v0.0.19/learn/concepts#conditions",[2651],{"id":8204,"title":1727,"titles":8205,"content":2690,"level":155},"/v0.0.19/learn/concepts#operators",[2651,1251],{"id":8207,"title":2693,"titles":8208,"content":2695,"level":155},"/v0.0.19/learn/concepts#combining-conditions",[2651,1251],{"id":8210,"title":2698,"titles":8211,"content":2700,"level":155},"/v0.0.19/learn/concepts#nested-conditions",[2651,1251],{"id":8213,"title":2703,"titles":8214,"content":2705,"level":155},"/v0.0.19/learn/concepts#null-conditions",[2651,1251],{"id":8216,"title":2708,"titles":8217,"content":2710,"level":155},"/v0.0.19/learn/concepts#field-comparisons",[2651,1251],{"id":8219,"title":2713,"titles":8220,"content":2715,"level":136},"/v0.0.19/learn/concepts#builders",[2651],{"id":8222,"title":2718,"titles":8223,"content":6101,"level":155},"/v0.0.19/learn/concepts#fluent-api",[2651,2713],{"id":8225,"title":2723,"titles":8226,"content":6105,"level":155},"/v0.0.19/learn/concepts#build-vs-render",[2651,2713],{"id":8228,"title":2728,"titles":8229,"content":6109,"level":155},"/v0.0.19/learn/concepts#must-variants",[2651,2713],{"id":8231,"title":2733,"titles":8232,"content":2735,"level":136},"/v0.0.19/learn/concepts#try-variants",[2651],{"id":8234,"title":2738,"titles":8235,"content":2740,"level":136},"/v0.0.19/learn/concepts#query-result",[2651],{"id":8237,"title":1237,"titles":8238,"content":2744,"level":107},"/v0.0.19/learn/architecture",[],{"id":8240,"title":1237,"titles":8241,"content":2748,"level":107},"/v0.0.19/learn/architecture#architecture",[],{"id":8243,"title":2751,"titles":8244,"content":2753,"level":136},"/v0.0.19/learn/architecture#pipeline-overview",[1237],{"id":8246,"title":2756,"titles":8247,"content":99,"level":136},"/v0.0.19/learn/architecture#validation-layer",[1237],{"id":8249,"title":1215,"titles":8250,"content":2761,"level":155},"/v0.0.19/learn/architecture#schema-validation",[1237,2756],{"id":8252,"title":2764,"titles":8253,"content":2766,"level":155},"/v0.0.19/learn/architecture#identifier-validation",[1237,2756],{"id":8255,"title":2769,"titles":8256,"content":2771,"level":155},"/v0.0.19/learn/architecture#alias-restrictions",[1237,2756],{"id":8258,"title":2774,"titles":8259,"content":5107,"level":136},"/v0.0.19/learn/architecture#ast-structure",[1237],{"id":8261,"title":2779,"titles":8262,"content":2781,"level":155},"/v0.0.19/learn/architecture#internal-types",[1237,2774],{"id":8264,"title":2784,"titles":8265,"content":2786,"level":155},"/v0.0.19/learn/architecture#condition-types",[1237,2774],{"id":8267,"title":2789,"titles":8268,"content":2791,"level":136},"/v0.0.19/learn/architecture#render-engine",[1237],{"id":8270,"title":2794,"titles":8271,"content":2796,"level":155},"/v0.0.19/learn/architecture#identifier-quoting",[1237,2789],{"id":8273,"title":2799,"titles":8274,"content":2801,"level":155},"/v0.0.19/learn/architecture#parameter-placeholders",[1237,2789],{"id":8276,"title":2804,"titles":8277,"content":2806,"level":155},"/v0.0.19/learn/architecture#parameter-namespacing",[1237,2789],{"id":8279,"title":5128,"titles":8280,"content":5130,"level":136},"/v0.0.19/learn/architecture#provider-architecture",[1237],{"id":8282,"title":5133,"titles":8283,"content":6164,"level":155},"/v0.0.19/learn/architecture#available-providers",[1237,5128],{"id":8285,"title":3341,"titles":8286,"content":6168,"level":155},"/v0.0.19/learn/architecture#usage",[1237,5128],{"id":8288,"title":5142,"titles":8289,"content":5144,"level":155},"/v0.0.19/learn/architecture#dialect-differences",[1237,5128],{"id":8291,"title":2809,"titles":8292,"content":6175,"level":136},"/v0.0.19/learn/architecture#file-structure",[1237],{"id":8294,"title":2814,"titles":8295,"content":2816,"level":136},"/v0.0.19/learn/architecture#security-layers",[1237],{"id":8297,"title":2819,"titles":8298,"content":99,"level":136},"/v0.0.19/learn/architecture#extension-points",[1237],{"id":8300,"title":2823,"titles":8301,"content":2825,"level":155},"/v0.0.19/learn/architecture#custom-expressions",[1237,2819],{"id":8303,"title":2828,"titles":8304,"content":2830,"level":155},"/v0.0.19/learn/architecture#compound-queries",[1237,2819],{"id":8306,"title":2833,"titles":8307,"content":6191,"level":155},"/v0.0.19/learn/architecture#direct-ast-access",[1237,2819],{"id":8309,"title":1215,"titles":8310,"content":2839,"level":107},"/v0.0.19/guides/schema-validation",[],{"id":8312,"title":1215,"titles":8313,"content":2843,"level":107},"/v0.0.19/guides/schema-validation#schema-validation",[],{"id":8315,"title":2846,"titles":8316,"content":2848,"level":136},"/v0.0.19/guides/schema-validation#defining-a-schema",[1215],{"id":8318,"title":2851,"titles":8319,"content":2853,"level":136},"/v0.0.19/guides/schema-validation#creating-an-instance",[1215],{"id":8321,"title":2856,"titles":8322,"content":99,"level":136},"/v0.0.19/guides/schema-validation#validation-behavior",[1215],{"id":8324,"title":2860,"titles":8325,"content":2862,"level":155},"/v0.0.19/guides/schema-validation#table-validation",[1215,2856],{"id":8327,"title":2670,"titles":8328,"content":2866,"level":155},"/v0.0.19/guides/schema-validation#field-validation",[1215,2856],{"id":8330,"title":2680,"titles":8331,"content":2870,"level":155},"/v0.0.19/guides/schema-validation#parameter-validation",[1215,2856],{"id":8333,"title":2873,"titles":8334,"content":2875,"level":136},"/v0.0.19/guides/schema-validation#panic-vs-error",[1215],{"id":8336,"title":2733,"titles":8337,"content":2879,"level":155},"/v0.0.19/guides/schema-validation#try-variants",[1215,2873],{"id":8339,"title":2882,"titles":8340,"content":2884,"level":155},"/v0.0.19/guides/schema-validation#when-to-use-each",[1215,2873],{"id":8342,"title":2887,"titles":8343,"content":2889,"level":136},"/v0.0.19/guides/schema-validation#table-aliases",[1215],{"id":8345,"title":2769,"titles":8346,"content":2893,"level":155},"/v0.0.19/guides/schema-validation#alias-restrictions",[1215,2887],{"id":8348,"title":2896,"titles":8349,"content":2898,"level":155},"/v0.0.19/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":8351,"title":2901,"titles":8352,"content":99,"level":136},"/v0.0.19/guides/schema-validation#schema-organization",[1215],{"id":8354,"title":2905,"titles":8355,"content":6240,"level":155},"/v0.0.19/guides/schema-validation#single-schema-instance",[1215,2901],{"id":8357,"title":2910,"titles":8358,"content":2912,"level":155},"/v0.0.19/guides/schema-validation#multiple-schemas",[1215,2901],{"id":8360,"title":2915,"titles":8361,"content":99,"level":136},"/v0.0.19/guides/schema-validation#dynamic-queries",[1215],{"id":8363,"title":2919,"titles":8364,"content":6250,"level":155},"/v0.0.19/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":8366,"title":2924,"titles":8367,"content":2926,"level":155},"/v0.0.19/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":8369,"title":2929,"titles":8370,"content":99,"level":136},"/v0.0.19/guides/schema-validation#validation-errors",[1215],{"id":8372,"title":2933,"titles":8373,"content":2935,"level":155},"/v0.0.19/guides/schema-validation#error-types",[1215,2929],{"id":8375,"title":2938,"titles":8376,"content":6263,"level":155},"/v0.0.19/guides/schema-validation#handling-errors",[1215,2929],{"id":8378,"title":1251,"titles":8379,"content":2944,"level":107},"/v0.0.19/guides/conditions",[],{"id":8381,"title":1251,"titles":8382,"content":2948,"level":107},"/v0.0.19/guides/conditions#conditions",[],{"id":8384,"title":2951,"titles":8385,"content":2953,"level":136},"/v0.0.19/guides/conditions#basic-conditions",[1251],{"id":8387,"title":1727,"titles":8388,"content":99,"level":136},"/v0.0.19/guides/conditions#operators",[1251],{"id":8390,"title":2959,"titles":8391,"content":2961,"level":155},"/v0.0.19/guides/conditions#comparison-operators",[1251,1727],{"id":8393,"title":2964,"titles":8394,"content":2966,"level":155},"/v0.0.19/guides/conditions#pattern-matching",[1251,1727],{"id":8396,"title":2969,"titles":8397,"content":2971,"level":155},"/v0.0.19/guides/conditions#null-checks",[1251,1727],{"id":8399,"title":2974,"titles":8400,"content":2976,"level":155},"/v0.0.19/guides/conditions#array-operators",[1251,1727],{"id":8402,"title":2693,"titles":8403,"content":99,"level":136},"/v0.0.19/guides/conditions#combining-conditions",[1251],{"id":8405,"title":2982,"titles":8406,"content":2984,"level":155},"/v0.0.19/guides/conditions#and",[1251,2693],{"id":8408,"title":2987,"titles":8409,"content":2989,"level":155},"/v0.0.19/guides/conditions#or",[1251,2693],{"id":8411,"title":2992,"titles":8412,"content":2994,"level":155},"/v0.0.19/guides/conditions#nested-logic",[1251,2693],{"id":8414,"title":2997,"titles":8415,"content":2999,"level":136},"/v0.0.19/guides/conditions#between",[1251],{"id":8417,"title":2708,"titles":8418,"content":3003,"level":136},"/v0.0.19/guides/conditions#field-comparisons",[1251],{"id":8420,"title":3006,"titles":8421,"content":99,"level":136},"/v0.0.19/guides/conditions#subqueries",[1251],{"id":8423,"title":3010,"titles":8424,"content":3012,"level":155},"/v0.0.19/guides/conditions#in-subquery",[1251,3006],{"id":8426,"title":3015,"titles":8427,"content":3017,"level":155},"/v0.0.19/guides/conditions#not-in-subquery",[1251,3006],{"id":8429,"title":3020,"titles":8430,"content":3022,"level":155},"/v0.0.19/guides/conditions#exists",[1251,3006],{"id":8432,"title":3025,"titles":8433,"content":3027,"level":155},"/v0.0.19/guides/conditions#not-exists",[1251,3006],{"id":8435,"title":2804,"titles":8436,"content":3031,"level":155},"/v0.0.19/guides/conditions#parameter-namespacing",[1251,3006],{"id":8438,"title":3034,"titles":8439,"content":3036,"level":136},"/v0.0.19/guides/conditions#multiple-where-clauses",[1251],{"id":8441,"title":3039,"titles":8442,"content":3041,"level":136},"/v0.0.19/guides/conditions#wherefield-shorthand",[1251],{"id":8444,"title":3044,"titles":8445,"content":3046,"level":136},"/v0.0.19/guides/conditions#building-conditions-dynamically",[1251],{"id":8447,"title":1265,"titles":8448,"content":3050,"level":107},"/v0.0.19/guides/joins",[],{"id":8450,"title":1265,"titles":8451,"content":3054,"level":107},"/v0.0.19/guides/joins#joins",[],{"id":8453,"title":3057,"titles":8454,"content":3059,"level":136},"/v0.0.19/guides/joins#join-types",[1265],{"id":8456,"title":3062,"titles":8457,"content":3064,"level":136},"/v0.0.19/guides/joins#basic-join",[1265],{"id":8459,"title":2887,"titles":8460,"content":3068,"level":136},"/v0.0.19/guides/joins#table-aliases",[1265],{"id":8462,"title":3071,"titles":8463,"content":3073,"level":136},"/v0.0.19/guides/joins#left-join",[1265],{"id":8465,"title":3076,"titles":8466,"content":3078,"level":136},"/v0.0.19/guides/joins#right-join",[1265],{"id":8468,"title":3081,"titles":8469,"content":3083,"level":136},"/v0.0.19/guides/joins#full-outer-join",[1265],{"id":8471,"title":3086,"titles":8472,"content":3088,"level":136},"/v0.0.19/guides/joins#cross-join",[1265],{"id":8474,"title":3091,"titles":8475,"content":3093,"level":136},"/v0.0.19/guides/joins#multiple-joins",[1265],{"id":8477,"title":3096,"titles":8478,"content":3098,"level":136},"/v0.0.19/guides/joins#complex-on-conditions",[1265],{"id":8480,"title":3101,"titles":8481,"content":3103,"level":136},"/v0.0.19/guides/joins#self-joins",[1265],{"id":8483,"title":3106,"titles":8484,"content":3108,"level":136},"/v0.0.19/guides/joins#joins-with-count",[1265],{"id":8486,"title":3111,"titles":8487,"content":3113,"level":136},"/v0.0.19/guides/joins#join-validation",[1265],{"id":8489,"title":1668,"titles":8490,"content":3117,"level":107},"/v0.0.19/guides/aggregates",[],{"id":8492,"title":1668,"titles":8493,"content":3121,"level":107},"/v0.0.19/guides/aggregates#aggregates",[],{"id":8495,"title":3124,"titles":8496,"content":99,"level":136},"/v0.0.19/guides/aggregates#aggregate-functions",[1668],{"id":8498,"title":3128,"titles":8499,"content":3130,"level":155},"/v0.0.19/guides/aggregates#basic-aggregates",[1668,3124],{"id":8501,"title":3133,"titles":8502,"content":3135,"level":155},"/v0.0.19/guides/aggregates#using-aggregates",[1668,3124],{"id":8504,"title":3138,"titles":8505,"content":3140,"level":155},"/v0.0.19/guides/aggregates#aliases",[1668,3124],{"id":8507,"title":3143,"titles":8508,"content":3145,"level":136},"/v0.0.19/guides/aggregates#group-by",[1668],{"id":8510,"title":3148,"titles":8511,"content":3150,"level":136},"/v0.0.19/guides/aggregates#having",[1668],{"id":8513,"title":3153,"titles":8514,"content":3155,"level":155},"/v0.0.19/guides/aggregates#simple-having",[1668,3148],{"id":8516,"title":3158,"titles":8517,"content":3160,"level":155},"/v0.0.19/guides/aggregates#aggregate-having",[1668,3148],{"id":8519,"title":3163,"titles":8520,"content":3165,"level":155},"/v0.0.19/guides/aggregates#having-helpers",[1668,3148],{"id":8522,"title":3168,"titles":8523,"content":3170,"level":136},"/v0.0.19/guides/aggregates#filter-clause",[1668],{"id":8525,"title":3173,"titles":8526,"content":3175,"level":136},"/v0.0.19/guides/aggregates#window-functions",[1668],{"id":8528,"title":3178,"titles":8529,"content":3180,"level":155},"/v0.0.19/guides/aggregates#basic-window-functions",[1668,3173],{"id":8531,"title":3183,"titles":8532,"content":3185,"level":155},"/v0.0.19/guides/aggregates#window-function-types",[1668,3173],{"id":8534,"title":3188,"titles":8535,"content":3190,"level":155},"/v0.0.19/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":8537,"title":3193,"titles":8538,"content":3195,"level":155},"/v0.0.19/guides/aggregates#window-specification",[1668,3173],{"id":8540,"title":3198,"titles":8541,"content":3200,"level":155},"/v0.0.19/guides/aggregates#frame-bounds",[1668,3173],{"id":8543,"title":3203,"titles":8544,"content":99,"level":136},"/v0.0.19/guides/aggregates#math-functions",[1668],{"id":8546,"title":3207,"titles":8547,"content":3209,"level":155},"/v0.0.19/guides/aggregates#available-functions",[1668,3203],{"id":8549,"title":3212,"titles":8550,"content":3214,"level":155},"/v0.0.19/guides/aggregates#example",[1668,3203],{"id":8552,"title":1270,"titles":8553,"content":3218,"level":136},"/v0.0.19/guides/aggregates#case-expressions",[1668],{"id":8555,"title":3221,"titles":8556,"content":3223,"level":136},"/v0.0.19/guides/aggregates#type-casting",[1668],{"id":8558,"title":3226,"titles":8559,"content":3228,"level":136},"/v0.0.19/guides/aggregates#coalesce-and-nullif",[1668],{"id":8561,"title":1675,"titles":8562,"content":3232,"level":107},"/v0.0.19/guides/testing",[],{"id":8564,"title":1675,"titles":8565,"content":3236,"level":107},"/v0.0.19/guides/testing#testing",[],{"id":8567,"title":3239,"titles":8568,"content":99,"level":136},"/v0.0.19/guides/testing#testing-query-output",[1675],{"id":8570,"title":3243,"titles":8571,"content":6459,"level":155},"/v0.0.19/guides/testing#basic-output-testing",[1675,3239],{"id":8573,"title":3248,"titles":8574,"content":3250,"level":155},"/v0.0.19/guides/testing#test-instance-setup",[1675,3239],{"id":8576,"title":3253,"titles":8577,"content":99,"level":136},"/v0.0.19/guides/testing#table-driven-tests",[1675],{"id":8579,"title":3257,"titles":8580,"content":6469,"level":155},"/v0.0.19/guides/testing#testing-multiple-queries",[1675,3253],{"id":8582,"title":3262,"titles":8583,"content":99,"level":136},"/v0.0.19/guides/testing#testing-validation",[1675],{"id":8585,"title":3266,"titles":8586,"content":3268,"level":155},"/v0.0.19/guides/testing#testing-invalid-input",[1675,3262],{"id":8588,"title":3271,"titles":8589,"content":3273,"level":155},"/v0.0.19/guides/testing#testing-try-variants",[1675,3262],{"id":8591,"title":3276,"titles":8592,"content":99,"level":136},"/v0.0.19/guides/testing#testing-error-cases",[1675],{"id":8594,"title":3280,"titles":8595,"content":6485,"level":155},"/v0.0.19/guides/testing#builder-errors",[1675,3276],{"id":8597,"title":3285,"titles":8598,"content":99,"level":136},"/v0.0.19/guides/testing#testing-complex-queries",[1675],{"id":8600,"title":3289,"titles":8601,"content":6492,"level":155},"/v0.0.19/guides/testing#join-tests",[1675,3285],{"id":8603,"title":3294,"titles":8604,"content":6496,"level":155},"/v0.0.19/guides/testing#subquery-tests",[1675,3285],{"id":8606,"title":3299,"titles":8607,"content":3301,"level":136},"/v0.0.19/guides/testing#snapshot-testing",[1675],{"id":8609,"title":3304,"titles":8610,"content":99,"level":136},"/v0.0.19/guides/testing#best-practices",[1675],{"id":8612,"title":3308,"titles":8613,"content":3310,"level":155},"/v0.0.19/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":8615,"title":3313,"titles":8616,"content":3315,"level":155},"/v0.0.19/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":8618,"title":3318,"titles":8619,"content":3320,"level":155},"/v0.0.19/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":8621,"title":3323,"titles":8622,"content":6515,"level":155},"/v0.0.19/guides/testing#_4-test-edge-cases",[1675,3304],{"id":8624,"title":1688,"titles":8625,"content":3329,"level":107},"/v0.0.19/cookbook/pagination",[],{"id":8627,"title":1688,"titles":8628,"content":3333,"level":107},"/v0.0.19/cookbook/pagination#pagination",[],{"id":8630,"title":3336,"titles":8631,"content":6525,"level":136},"/v0.0.19/cookbook/pagination#offset-pagination",[1688],{"id":8633,"title":3341,"titles":8634,"content":3343,"level":155},"/v0.0.19/cookbook/pagination#usage",[1688,3336],{"id":8636,"title":3346,"titles":8637,"content":6532,"level":155},"/v0.0.19/cookbook/pagination#with-total-count",[1688,3336],{"id":8639,"title":3351,"titles":8640,"content":3353,"level":155},"/v0.0.19/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":8642,"title":3356,"titles":8643,"content":6539,"level":136},"/v0.0.19/cookbook/pagination#cursor-pagination",[1688],{"id":8645,"title":3341,"titles":8646,"content":3362,"level":155},"/v0.0.19/cookbook/pagination#usage-1",[1688,3356],{"id":8648,"title":3365,"titles":8649,"content":6546,"level":155},"/v0.0.19/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":8651,"title":3370,"titles":8652,"content":6550,"level":155},"/v0.0.19/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":8654,"title":3375,"titles":8655,"content":6554,"level":136},"/v0.0.19/cookbook/pagination#filtering-with-pagination",[1688],{"id":8657,"title":3380,"titles":8658,"content":6558,"level":136},"/v0.0.19/cookbook/pagination#pagination-with-joins",[1688],{"id":8660,"title":3304,"titles":8661,"content":99,"level":136},"/v0.0.19/cookbook/pagination#best-practices",[1688],{"id":8663,"title":3388,"titles":8664,"content":6565,"level":155},"/v0.0.19/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":8666,"title":3393,"titles":8667,"content":3395,"level":155},"/v0.0.19/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":8669,"title":3398,"titles":8670,"content":3400,"level":155},"/v0.0.19/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":8672,"title":3403,"titles":8673,"content":3405,"level":155},"/v0.0.19/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":8675,"title":1695,"titles":8676,"content":3409,"level":107},"/v0.0.19/cookbook/vector-search",[],{"id":8678,"title":1695,"titles":8679,"content":3413,"level":107},"/v0.0.19/cookbook/vector-search#vector-search",[],{"id":8681,"title":3416,"titles":8682,"content":3418,"level":136},"/v0.0.19/cookbook/vector-search#schema-setup",[1695],{"id":8684,"title":3421,"titles":8685,"content":3423,"level":136},"/v0.0.19/cookbook/vector-search#distance-operators",[1695],{"id":8687,"title":3426,"titles":8688,"content":3428,"level":136},"/v0.0.19/cookbook/vector-search#basic-similarity-search",[1695],{"id":8690,"title":3431,"titles":8691,"content":3433,"level":155},"/v0.0.19/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":8693,"title":3436,"titles":8694,"content":3438,"level":136},"/v0.0.19/cookbook/vector-search#cosine-similarity",[1695],{"id":8696,"title":3441,"titles":8697,"content":3443,"level":136},"/v0.0.19/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":8699,"title":3446,"titles":8700,"content":3448,"level":136},"/v0.0.19/cookbook/vector-search#filtered-vector-search",[1695],{"id":8702,"title":3451,"titles":8703,"content":3453,"level":136},"/v0.0.19/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":8705,"title":3456,"titles":8706,"content":3458,"level":136},"/v0.0.19/cookbook/vector-search#hybrid-search",[1695],{"id":8708,"title":3461,"titles":8709,"content":3463,"level":136},"/v0.0.19/cookbook/vector-search#multi-vector-search",[1695],{"id":8711,"title":3466,"titles":8712,"content":3468,"level":136},"/v0.0.19/cookbook/vector-search#indexing-recommendations",[1695],{"id":8714,"title":3304,"titles":8715,"content":99,"level":136},"/v0.0.19/cookbook/vector-search#best-practices",[1695],{"id":8717,"title":3474,"titles":8718,"content":3476,"level":155},"/v0.0.19/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":8720,"title":3479,"titles":8721,"content":3481,"level":155},"/v0.0.19/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":8723,"title":3484,"titles":8724,"content":3486,"level":155},"/v0.0.19/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":8726,"title":1702,"titles":8727,"content":3490,"level":107},"/v0.0.19/cookbook/upserts",[],{"id":8729,"title":1702,"titles":8730,"content":3494,"level":107},"/v0.0.19/cookbook/upserts#upserts",[],{"id":8732,"title":3497,"titles":8733,"content":6635,"level":136},"/v0.0.19/cookbook/upserts#basic-upsert",[1702],{"id":8735,"title":3502,"titles":8736,"content":6639,"level":136},"/v0.0.19/cookbook/upserts#do-nothing",[1702],{"id":8738,"title":3507,"titles":8739,"content":6643,"level":136},"/v0.0.19/cookbook/upserts#multi-column-conflict",[1702],{"id":8741,"title":3512,"titles":8742,"content":6647,"level":136},"/v0.0.19/cookbook/upserts#returning-with-upsert",[1702],{"id":8744,"title":3517,"titles":8745,"content":6651,"level":136},"/v0.0.19/cookbook/upserts#batch-upsert",[1702],{"id":8747,"title":3522,"titles":8748,"content":6655,"level":136},"/v0.0.19/cookbook/upserts#conditional-upsert",[1702],{"id":8750,"title":3527,"titles":8751,"content":6659,"level":136},"/v0.0.19/cookbook/upserts#sync-pattern",[1702],{"id":8753,"title":3532,"titles":8754,"content":6663,"level":136},"/v0.0.19/cookbook/upserts#upsert-with-timestamps",[1702],{"id":8756,"title":3304,"titles":8757,"content":99,"level":136},"/v0.0.19/cookbook/upserts#best-practices",[1702],{"id":8759,"title":3540,"titles":8760,"content":3542,"level":155},"/v0.0.19/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":8762,"title":3545,"titles":8763,"content":3547,"level":155},"/v0.0.19/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":8765,"title":3550,"titles":8766,"content":3552,"level":155},"/v0.0.19/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":8768,"title":3555,"titles":8769,"content":3557,"level":155},"/v0.0.19/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":8771,"title":1709,"titles":8772,"content":6682,"level":107},"/v0.0.19/cookbook/orm-foundation",[],{"id":8774,"title":1709,"titles":8775,"content":6686,"level":107},"/v0.0.19/cookbook/orm-foundation#orm-foundation",[],{"id":8777,"title":6689,"titles":8778,"content":6691,"level":136},"/v0.0.19/cookbook/orm-foundation#the-result",[1709],{"id":8780,"title":6694,"titles":8781,"content":6696,"level":136},"/v0.0.19/cookbook/orm-foundation#the-architecture",[1709],{"id":8783,"title":6699,"titles":8784,"content":6701,"level":136},"/v0.0.19/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":8786,"title":6704,"titles":8787,"content":6706,"level":155},"/v0.0.19/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":8789,"title":6709,"titles":8790,"content":6711,"level":155},"/v0.0.19/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":8792,"title":6714,"titles":8793,"content":6716,"level":155},"/v0.0.19/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":8795,"title":6719,"titles":8796,"content":6721,"level":155},"/v0.0.19/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":8798,"title":6724,"titles":8799,"content":6726,"level":136},"/v0.0.19/cookbook/orm-foundation#the-security-model",[1709],{"id":8801,"title":6729,"titles":8802,"content":6731,"level":136},"/v0.0.19/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":8804,"title":6734,"titles":8805,"content":6736,"level":136},"/v0.0.19/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":8807,"title":6739,"titles":8808,"content":6741,"level":155},"/v0.0.19/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":8810,"title":6744,"titles":8811,"content":6746,"level":155},"/v0.0.19/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":8813,"title":6749,"titles":8814,"content":6751,"level":155},"/v0.0.19/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":8816,"title":6754,"titles":8817,"content":6756,"level":155},"/v0.0.19/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":8819,"title":6759,"titles":8820,"content":6761,"level":136},"/v0.0.19/cookbook/orm-foundation#see-also",[1709],{"id":8822,"title":3560,"titles":8823,"content":3562,"level":107},"/v0.0.19/reference/api",[],{"id":8825,"title":3560,"titles":8826,"content":3566,"level":107},"/v0.0.19/reference/api#api-reference",[],{"id":8828,"title":3569,"titles":8829,"content":99,"level":136},"/v0.0.19/reference/api#instance-creation",[3560],{"id":8831,"title":856,"titles":8832,"content":3574,"level":155},"/v0.0.19/reference/api#newfromdbml",[3560,3569],{"id":8834,"title":3577,"titles":8835,"content":99,"level":136},"/v0.0.19/reference/api#instance-methods",[3560],{"id":8837,"title":119,"titles":8838,"content":3582,"level":155},"/v0.0.19/reference/api#t",[3560,3577],{"id":8840,"title":3585,"titles":8841,"content":3587,"level":155},"/v0.0.19/reference/api#tryt",[3560,3577],{"id":8843,"title":169,"titles":8844,"content":3591,"level":155},"/v0.0.19/reference/api#f",[3560,3577],{"id":8846,"title":3594,"titles":8847,"content":3596,"level":155},"/v0.0.19/reference/api#tryf",[3560,3577],{"id":8849,"title":316,"titles":8850,"content":3600,"level":155},"/v0.0.19/reference/api#p",[3560,3577],{"id":8852,"title":3603,"titles":8853,"content":3605,"level":155},"/v0.0.19/reference/api#tryp",[3560,3577],{"id":8855,"title":284,"titles":8856,"content":3609,"level":155},"/v0.0.19/reference/api#c",[3560,3577],{"id":8858,"title":3612,"titles":8859,"content":3614,"level":155},"/v0.0.19/reference/api#tryc",[3560,3577],{"id":8861,"title":3617,"titles":8862,"content":3619,"level":155},"/v0.0.19/reference/api#and",[3560,3577],{"id":8864,"title":3622,"titles":8865,"content":3624,"level":155},"/v0.0.19/reference/api#or",[3560,3577],{"id":8867,"title":3627,"titles":8868,"content":3629,"level":155},"/v0.0.19/reference/api#null",[3560,3577],{"id":8870,"title":3632,"titles":8871,"content":3634,"level":155},"/v0.0.19/reference/api#notnull",[3560,3577],{"id":8873,"title":3637,"titles":8874,"content":3639,"level":155},"/v0.0.19/reference/api#withtable",[3560,3577],{"id":8876,"title":3642,"titles":8877,"content":3644,"level":155},"/v0.0.19/reference/api#trywithtable",[3560,3577],{"id":8879,"title":3647,"titles":8880,"content":3649,"level":155},"/v0.0.19/reference/api#aggc",[3560,3577],{"id":8882,"title":3652,"titles":8883,"content":3654,"level":155},"/v0.0.19/reference/api#tryaggc",[3560,3577],{"id":8885,"title":3657,"titles":8886,"content":3659,"level":155},"/v0.0.19/reference/api#valuemap",[3560,3577],{"id":8888,"title":3662,"titles":8889,"content":99,"level":136},"/v0.0.19/reference/api#query-builders",[3560],{"id":8891,"title":219,"titles":8892,"content":3667,"level":155},"/v0.0.19/reference/api#select",[3560,3662],{"id":8894,"title":3670,"titles":8895,"content":3672,"level":155},"/v0.0.19/reference/api#insert",[3560,3662],{"id":8897,"title":3675,"titles":8898,"content":3677,"level":155},"/v0.0.19/reference/api#update",[3560,3662],{"id":8900,"title":3680,"titles":8901,"content":3682,"level":155},"/v0.0.19/reference/api#delete",[3560,3662],{"id":8903,"title":3685,"titles":8904,"content":3687,"level":155},"/v0.0.19/reference/api#count",[3560,3662],{"id":8906,"title":3690,"titles":8907,"content":99,"level":136},"/v0.0.19/reference/api#builder-methods",[3560],{"id":8909,"title":2665,"titles":8910,"content":3695,"level":155},"/v0.0.19/reference/api#fields",[3560,3690],{"id":8912,"title":3698,"titles":8913,"content":3700,"level":155},"/v0.0.19/reference/api#where",[3560,3690],{"id":8915,"title":3703,"titles":8916,"content":3705,"level":155},"/v0.0.19/reference/api#wherefield",[3560,3690],{"id":8918,"title":3708,"titles":8919,"content":3710,"level":155},"/v0.0.19/reference/api#orderby",[3560,3690],{"id":8921,"title":3713,"titles":8922,"content":3715,"level":155},"/v0.0.19/reference/api#orderbynulls",[3560,3690],{"id":8924,"title":3718,"titles":8925,"content":3720,"level":155},"/v0.0.19/reference/api#orderbyexpr",[3560,3690],{"id":8927,"title":3723,"titles":8928,"content":5734,"level":155},"/v0.0.19/reference/api#limit",[3560,3690],{"id":8930,"title":5737,"titles":8931,"content":5739,"level":155},"/v0.0.19/reference/api#limitparam",[3560,3690],{"id":8933,"title":3728,"titles":8934,"content":5743,"level":155},"/v0.0.19/reference/api#offset",[3560,3690],{"id":8936,"title":5746,"titles":8937,"content":5748,"level":155},"/v0.0.19/reference/api#offsetparam",[3560,3690],{"id":8939,"title":3733,"titles":8940,"content":3735,"level":155},"/v0.0.19/reference/api#set",[3560,3690],{"id":8942,"title":3738,"titles":8943,"content":3740,"level":155},"/v0.0.19/reference/api#values",[3560,3690],{"id":8945,"title":3743,"titles":8946,"content":3745,"level":155},"/v0.0.19/reference/api#returning",[3560,3690],{"id":8948,"title":3748,"titles":8949,"content":3750,"level":155},"/v0.0.19/reference/api#distinct",[3560,3690],{"id":8951,"title":3753,"titles":8952,"content":3755,"level":155},"/v0.0.19/reference/api#distincton",[3560,3690],{"id":8954,"title":3758,"titles":8955,"content":3760,"level":155},"/v0.0.19/reference/api#groupby",[3560,3690],{"id":8957,"title":3763,"titles":8958,"content":3765,"level":155},"/v0.0.19/reference/api#having",[3560,3690],{"id":8960,"title":3768,"titles":8961,"content":3770,"level":155},"/v0.0.19/reference/api#havingagg",[3560,3690],{"id":8963,"title":3773,"titles":8964,"content":3775,"level":155},"/v0.0.19/reference/api#selectexpr",[3560,3690],{"id":8966,"title":3778,"titles":8967,"content":3780,"level":155},"/v0.0.19/reference/api#onconflict",[3560,3690],{"id":8969,"title":3783,"titles":8970,"content":3785,"level":155},"/v0.0.19/reference/api#join-methods",[3560,3690],{"id":8972,"title":3788,"titles":8973,"content":3790,"level":155},"/v0.0.19/reference/api#row-locking",[3560,3690],{"id":8975,"title":3793,"titles":8976,"content":3795,"level":155},"/v0.0.19/reference/api#build",[3560,3690],{"id":8978,"title":3798,"titles":8979,"content":3800,"level":155},"/v0.0.19/reference/api#mustbuild",[3560,3690],{"id":8981,"title":350,"titles":8982,"content":6924,"level":155},"/v0.0.19/reference/api#render",[3560,3690],{"id":8984,"title":3807,"titles":8985,"content":6928,"level":155},"/v0.0.19/reference/api#mustrender",[3560,3690],{"id":8987,"title":3812,"titles":8988,"content":99,"level":136},"/v0.0.19/reference/api#set-operations",[3560],{"id":8990,"title":3816,"titles":8991,"content":3818,"level":155},"/v0.0.19/reference/api#union-unionall",[3560,3812],{"id":8993,"title":3821,"titles":8994,"content":3823,"level":155},"/v0.0.19/reference/api#intersect-intersectall",[3560,3812],{"id":8996,"title":3826,"titles":8997,"content":3828,"level":155},"/v0.0.19/reference/api#except-exceptall",[3560,3812],{"id":8999,"title":3831,"titles":9000,"content":6944,"level":136},"/v0.0.19/reference/api#rendering",[3560],{"id":9002,"title":3844,"titles":9003,"content":99,"level":136},"/v0.0.19/reference/api#expression-functions",[3560],{"id":9005,"title":1668,"titles":9006,"content":3849,"level":155},"/v0.0.19/reference/api#aggregates",[3560,3844],{"id":9008,"title":3852,"titles":9009,"content":3854,"level":155},"/v0.0.19/reference/api#filter-aggregates",[3560,3844],{"id":9011,"title":1251,"titles":9012,"content":3858,"level":155},"/v0.0.19/reference/api#conditions",[3560,3844],{"id":9014,"title":3006,"titles":9015,"content":3862,"level":155},"/v0.0.19/reference/api#subqueries",[3560,3844],{"id":9017,"title":3865,"titles":9018,"content":3867,"level":155},"/v0.0.19/reference/api#case-expression",[3560,3844],{"id":9020,"title":3870,"titles":9021,"content":3872,"level":155},"/v0.0.19/reference/api#null-handling",[3560,3844],{"id":9023,"title":3203,"titles":9024,"content":3876,"level":155},"/v0.0.19/reference/api#math-functions",[3560,3844],{"id":9026,"title":5855,"titles":9027,"content":5857,"level":155},"/v0.0.19/reference/api#string-functions",[3560,3844],{"id":9029,"title":5860,"titles":9030,"content":5862,"level":155},"/v0.0.19/reference/api#date-functions",[3560,3844],{"id":9032,"title":3221,"titles":9033,"content":3880,"level":155},"/v0.0.19/reference/api#type-casting",[3560,3844],{"id":9035,"title":3173,"titles":9036,"content":3884,"level":155},"/v0.0.19/reference/api#window-functions",[3560,3844],{"id":9038,"title":3193,"titles":9039,"content":3888,"level":155},"/v0.0.19/reference/api#window-specification",[3560,3844],{"id":9041,"title":3891,"titles":9042,"content":3893,"level":155},"/v0.0.19/reference/api#windowbuilder-methods",[3560,3844],{"id":9044,"title":3896,"titles":9045,"content":3898,"level":155},"/v0.0.19/reference/api#expression-alias",[3560,3844],{"id":9047,"title":3163,"titles":9048,"content":3902,"level":155},"/v0.0.19/reference/api#having-helpers",[3560,3844],{"id":9050,"title":3905,"titles":9051,"content":99,"level":136},"/v0.0.19/reference/api#types",[3560],{"id":9053,"title":3909,"titles":9054,"content":3911,"level":155},"/v0.0.19/reference/api#queryresult",[3560,3905],{"id":9056,"title":3914,"titles":9057,"content":3916,"level":155},"/v0.0.19/reference/api#direction",[3560,3905],{"id":9059,"title":3919,"titles":9060,"content":3921,"level":155},"/v0.0.19/reference/api#nullsordering",[3560,3905],{"id":9062,"title":3924,"titles":9063,"content":5896,"level":155},"/v0.0.19/reference/api#operation",[3560,3905],{"id":9065,"title":5899,"titles":9066,"content":99,"level":136},"/v0.0.19/reference/api#providers",[3560],{"id":9068,"title":5903,"titles":9069,"content":5905,"level":155},"/v0.0.19/reference/api#renderer-interface",[3560,5899],{"id":9071,"title":5908,"titles":9072,"content":7017,"level":155},"/v0.0.19/reference/api#postgresql-provider",[3560,5899],{"id":9074,"title":5913,"titles":9075,"content":7021,"level":155},"/v0.0.19/reference/api#sqlite-provider",[3560,5899],{"id":9077,"title":5918,"titles":9078,"content":7025,"level":155},"/v0.0.19/reference/api#mysql-provider",[3560,5899],{"id":9080,"title":5923,"titles":9081,"content":7029,"level":155},"/v0.0.19/reference/api#sql-server-provider",[3560,5899],{"id":9083,"title":3929,"titles":9084,"content":3931,"level":107},"/v0.0.19/reference/operators",[],{"id":9086,"title":3929,"titles":9087,"content":3935,"level":107},"/v0.0.19/reference/operators#operators-reference",[],{"id":9089,"title":2959,"titles":9090,"content":3939,"level":136},"/v0.0.19/reference/operators#comparison-operators",[3929],{"id":9092,"title":3341,"titles":9093,"content":3943,"level":155},"/v0.0.19/reference/operators#usage",[3929,2959],{"id":9095,"title":2964,"titles":9096,"content":3947,"level":136},"/v0.0.19/reference/operators#pattern-matching",[3929],{"id":9098,"title":3341,"titles":9099,"content":3951,"level":155},"/v0.0.19/reference/operators#usage-1",[3929,2964],{"id":9101,"title":3954,"titles":9102,"content":3956,"level":136},"/v0.0.19/reference/operators#null-operators",[3929],{"id":9104,"title":3341,"titles":9105,"content":3960,"level":155},"/v0.0.19/reference/operators#usage-2",[3929,3954],{"id":9107,"title":2974,"titles":9108,"content":3964,"level":136},"/v0.0.19/reference/operators#array-operators",[3929],{"id":9110,"title":3341,"titles":9111,"content":3968,"level":155},"/v0.0.19/reference/operators#usage-3",[3929,2974],{"id":9113,"title":3971,"titles":9114,"content":3973,"level":155},"/v0.0.19/reference/operators#with-sqlx",[3929,2974],{"id":9116,"title":3976,"titles":9117,"content":3978,"level":136},"/v0.0.19/reference/operators#subquery-operators",[3929],{"id":9119,"title":3341,"titles":9120,"content":3982,"level":155},"/v0.0.19/reference/operators#usage-4",[3929,3976],{"id":9122,"title":3985,"titles":9123,"content":3987,"level":136},"/v0.0.19/reference/operators#regex-operators",[3929],{"id":9125,"title":3341,"titles":9126,"content":3991,"level":155},"/v0.0.19/reference/operators#usage-5",[3929,3985],{"id":9128,"title":3994,"titles":9129,"content":3996,"level":136},"/v0.0.19/reference/operators#postgresql-array-operators",[3929],{"id":9131,"title":3341,"titles":9132,"content":4000,"level":155},"/v0.0.19/reference/operators#usage-6",[3929,3994],{"id":9134,"title":4003,"titles":9135,"content":4005,"level":136},"/v0.0.19/reference/operators#vector-operators-pgvector",[3929],{"id":9137,"title":3341,"titles":9138,"content":4009,"level":155},"/v0.0.19/reference/operators#usage-7",[3929,4003],{"id":9140,"title":4012,"titles":9141,"content":4014,"level":155},"/v0.0.19/reference/operators#with-pgvector",[3929,4003],{"id":9143,"title":4017,"titles":9144,"content":4019,"level":136},"/v0.0.19/reference/operators#operator-selection-guide",[3929],{"id":9146,"title":3124,"titles":9147,"content":4023,"level":136},"/v0.0.19/reference/operators#aggregate-functions",[3929],{"id":9149,"title":3173,"titles":9150,"content":4027,"level":136},"/v0.0.19/reference/operators#window-functions",[3929],{"id":9152,"title":3198,"titles":9153,"content":4031,"level":136},"/v0.0.19/reference/operators#frame-bounds",[3929],{"id":9155,"title":4034,"titles":9156,"content":4036,"level":136},"/v0.0.19/reference/operators#cast-types",[3929],{"id":9158,"title":1614,"titles":9159,"content":2581,"level":107},"/v0.1.0/overview",[],{"id":9161,"title":1614,"titles":9162,"content":6007,"level":107},"/v0.1.0/overview#overview",[],{"id":9164,"title":1237,"titles":9165,"content":2589,"level":136},"/v0.1.0/overview#architecture",[1614],{"id":9167,"title":2592,"titles":9168,"content":2594,"level":136},"/v0.1.0/overview#philosophy",[1614],{"id":9170,"title":1187,"titles":9171,"content":2598,"level":136},"/v0.1.0/overview#capabilities",[1614],{"id":9173,"title":2601,"titles":9174,"content":99,"level":136},"/v0.1.0/overview#priorities",[1614],{"id":9176,"title":1782,"titles":9177,"content":2606,"level":155},"/v0.1.0/overview#security",[1614,2601],{"id":9179,"title":2609,"titles":9180,"content":6026,"level":155},"/v0.1.0/overview#ergonomics",[1614,2601],{"id":9182,"title":5002,"titles":9183,"content":6030,"level":155},"/v0.1.0/overview#multi-provider-architecture",[1614,2601],{"id":9185,"title":1628,"titles":9186,"content":2620,"level":107},"/v0.1.0/learn/quickstart",[],{"id":9188,"title":1628,"titles":9189,"content":99,"level":107},"/v0.1.0/learn/quickstart#quickstart",[],{"id":9191,"title":2626,"titles":9192,"content":6040,"level":136},"/v0.1.0/learn/quickstart#requirements",[1628],{"id":9194,"title":2631,"titles":9195,"content":2633,"level":136},"/v0.1.0/learn/quickstart#installation",[1628],{"id":9197,"title":2636,"titles":9198,"content":6047,"level":136},"/v0.1.0/learn/quickstart#basic-usage",[1628],{"id":9200,"title":2641,"titles":9201,"content":6051,"level":136},"/v0.1.0/learn/quickstart#whats-happening",[1628],{"id":9203,"title":2646,"titles":9204,"content":6055,"level":136},"/v0.1.0/learn/quickstart#using-with-sqlx",[1628],{"id":9206,"title":2651,"titles":9207,"content":2653,"level":107},"/v0.1.0/learn/concepts",[],{"id":9209,"title":2651,"titles":9210,"content":2657,"level":107},"/v0.1.0/learn/concepts#core-concepts",[],{"id":9212,"title":2660,"titles":9213,"content":2662,"level":136},"/v0.1.0/learn/concepts#tables",[2651],{"id":9215,"title":2665,"titles":9216,"content":2667,"level":136},"/v0.1.0/learn/concepts#fields",[2651],{"id":9218,"title":2670,"titles":9219,"content":2672,"level":155},"/v0.1.0/learn/concepts#field-validation",[2651,2665],{"id":9221,"title":2675,"titles":9222,"content":2677,"level":136},"/v0.1.0/learn/concepts#params",[2651],{"id":9224,"title":2680,"titles":9225,"content":2682,"level":155},"/v0.1.0/learn/concepts#parameter-validation",[2651,2675],{"id":9227,"title":1251,"titles":9228,"content":2686,"level":136},"/v0.1.0/learn/concepts#conditions",[2651],{"id":9230,"title":1727,"titles":9231,"content":2690,"level":155},"/v0.1.0/learn/concepts#operators",[2651,1251],{"id":9233,"title":2693,"titles":9234,"content":2695,"level":155},"/v0.1.0/learn/concepts#combining-conditions",[2651,1251],{"id":9236,"title":2698,"titles":9237,"content":2700,"level":155},"/v0.1.0/learn/concepts#nested-conditions",[2651,1251],{"id":9239,"title":2703,"titles":9240,"content":2705,"level":155},"/v0.1.0/learn/concepts#null-conditions",[2651,1251],{"id":9242,"title":2708,"titles":9243,"content":2710,"level":155},"/v0.1.0/learn/concepts#field-comparisons",[2651,1251],{"id":9245,"title":2713,"titles":9246,"content":2715,"level":136},"/v0.1.0/learn/concepts#builders",[2651],{"id":9248,"title":2718,"titles":9249,"content":6101,"level":155},"/v0.1.0/learn/concepts#fluent-api",[2651,2713],{"id":9251,"title":2723,"titles":9252,"content":6105,"level":155},"/v0.1.0/learn/concepts#build-vs-render",[2651,2713],{"id":9254,"title":2728,"titles":9255,"content":6109,"level":155},"/v0.1.0/learn/concepts#must-variants",[2651,2713],{"id":9257,"title":2733,"titles":9258,"content":2735,"level":136},"/v0.1.0/learn/concepts#try-variants",[2651],{"id":9260,"title":2738,"titles":9261,"content":2740,"level":136},"/v0.1.0/learn/concepts#query-result",[2651],{"id":9263,"title":1237,"titles":9264,"content":2744,"level":107},"/v0.1.0/learn/architecture",[],{"id":9266,"title":1237,"titles":9267,"content":2748,"level":107},"/v0.1.0/learn/architecture#architecture",[],{"id":9269,"title":2751,"titles":9270,"content":2753,"level":136},"/v0.1.0/learn/architecture#pipeline-overview",[1237],{"id":9272,"title":2756,"titles":9273,"content":99,"level":136},"/v0.1.0/learn/architecture#validation-layer",[1237],{"id":9275,"title":1215,"titles":9276,"content":2761,"level":155},"/v0.1.0/learn/architecture#schema-validation",[1237,2756],{"id":9278,"title":2764,"titles":9279,"content":2766,"level":155},"/v0.1.0/learn/architecture#identifier-validation",[1237,2756],{"id":9281,"title":2769,"titles":9282,"content":2771,"level":155},"/v0.1.0/learn/architecture#alias-restrictions",[1237,2756],{"id":9284,"title":2774,"titles":9285,"content":5107,"level":136},"/v0.1.0/learn/architecture#ast-structure",[1237],{"id":9287,"title":2779,"titles":9288,"content":2781,"level":155},"/v0.1.0/learn/architecture#internal-types",[1237,2774],{"id":9290,"title":2784,"titles":9291,"content":2786,"level":155},"/v0.1.0/learn/architecture#condition-types",[1237,2774],{"id":9293,"title":2789,"titles":9294,"content":2791,"level":136},"/v0.1.0/learn/architecture#render-engine",[1237],{"id":9296,"title":2794,"titles":9297,"content":2796,"level":155},"/v0.1.0/learn/architecture#identifier-quoting",[1237,2789],{"id":9299,"title":2799,"titles":9300,"content":2801,"level":155},"/v0.1.0/learn/architecture#parameter-placeholders",[1237,2789],{"id":9302,"title":2804,"titles":9303,"content":2806,"level":155},"/v0.1.0/learn/architecture#parameter-namespacing",[1237,2789],{"id":9305,"title":5128,"titles":9306,"content":5130,"level":136},"/v0.1.0/learn/architecture#provider-architecture",[1237],{"id":9308,"title":5133,"titles":9309,"content":6164,"level":155},"/v0.1.0/learn/architecture#available-providers",[1237,5128],{"id":9311,"title":3341,"titles":9312,"content":6168,"level":155},"/v0.1.0/learn/architecture#usage",[1237,5128],{"id":9314,"title":5142,"titles":9315,"content":5144,"level":155},"/v0.1.0/learn/architecture#dialect-differences",[1237,5128],{"id":9317,"title":2809,"titles":9318,"content":6175,"level":136},"/v0.1.0/learn/architecture#file-structure",[1237],{"id":9320,"title":2814,"titles":9321,"content":2816,"level":136},"/v0.1.0/learn/architecture#security-layers",[1237],{"id":9323,"title":2819,"titles":9324,"content":99,"level":136},"/v0.1.0/learn/architecture#extension-points",[1237],{"id":9326,"title":2823,"titles":9327,"content":2825,"level":155},"/v0.1.0/learn/architecture#custom-expressions",[1237,2819],{"id":9329,"title":2828,"titles":9330,"content":2830,"level":155},"/v0.1.0/learn/architecture#compound-queries",[1237,2819],{"id":9332,"title":2833,"titles":9333,"content":6191,"level":155},"/v0.1.0/learn/architecture#direct-ast-access",[1237,2819],{"id":9335,"title":1215,"titles":9336,"content":2839,"level":107},"/v0.1.0/guides/schema-validation",[],{"id":9338,"title":1215,"titles":9339,"content":2843,"level":107},"/v0.1.0/guides/schema-validation#schema-validation",[],{"id":9341,"title":2846,"titles":9342,"content":2848,"level":136},"/v0.1.0/guides/schema-validation#defining-a-schema",[1215],{"id":9344,"title":2851,"titles":9345,"content":2853,"level":136},"/v0.1.0/guides/schema-validation#creating-an-instance",[1215],{"id":9347,"title":2856,"titles":9348,"content":99,"level":136},"/v0.1.0/guides/schema-validation#validation-behavior",[1215],{"id":9350,"title":2860,"titles":9351,"content":2862,"level":155},"/v0.1.0/guides/schema-validation#table-validation",[1215,2856],{"id":9353,"title":2670,"titles":9354,"content":2866,"level":155},"/v0.1.0/guides/schema-validation#field-validation",[1215,2856],{"id":9356,"title":2680,"titles":9357,"content":2870,"level":155},"/v0.1.0/guides/schema-validation#parameter-validation",[1215,2856],{"id":9359,"title":2873,"titles":9360,"content":2875,"level":136},"/v0.1.0/guides/schema-validation#panic-vs-error",[1215],{"id":9362,"title":2733,"titles":9363,"content":2879,"level":155},"/v0.1.0/guides/schema-validation#try-variants",[1215,2873],{"id":9365,"title":2882,"titles":9366,"content":2884,"level":155},"/v0.1.0/guides/schema-validation#when-to-use-each",[1215,2873],{"id":9368,"title":2887,"titles":9369,"content":2889,"level":136},"/v0.1.0/guides/schema-validation#table-aliases",[1215],{"id":9371,"title":2769,"titles":9372,"content":2893,"level":155},"/v0.1.0/guides/schema-validation#alias-restrictions",[1215,2887],{"id":9374,"title":2896,"titles":9375,"content":2898,"level":155},"/v0.1.0/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":9377,"title":2901,"titles":9378,"content":99,"level":136},"/v0.1.0/guides/schema-validation#schema-organization",[1215],{"id":9380,"title":2905,"titles":9381,"content":6240,"level":155},"/v0.1.0/guides/schema-validation#single-schema-instance",[1215,2901],{"id":9383,"title":2910,"titles":9384,"content":2912,"level":155},"/v0.1.0/guides/schema-validation#multiple-schemas",[1215,2901],{"id":9386,"title":2915,"titles":9387,"content":99,"level":136},"/v0.1.0/guides/schema-validation#dynamic-queries",[1215],{"id":9389,"title":2919,"titles":9390,"content":6250,"level":155},"/v0.1.0/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":9392,"title":2924,"titles":9393,"content":2926,"level":155},"/v0.1.0/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":9395,"title":2929,"titles":9396,"content":99,"level":136},"/v0.1.0/guides/schema-validation#validation-errors",[1215],{"id":9398,"title":2933,"titles":9399,"content":2935,"level":155},"/v0.1.0/guides/schema-validation#error-types",[1215,2929],{"id":9401,"title":2938,"titles":9402,"content":6263,"level":155},"/v0.1.0/guides/schema-validation#handling-errors",[1215,2929],{"id":9404,"title":1251,"titles":9405,"content":2944,"level":107},"/v0.1.0/guides/conditions",[],{"id":9407,"title":1251,"titles":9408,"content":2948,"level":107},"/v0.1.0/guides/conditions#conditions",[],{"id":9410,"title":2951,"titles":9411,"content":2953,"level":136},"/v0.1.0/guides/conditions#basic-conditions",[1251],{"id":9413,"title":1727,"titles":9414,"content":99,"level":136},"/v0.1.0/guides/conditions#operators",[1251],{"id":9416,"title":2959,"titles":9417,"content":2961,"level":155},"/v0.1.0/guides/conditions#comparison-operators",[1251,1727],{"id":9419,"title":2964,"titles":9420,"content":2966,"level":155},"/v0.1.0/guides/conditions#pattern-matching",[1251,1727],{"id":9422,"title":2969,"titles":9423,"content":2971,"level":155},"/v0.1.0/guides/conditions#null-checks",[1251,1727],{"id":9425,"title":2974,"titles":9426,"content":2976,"level":155},"/v0.1.0/guides/conditions#array-operators",[1251,1727],{"id":9428,"title":2693,"titles":9429,"content":99,"level":136},"/v0.1.0/guides/conditions#combining-conditions",[1251],{"id":9431,"title":2982,"titles":9432,"content":2984,"level":155},"/v0.1.0/guides/conditions#and",[1251,2693],{"id":9434,"title":2987,"titles":9435,"content":2989,"level":155},"/v0.1.0/guides/conditions#or",[1251,2693],{"id":9437,"title":2992,"titles":9438,"content":2994,"level":155},"/v0.1.0/guides/conditions#nested-logic",[1251,2693],{"id":9440,"title":2997,"titles":9441,"content":2999,"level":136},"/v0.1.0/guides/conditions#between",[1251],{"id":9443,"title":2708,"titles":9444,"content":3003,"level":136},"/v0.1.0/guides/conditions#field-comparisons",[1251],{"id":9446,"title":3006,"titles":9447,"content":99,"level":136},"/v0.1.0/guides/conditions#subqueries",[1251],{"id":9449,"title":3010,"titles":9450,"content":3012,"level":155},"/v0.1.0/guides/conditions#in-subquery",[1251,3006],{"id":9452,"title":3015,"titles":9453,"content":3017,"level":155},"/v0.1.0/guides/conditions#not-in-subquery",[1251,3006],{"id":9455,"title":3020,"titles":9456,"content":3022,"level":155},"/v0.1.0/guides/conditions#exists",[1251,3006],{"id":9458,"title":3025,"titles":9459,"content":3027,"level":155},"/v0.1.0/guides/conditions#not-exists",[1251,3006],{"id":9461,"title":2804,"titles":9462,"content":3031,"level":155},"/v0.1.0/guides/conditions#parameter-namespacing",[1251,3006],{"id":9464,"title":3034,"titles":9465,"content":3036,"level":136},"/v0.1.0/guides/conditions#multiple-where-clauses",[1251],{"id":9467,"title":3039,"titles":9468,"content":3041,"level":136},"/v0.1.0/guides/conditions#wherefield-shorthand",[1251],{"id":9470,"title":3044,"titles":9471,"content":3046,"level":136},"/v0.1.0/guides/conditions#building-conditions-dynamically",[1251],{"id":9473,"title":1265,"titles":9474,"content":3050,"level":107},"/v0.1.0/guides/joins",[],{"id":9476,"title":1265,"titles":9477,"content":3054,"level":107},"/v0.1.0/guides/joins#joins",[],{"id":9479,"title":3057,"titles":9480,"content":3059,"level":136},"/v0.1.0/guides/joins#join-types",[1265],{"id":9482,"title":3062,"titles":9483,"content":3064,"level":136},"/v0.1.0/guides/joins#basic-join",[1265],{"id":9485,"title":2887,"titles":9486,"content":3068,"level":136},"/v0.1.0/guides/joins#table-aliases",[1265],{"id":9488,"title":3071,"titles":9489,"content":3073,"level":136},"/v0.1.0/guides/joins#left-join",[1265],{"id":9491,"title":3076,"titles":9492,"content":3078,"level":136},"/v0.1.0/guides/joins#right-join",[1265],{"id":9494,"title":3081,"titles":9495,"content":3083,"level":136},"/v0.1.0/guides/joins#full-outer-join",[1265],{"id":9497,"title":3086,"titles":9498,"content":3088,"level":136},"/v0.1.0/guides/joins#cross-join",[1265],{"id":9500,"title":3091,"titles":9501,"content":3093,"level":136},"/v0.1.0/guides/joins#multiple-joins",[1265],{"id":9503,"title":3096,"titles":9504,"content":3098,"level":136},"/v0.1.0/guides/joins#complex-on-conditions",[1265],{"id":9506,"title":3101,"titles":9507,"content":3103,"level":136},"/v0.1.0/guides/joins#self-joins",[1265],{"id":9509,"title":3106,"titles":9510,"content":3108,"level":136},"/v0.1.0/guides/joins#joins-with-count",[1265],{"id":9512,"title":3111,"titles":9513,"content":3113,"level":136},"/v0.1.0/guides/joins#join-validation",[1265],{"id":9515,"title":1668,"titles":9516,"content":3117,"level":107},"/v0.1.0/guides/aggregates",[],{"id":9518,"title":1668,"titles":9519,"content":3121,"level":107},"/v0.1.0/guides/aggregates#aggregates",[],{"id":9521,"title":3124,"titles":9522,"content":99,"level":136},"/v0.1.0/guides/aggregates#aggregate-functions",[1668],{"id":9524,"title":3128,"titles":9525,"content":3130,"level":155},"/v0.1.0/guides/aggregates#basic-aggregates",[1668,3124],{"id":9527,"title":3133,"titles":9528,"content":3135,"level":155},"/v0.1.0/guides/aggregates#using-aggregates",[1668,3124],{"id":9530,"title":3138,"titles":9531,"content":3140,"level":155},"/v0.1.0/guides/aggregates#aliases",[1668,3124],{"id":9533,"title":3143,"titles":9534,"content":3145,"level":136},"/v0.1.0/guides/aggregates#group-by",[1668],{"id":9536,"title":3148,"titles":9537,"content":3150,"level":136},"/v0.1.0/guides/aggregates#having",[1668],{"id":9539,"title":3153,"titles":9540,"content":3155,"level":155},"/v0.1.0/guides/aggregates#simple-having",[1668,3148],{"id":9542,"title":3158,"titles":9543,"content":3160,"level":155},"/v0.1.0/guides/aggregates#aggregate-having",[1668,3148],{"id":9545,"title":3163,"titles":9546,"content":3165,"level":155},"/v0.1.0/guides/aggregates#having-helpers",[1668,3148],{"id":9548,"title":3168,"titles":9549,"content":3170,"level":136},"/v0.1.0/guides/aggregates#filter-clause",[1668],{"id":9551,"title":3173,"titles":9552,"content":3175,"level":136},"/v0.1.0/guides/aggregates#window-functions",[1668],{"id":9554,"title":3178,"titles":9555,"content":3180,"level":155},"/v0.1.0/guides/aggregates#basic-window-functions",[1668,3173],{"id":9557,"title":3183,"titles":9558,"content":3185,"level":155},"/v0.1.0/guides/aggregates#window-function-types",[1668,3173],{"id":9560,"title":3188,"titles":9561,"content":3190,"level":155},"/v0.1.0/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":9563,"title":3193,"titles":9564,"content":3195,"level":155},"/v0.1.0/guides/aggregates#window-specification",[1668,3173],{"id":9566,"title":3198,"titles":9567,"content":3200,"level":155},"/v0.1.0/guides/aggregates#frame-bounds",[1668,3173],{"id":9569,"title":3203,"titles":9570,"content":99,"level":136},"/v0.1.0/guides/aggregates#math-functions",[1668],{"id":9572,"title":3207,"titles":9573,"content":3209,"level":155},"/v0.1.0/guides/aggregates#available-functions",[1668,3203],{"id":9575,"title":3212,"titles":9576,"content":3214,"level":155},"/v0.1.0/guides/aggregates#example",[1668,3203],{"id":9578,"title":1270,"titles":9579,"content":3218,"level":136},"/v0.1.0/guides/aggregates#case-expressions",[1668],{"id":9581,"title":3221,"titles":9582,"content":3223,"level":136},"/v0.1.0/guides/aggregates#type-casting",[1668],{"id":9584,"title":3226,"titles":9585,"content":3228,"level":136},"/v0.1.0/guides/aggregates#coalesce-and-nullif",[1668],{"id":9587,"title":1675,"titles":9588,"content":3232,"level":107},"/v0.1.0/guides/testing",[],{"id":9590,"title":1675,"titles":9591,"content":3236,"level":107},"/v0.1.0/guides/testing#testing",[],{"id":9593,"title":3239,"titles":9594,"content":99,"level":136},"/v0.1.0/guides/testing#testing-query-output",[1675],{"id":9596,"title":3243,"titles":9597,"content":6459,"level":155},"/v0.1.0/guides/testing#basic-output-testing",[1675,3239],{"id":9599,"title":3248,"titles":9600,"content":3250,"level":155},"/v0.1.0/guides/testing#test-instance-setup",[1675,3239],{"id":9602,"title":3253,"titles":9603,"content":99,"level":136},"/v0.1.0/guides/testing#table-driven-tests",[1675],{"id":9605,"title":3257,"titles":9606,"content":6469,"level":155},"/v0.1.0/guides/testing#testing-multiple-queries",[1675,3253],{"id":9608,"title":3262,"titles":9609,"content":99,"level":136},"/v0.1.0/guides/testing#testing-validation",[1675],{"id":9611,"title":3266,"titles":9612,"content":3268,"level":155},"/v0.1.0/guides/testing#testing-invalid-input",[1675,3262],{"id":9614,"title":3271,"titles":9615,"content":3273,"level":155},"/v0.1.0/guides/testing#testing-try-variants",[1675,3262],{"id":9617,"title":3276,"titles":9618,"content":99,"level":136},"/v0.1.0/guides/testing#testing-error-cases",[1675],{"id":9620,"title":3280,"titles":9621,"content":6485,"level":155},"/v0.1.0/guides/testing#builder-errors",[1675,3276],{"id":9623,"title":3285,"titles":9624,"content":99,"level":136},"/v0.1.0/guides/testing#testing-complex-queries",[1675],{"id":9626,"title":3289,"titles":9627,"content":6492,"level":155},"/v0.1.0/guides/testing#join-tests",[1675,3285],{"id":9629,"title":3294,"titles":9630,"content":6496,"level":155},"/v0.1.0/guides/testing#subquery-tests",[1675,3285],{"id":9632,"title":3299,"titles":9633,"content":3301,"level":136},"/v0.1.0/guides/testing#snapshot-testing",[1675],{"id":9635,"title":3304,"titles":9636,"content":99,"level":136},"/v0.1.0/guides/testing#best-practices",[1675],{"id":9638,"title":3308,"titles":9639,"content":3310,"level":155},"/v0.1.0/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":9641,"title":3313,"titles":9642,"content":3315,"level":155},"/v0.1.0/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":9644,"title":3318,"titles":9645,"content":3320,"level":155},"/v0.1.0/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":9647,"title":3323,"titles":9648,"content":6515,"level":155},"/v0.1.0/guides/testing#_4-test-edge-cases",[1675,3304],{"id":9650,"title":1688,"titles":9651,"content":3329,"level":107},"/v0.1.0/cookbook/pagination",[],{"id":9653,"title":1688,"titles":9654,"content":3333,"level":107},"/v0.1.0/cookbook/pagination#pagination",[],{"id":9656,"title":3336,"titles":9657,"content":6525,"level":136},"/v0.1.0/cookbook/pagination#offset-pagination",[1688],{"id":9659,"title":3341,"titles":9660,"content":3343,"level":155},"/v0.1.0/cookbook/pagination#usage",[1688,3336],{"id":9662,"title":3346,"titles":9663,"content":6532,"level":155},"/v0.1.0/cookbook/pagination#with-total-count",[1688,3336],{"id":9665,"title":3351,"titles":9666,"content":3353,"level":155},"/v0.1.0/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":9668,"title":3356,"titles":9669,"content":6539,"level":136},"/v0.1.0/cookbook/pagination#cursor-pagination",[1688],{"id":9671,"title":3341,"titles":9672,"content":3362,"level":155},"/v0.1.0/cookbook/pagination#usage-1",[1688,3356],{"id":9674,"title":3365,"titles":9675,"content":6546,"level":155},"/v0.1.0/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":9677,"title":3370,"titles":9678,"content":6550,"level":155},"/v0.1.0/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":9680,"title":3375,"titles":9681,"content":6554,"level":136},"/v0.1.0/cookbook/pagination#filtering-with-pagination",[1688],{"id":9683,"title":3380,"titles":9684,"content":6558,"level":136},"/v0.1.0/cookbook/pagination#pagination-with-joins",[1688],{"id":9686,"title":3304,"titles":9687,"content":99,"level":136},"/v0.1.0/cookbook/pagination#best-practices",[1688],{"id":9689,"title":3388,"titles":9690,"content":6565,"level":155},"/v0.1.0/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":9692,"title":3393,"titles":9693,"content":3395,"level":155},"/v0.1.0/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":9695,"title":3398,"titles":9696,"content":3400,"level":155},"/v0.1.0/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":9698,"title":3403,"titles":9699,"content":3405,"level":155},"/v0.1.0/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":9701,"title":1695,"titles":9702,"content":3409,"level":107},"/v0.1.0/cookbook/vector-search",[],{"id":9704,"title":1695,"titles":9705,"content":3413,"level":107},"/v0.1.0/cookbook/vector-search#vector-search",[],{"id":9707,"title":3416,"titles":9708,"content":3418,"level":136},"/v0.1.0/cookbook/vector-search#schema-setup",[1695],{"id":9710,"title":3421,"titles":9711,"content":3423,"level":136},"/v0.1.0/cookbook/vector-search#distance-operators",[1695],{"id":9713,"title":3426,"titles":9714,"content":3428,"level":136},"/v0.1.0/cookbook/vector-search#basic-similarity-search",[1695],{"id":9716,"title":3431,"titles":9717,"content":3433,"level":155},"/v0.1.0/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":9719,"title":3436,"titles":9720,"content":3438,"level":136},"/v0.1.0/cookbook/vector-search#cosine-similarity",[1695],{"id":9722,"title":3441,"titles":9723,"content":3443,"level":136},"/v0.1.0/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":9725,"title":3446,"titles":9726,"content":3448,"level":136},"/v0.1.0/cookbook/vector-search#filtered-vector-search",[1695],{"id":9728,"title":3451,"titles":9729,"content":3453,"level":136},"/v0.1.0/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":9731,"title":3456,"titles":9732,"content":3458,"level":136},"/v0.1.0/cookbook/vector-search#hybrid-search",[1695],{"id":9734,"title":3461,"titles":9735,"content":3463,"level":136},"/v0.1.0/cookbook/vector-search#multi-vector-search",[1695],{"id":9737,"title":3466,"titles":9738,"content":3468,"level":136},"/v0.1.0/cookbook/vector-search#indexing-recommendations",[1695],{"id":9740,"title":3304,"titles":9741,"content":99,"level":136},"/v0.1.0/cookbook/vector-search#best-practices",[1695],{"id":9743,"title":3474,"titles":9744,"content":3476,"level":155},"/v0.1.0/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":9746,"title":3479,"titles":9747,"content":3481,"level":155},"/v0.1.0/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":9749,"title":3484,"titles":9750,"content":3486,"level":155},"/v0.1.0/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":9752,"title":1702,"titles":9753,"content":3490,"level":107},"/v0.1.0/cookbook/upserts",[],{"id":9755,"title":1702,"titles":9756,"content":3494,"level":107},"/v0.1.0/cookbook/upserts#upserts",[],{"id":9758,"title":3497,"titles":9759,"content":6635,"level":136},"/v0.1.0/cookbook/upserts#basic-upsert",[1702],{"id":9761,"title":3502,"titles":9762,"content":6639,"level":136},"/v0.1.0/cookbook/upserts#do-nothing",[1702],{"id":9764,"title":3507,"titles":9765,"content":6643,"level":136},"/v0.1.0/cookbook/upserts#multi-column-conflict",[1702],{"id":9767,"title":3512,"titles":9768,"content":6647,"level":136},"/v0.1.0/cookbook/upserts#returning-with-upsert",[1702],{"id":9770,"title":3517,"titles":9771,"content":6651,"level":136},"/v0.1.0/cookbook/upserts#batch-upsert",[1702],{"id":9773,"title":3522,"titles":9774,"content":6655,"level":136},"/v0.1.0/cookbook/upserts#conditional-upsert",[1702],{"id":9776,"title":3527,"titles":9777,"content":6659,"level":136},"/v0.1.0/cookbook/upserts#sync-pattern",[1702],{"id":9779,"title":3532,"titles":9780,"content":6663,"level":136},"/v0.1.0/cookbook/upserts#upsert-with-timestamps",[1702],{"id":9782,"title":3304,"titles":9783,"content":99,"level":136},"/v0.1.0/cookbook/upserts#best-practices",[1702],{"id":9785,"title":3540,"titles":9786,"content":3542,"level":155},"/v0.1.0/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":9788,"title":3545,"titles":9789,"content":3547,"level":155},"/v0.1.0/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":9791,"title":3550,"titles":9792,"content":3552,"level":155},"/v0.1.0/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":9794,"title":3555,"titles":9795,"content":3557,"level":155},"/v0.1.0/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":9797,"title":1709,"titles":9798,"content":6682,"level":107},"/v0.1.0/cookbook/orm-foundation",[],{"id":9800,"title":1709,"titles":9801,"content":6686,"level":107},"/v0.1.0/cookbook/orm-foundation#orm-foundation",[],{"id":9803,"title":6689,"titles":9804,"content":6691,"level":136},"/v0.1.0/cookbook/orm-foundation#the-result",[1709],{"id":9806,"title":6694,"titles":9807,"content":6696,"level":136},"/v0.1.0/cookbook/orm-foundation#the-architecture",[1709],{"id":9809,"title":6699,"titles":9810,"content":6701,"level":136},"/v0.1.0/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":9812,"title":6704,"titles":9813,"content":6706,"level":155},"/v0.1.0/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":9815,"title":6709,"titles":9816,"content":6711,"level":155},"/v0.1.0/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":9818,"title":6714,"titles":9819,"content":6716,"level":155},"/v0.1.0/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":9821,"title":6719,"titles":9822,"content":6721,"level":155},"/v0.1.0/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":9824,"title":6724,"titles":9825,"content":6726,"level":136},"/v0.1.0/cookbook/orm-foundation#the-security-model",[1709],{"id":9827,"title":6729,"titles":9828,"content":6731,"level":136},"/v0.1.0/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":9830,"title":6734,"titles":9831,"content":6736,"level":136},"/v0.1.0/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":9833,"title":6739,"titles":9834,"content":6741,"level":155},"/v0.1.0/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":9836,"title":6744,"titles":9837,"content":6746,"level":155},"/v0.1.0/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":9839,"title":6749,"titles":9840,"content":6751,"level":155},"/v0.1.0/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":9842,"title":6754,"titles":9843,"content":6756,"level":155},"/v0.1.0/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":9845,"title":6759,"titles":9846,"content":6761,"level":136},"/v0.1.0/cookbook/orm-foundation#see-also",[1709],{"id":9848,"title":3560,"titles":9849,"content":3562,"level":107},"/v0.1.0/reference/api",[],{"id":9851,"title":3560,"titles":9852,"content":3566,"level":107},"/v0.1.0/reference/api#api-reference",[],{"id":9854,"title":3569,"titles":9855,"content":99,"level":136},"/v0.1.0/reference/api#instance-creation",[3560],{"id":9857,"title":856,"titles":9858,"content":3574,"level":155},"/v0.1.0/reference/api#newfromdbml",[3560,3569],{"id":9860,"title":3577,"titles":9861,"content":99,"level":136},"/v0.1.0/reference/api#instance-methods",[3560],{"id":9863,"title":119,"titles":9864,"content":3582,"level":155},"/v0.1.0/reference/api#t",[3560,3577],{"id":9866,"title":3585,"titles":9867,"content":3587,"level":155},"/v0.1.0/reference/api#tryt",[3560,3577],{"id":9869,"title":169,"titles":9870,"content":3591,"level":155},"/v0.1.0/reference/api#f",[3560,3577],{"id":9872,"title":3594,"titles":9873,"content":3596,"level":155},"/v0.1.0/reference/api#tryf",[3560,3577],{"id":9875,"title":316,"titles":9876,"content":3600,"level":155},"/v0.1.0/reference/api#p",[3560,3577],{"id":9878,"title":3603,"titles":9879,"content":3605,"level":155},"/v0.1.0/reference/api#tryp",[3560,3577],{"id":9881,"title":284,"titles":9882,"content":3609,"level":155},"/v0.1.0/reference/api#c",[3560,3577],{"id":9884,"title":3612,"titles":9885,"content":3614,"level":155},"/v0.1.0/reference/api#tryc",[3560,3577],{"id":9887,"title":3617,"titles":9888,"content":3619,"level":155},"/v0.1.0/reference/api#and",[3560,3577],{"id":9890,"title":3622,"titles":9891,"content":3624,"level":155},"/v0.1.0/reference/api#or",[3560,3577],{"id":9893,"title":3627,"titles":9894,"content":3629,"level":155},"/v0.1.0/reference/api#null",[3560,3577],{"id":9896,"title":3632,"titles":9897,"content":3634,"level":155},"/v0.1.0/reference/api#notnull",[3560,3577],{"id":9899,"title":3637,"titles":9900,"content":3639,"level":155},"/v0.1.0/reference/api#withtable",[3560,3577],{"id":9902,"title":3642,"titles":9903,"content":3644,"level":155},"/v0.1.0/reference/api#trywithtable",[3560,3577],{"id":9905,"title":3647,"titles":9906,"content":3649,"level":155},"/v0.1.0/reference/api#aggc",[3560,3577],{"id":9908,"title":3652,"titles":9909,"content":3654,"level":155},"/v0.1.0/reference/api#tryaggc",[3560,3577],{"id":9911,"title":3657,"titles":9912,"content":3659,"level":155},"/v0.1.0/reference/api#valuemap",[3560,3577],{"id":9914,"title":3662,"titles":9915,"content":99,"level":136},"/v0.1.0/reference/api#query-builders",[3560],{"id":9917,"title":219,"titles":9918,"content":3667,"level":155},"/v0.1.0/reference/api#select",[3560,3662],{"id":9920,"title":3670,"titles":9921,"content":3672,"level":155},"/v0.1.0/reference/api#insert",[3560,3662],{"id":9923,"title":3675,"titles":9924,"content":3677,"level":155},"/v0.1.0/reference/api#update",[3560,3662],{"id":9926,"title":3680,"titles":9927,"content":3682,"level":155},"/v0.1.0/reference/api#delete",[3560,3662],{"id":9929,"title":3685,"titles":9930,"content":3687,"level":155},"/v0.1.0/reference/api#count",[3560,3662],{"id":9932,"title":3690,"titles":9933,"content":99,"level":136},"/v0.1.0/reference/api#builder-methods",[3560],{"id":9935,"title":2665,"titles":9936,"content":3695,"level":155},"/v0.1.0/reference/api#fields",[3560,3690],{"id":9938,"title":3698,"titles":9939,"content":3700,"level":155},"/v0.1.0/reference/api#where",[3560,3690],{"id":9941,"title":3703,"titles":9942,"content":3705,"level":155},"/v0.1.0/reference/api#wherefield",[3560,3690],{"id":9944,"title":3708,"titles":9945,"content":3710,"level":155},"/v0.1.0/reference/api#orderby",[3560,3690],{"id":9947,"title":3713,"titles":9948,"content":3715,"level":155},"/v0.1.0/reference/api#orderbynulls",[3560,3690],{"id":9950,"title":3718,"titles":9951,"content":3720,"level":155},"/v0.1.0/reference/api#orderbyexpr",[3560,3690],{"id":9953,"title":3723,"titles":9954,"content":5734,"level":155},"/v0.1.0/reference/api#limit",[3560,3690],{"id":9956,"title":5737,"titles":9957,"content":5739,"level":155},"/v0.1.0/reference/api#limitparam",[3560,3690],{"id":9959,"title":3728,"titles":9960,"content":5743,"level":155},"/v0.1.0/reference/api#offset",[3560,3690],{"id":9962,"title":5746,"titles":9963,"content":5748,"level":155},"/v0.1.0/reference/api#offsetparam",[3560,3690],{"id":9965,"title":3733,"titles":9966,"content":3735,"level":155},"/v0.1.0/reference/api#set",[3560,3690],{"id":9968,"title":3738,"titles":9969,"content":3740,"level":155},"/v0.1.0/reference/api#values",[3560,3690],{"id":9971,"title":3743,"titles":9972,"content":3745,"level":155},"/v0.1.0/reference/api#returning",[3560,3690],{"id":9974,"title":3748,"titles":9975,"content":3750,"level":155},"/v0.1.0/reference/api#distinct",[3560,3690],{"id":9977,"title":3753,"titles":9978,"content":3755,"level":155},"/v0.1.0/reference/api#distincton",[3560,3690],{"id":9980,"title":3758,"titles":9981,"content":3760,"level":155},"/v0.1.0/reference/api#groupby",[3560,3690],{"id":9983,"title":3763,"titles":9984,"content":3765,"level":155},"/v0.1.0/reference/api#having",[3560,3690],{"id":9986,"title":3768,"titles":9987,"content":3770,"level":155},"/v0.1.0/reference/api#havingagg",[3560,3690],{"id":9989,"title":3773,"titles":9990,"content":3775,"level":155},"/v0.1.0/reference/api#selectexpr",[3560,3690],{"id":9992,"title":3778,"titles":9993,"content":3780,"level":155},"/v0.1.0/reference/api#onconflict",[3560,3690],{"id":9995,"title":3783,"titles":9996,"content":3785,"level":155},"/v0.1.0/reference/api#join-methods",[3560,3690],{"id":9998,"title":3788,"titles":9999,"content":3790,"level":155},"/v0.1.0/reference/api#row-locking",[3560,3690],{"id":10001,"title":3793,"titles":10002,"content":3795,"level":155},"/v0.1.0/reference/api#build",[3560,3690],{"id":10004,"title":3798,"titles":10005,"content":3800,"level":155},"/v0.1.0/reference/api#mustbuild",[3560,3690],{"id":10007,"title":350,"titles":10008,"content":6924,"level":155},"/v0.1.0/reference/api#render",[3560,3690],{"id":10010,"title":3807,"titles":10011,"content":6928,"level":155},"/v0.1.0/reference/api#mustrender",[3560,3690],{"id":10013,"title":3812,"titles":10014,"content":99,"level":136},"/v0.1.0/reference/api#set-operations",[3560],{"id":10016,"title":3816,"titles":10017,"content":3818,"level":155},"/v0.1.0/reference/api#union-unionall",[3560,3812],{"id":10019,"title":3821,"titles":10020,"content":3823,"level":155},"/v0.1.0/reference/api#intersect-intersectall",[3560,3812],{"id":10022,"title":3826,"titles":10023,"content":3828,"level":155},"/v0.1.0/reference/api#except-exceptall",[3560,3812],{"id":10025,"title":3831,"titles":10026,"content":6944,"level":136},"/v0.1.0/reference/api#rendering",[3560],{"id":10028,"title":3844,"titles":10029,"content":99,"level":136},"/v0.1.0/reference/api#expression-functions",[3560],{"id":10031,"title":1668,"titles":10032,"content":3849,"level":155},"/v0.1.0/reference/api#aggregates",[3560,3844],{"id":10034,"title":3852,"titles":10035,"content":3854,"level":155},"/v0.1.0/reference/api#filter-aggregates",[3560,3844],{"id":10037,"title":1251,"titles":10038,"content":3858,"level":155},"/v0.1.0/reference/api#conditions",[3560,3844],{"id":10040,"title":3006,"titles":10041,"content":3862,"level":155},"/v0.1.0/reference/api#subqueries",[3560,3844],{"id":10043,"title":3865,"titles":10044,"content":3867,"level":155},"/v0.1.0/reference/api#case-expression",[3560,3844],{"id":10046,"title":3870,"titles":10047,"content":3872,"level":155},"/v0.1.0/reference/api#null-handling",[3560,3844],{"id":10049,"title":3203,"titles":10050,"content":3876,"level":155},"/v0.1.0/reference/api#math-functions",[3560,3844],{"id":10052,"title":5855,"titles":10053,"content":5857,"level":155},"/v0.1.0/reference/api#string-functions",[3560,3844],{"id":10055,"title":5860,"titles":10056,"content":5862,"level":155},"/v0.1.0/reference/api#date-functions",[3560,3844],{"id":10058,"title":3221,"titles":10059,"content":3880,"level":155},"/v0.1.0/reference/api#type-casting",[3560,3844],{"id":10061,"title":3173,"titles":10062,"content":3884,"level":155},"/v0.1.0/reference/api#window-functions",[3560,3844],{"id":10064,"title":3193,"titles":10065,"content":3888,"level":155},"/v0.1.0/reference/api#window-specification",[3560,3844],{"id":10067,"title":3891,"titles":10068,"content":3893,"level":155},"/v0.1.0/reference/api#windowbuilder-methods",[3560,3844],{"id":10070,"title":3896,"titles":10071,"content":3898,"level":155},"/v0.1.0/reference/api#expression-alias",[3560,3844],{"id":10073,"title":3163,"titles":10074,"content":3902,"level":155},"/v0.1.0/reference/api#having-helpers",[3560,3844],{"id":10076,"title":3905,"titles":10077,"content":99,"level":136},"/v0.1.0/reference/api#types",[3560],{"id":10079,"title":3909,"titles":10080,"content":3911,"level":155},"/v0.1.0/reference/api#queryresult",[3560,3905],{"id":10082,"title":3914,"titles":10083,"content":3916,"level":155},"/v0.1.0/reference/api#direction",[3560,3905],{"id":10085,"title":3919,"titles":10086,"content":3921,"level":155},"/v0.1.0/reference/api#nullsordering",[3560,3905],{"id":10088,"title":3924,"titles":10089,"content":5896,"level":155},"/v0.1.0/reference/api#operation",[3560,3905],{"id":10091,"title":5899,"titles":10092,"content":99,"level":136},"/v0.1.0/reference/api#providers",[3560],{"id":10094,"title":5903,"titles":10095,"content":5905,"level":155},"/v0.1.0/reference/api#renderer-interface",[3560,5899],{"id":10097,"title":5908,"titles":10098,"content":7017,"level":155},"/v0.1.0/reference/api#postgresql-provider",[3560,5899],{"id":10100,"title":5913,"titles":10101,"content":7021,"level":155},"/v0.1.0/reference/api#sqlite-provider",[3560,5899],{"id":10103,"title":5918,"titles":10104,"content":7025,"level":155},"/v0.1.0/reference/api#mysql-provider",[3560,5899],{"id":10106,"title":5923,"titles":10107,"content":7029,"level":155},"/v0.1.0/reference/api#sql-server-provider",[3560,5899],{"id":10109,"title":3929,"titles":10110,"content":3931,"level":107},"/v0.1.0/reference/operators",[],{"id":10112,"title":3929,"titles":10113,"content":3935,"level":107},"/v0.1.0/reference/operators#operators-reference",[],{"id":10115,"title":2959,"titles":10116,"content":3939,"level":136},"/v0.1.0/reference/operators#comparison-operators",[3929],{"id":10118,"title":3341,"titles":10119,"content":3943,"level":155},"/v0.1.0/reference/operators#usage",[3929,2959],{"id":10121,"title":2964,"titles":10122,"content":3947,"level":136},"/v0.1.0/reference/operators#pattern-matching",[3929],{"id":10124,"title":3341,"titles":10125,"content":3951,"level":155},"/v0.1.0/reference/operators#usage-1",[3929,2964],{"id":10127,"title":3954,"titles":10128,"content":3956,"level":136},"/v0.1.0/reference/operators#null-operators",[3929],{"id":10130,"title":3341,"titles":10131,"content":3960,"level":155},"/v0.1.0/reference/operators#usage-2",[3929,3954],{"id":10133,"title":2974,"titles":10134,"content":3964,"level":136},"/v0.1.0/reference/operators#array-operators",[3929],{"id":10136,"title":3341,"titles":10137,"content":3968,"level":155},"/v0.1.0/reference/operators#usage-3",[3929,2974],{"id":10139,"title":3971,"titles":10140,"content":3973,"level":155},"/v0.1.0/reference/operators#with-sqlx",[3929,2974],{"id":10142,"title":3976,"titles":10143,"content":3978,"level":136},"/v0.1.0/reference/operators#subquery-operators",[3929],{"id":10145,"title":3341,"titles":10146,"content":3982,"level":155},"/v0.1.0/reference/operators#usage-4",[3929,3976],{"id":10148,"title":3985,"titles":10149,"content":3987,"level":136},"/v0.1.0/reference/operators#regex-operators",[3929],{"id":10151,"title":3341,"titles":10152,"content":3991,"level":155},"/v0.1.0/reference/operators#usage-5",[3929,3985],{"id":10154,"title":3994,"titles":10155,"content":3996,"level":136},"/v0.1.0/reference/operators#postgresql-array-operators",[3929],{"id":10157,"title":3341,"titles":10158,"content":4000,"level":155},"/v0.1.0/reference/operators#usage-6",[3929,3994],{"id":10160,"title":4003,"titles":10161,"content":4005,"level":136},"/v0.1.0/reference/operators#vector-operators-pgvector",[3929],{"id":10163,"title":3341,"titles":10164,"content":4009,"level":155},"/v0.1.0/reference/operators#usage-7",[3929,4003],{"id":10166,"title":4012,"titles":10167,"content":4014,"level":155},"/v0.1.0/reference/operators#with-pgvector",[3929,4003],{"id":10169,"title":4017,"titles":10170,"content":4019,"level":136},"/v0.1.0/reference/operators#operator-selection-guide",[3929],{"id":10172,"title":3124,"titles":10173,"content":4023,"level":136},"/v0.1.0/reference/operators#aggregate-functions",[3929],{"id":10175,"title":3173,"titles":10176,"content":4027,"level":136},"/v0.1.0/reference/operators#window-functions",[3929],{"id":10178,"title":3198,"titles":10179,"content":4031,"level":136},"/v0.1.0/reference/operators#frame-bounds",[3929],{"id":10181,"title":4034,"titles":10182,"content":4036,"level":136},"/v0.1.0/reference/operators#cast-types",[3929],{"id":10184,"title":1614,"titles":10185,"content":2581,"level":107},"/v0.1.1/overview",[],{"id":10187,"title":1614,"titles":10188,"content":6007,"level":107},"/v0.1.1/overview#overview",[],{"id":10190,"title":1237,"titles":10191,"content":2589,"level":136},"/v0.1.1/overview#architecture",[1614],{"id":10193,"title":2592,"titles":10194,"content":2594,"level":136},"/v0.1.1/overview#philosophy",[1614],{"id":10196,"title":1187,"titles":10197,"content":2598,"level":136},"/v0.1.1/overview#capabilities",[1614],{"id":10199,"title":2601,"titles":10200,"content":99,"level":136},"/v0.1.1/overview#priorities",[1614],{"id":10202,"title":1782,"titles":10203,"content":2606,"level":155},"/v0.1.1/overview#security",[1614,2601],{"id":10205,"title":2609,"titles":10206,"content":6026,"level":155},"/v0.1.1/overview#ergonomics",[1614,2601],{"id":10208,"title":5002,"titles":10209,"content":6030,"level":155},"/v0.1.1/overview#multi-provider-architecture",[1614,2601],{"id":10211,"title":1628,"titles":10212,"content":2620,"level":107},"/v0.1.1/learn/quickstart",[],{"id":10214,"title":1628,"titles":10215,"content":99,"level":107},"/v0.1.1/learn/quickstart#quickstart",[],{"id":10217,"title":2626,"titles":10218,"content":6040,"level":136},"/v0.1.1/learn/quickstart#requirements",[1628],{"id":10220,"title":2631,"titles":10221,"content":2633,"level":136},"/v0.1.1/learn/quickstart#installation",[1628],{"id":10223,"title":2636,"titles":10224,"content":6047,"level":136},"/v0.1.1/learn/quickstart#basic-usage",[1628],{"id":10226,"title":2641,"titles":10227,"content":6051,"level":136},"/v0.1.1/learn/quickstart#whats-happening",[1628],{"id":10229,"title":2646,"titles":10230,"content":6055,"level":136},"/v0.1.1/learn/quickstart#using-with-sqlx",[1628],{"id":10232,"title":2651,"titles":10233,"content":2653,"level":107},"/v0.1.1/learn/concepts",[],{"id":10235,"title":2651,"titles":10236,"content":2657,"level":107},"/v0.1.1/learn/concepts#core-concepts",[],{"id":10238,"title":2660,"titles":10239,"content":2662,"level":136},"/v0.1.1/learn/concepts#tables",[2651],{"id":10241,"title":2665,"titles":10242,"content":2667,"level":136},"/v0.1.1/learn/concepts#fields",[2651],{"id":10244,"title":2670,"titles":10245,"content":2672,"level":155},"/v0.1.1/learn/concepts#field-validation",[2651,2665],{"id":10247,"title":2675,"titles":10248,"content":2677,"level":136},"/v0.1.1/learn/concepts#params",[2651],{"id":10250,"title":2680,"titles":10251,"content":2682,"level":155},"/v0.1.1/learn/concepts#parameter-validation",[2651,2675],{"id":10253,"title":1251,"titles":10254,"content":2686,"level":136},"/v0.1.1/learn/concepts#conditions",[2651],{"id":10256,"title":1727,"titles":10257,"content":2690,"level":155},"/v0.1.1/learn/concepts#operators",[2651,1251],{"id":10259,"title":2693,"titles":10260,"content":2695,"level":155},"/v0.1.1/learn/concepts#combining-conditions",[2651,1251],{"id":10262,"title":2698,"titles":10263,"content":2700,"level":155},"/v0.1.1/learn/concepts#nested-conditions",[2651,1251],{"id":10265,"title":2703,"titles":10266,"content":2705,"level":155},"/v0.1.1/learn/concepts#null-conditions",[2651,1251],{"id":10268,"title":2708,"titles":10269,"content":2710,"level":155},"/v0.1.1/learn/concepts#field-comparisons",[2651,1251],{"id":10271,"title":2713,"titles":10272,"content":2715,"level":136},"/v0.1.1/learn/concepts#builders",[2651],{"id":10274,"title":2718,"titles":10275,"content":6101,"level":155},"/v0.1.1/learn/concepts#fluent-api",[2651,2713],{"id":10277,"title":2723,"titles":10278,"content":6105,"level":155},"/v0.1.1/learn/concepts#build-vs-render",[2651,2713],{"id":10280,"title":2728,"titles":10281,"content":6109,"level":155},"/v0.1.1/learn/concepts#must-variants",[2651,2713],{"id":10283,"title":2733,"titles":10284,"content":2735,"level":136},"/v0.1.1/learn/concepts#try-variants",[2651],{"id":10286,"title":2738,"titles":10287,"content":2740,"level":136},"/v0.1.1/learn/concepts#query-result",[2651],{"id":10289,"title":1237,"titles":10290,"content":2744,"level":107},"/v0.1.1/learn/architecture",[],{"id":10292,"title":1237,"titles":10293,"content":2748,"level":107},"/v0.1.1/learn/architecture#architecture",[],{"id":10295,"title":2751,"titles":10296,"content":2753,"level":136},"/v0.1.1/learn/architecture#pipeline-overview",[1237],{"id":10298,"title":2756,"titles":10299,"content":99,"level":136},"/v0.1.1/learn/architecture#validation-layer",[1237],{"id":10301,"title":1215,"titles":10302,"content":2761,"level":155},"/v0.1.1/learn/architecture#schema-validation",[1237,2756],{"id":10304,"title":2764,"titles":10305,"content":2766,"level":155},"/v0.1.1/learn/architecture#identifier-validation",[1237,2756],{"id":10307,"title":2769,"titles":10308,"content":2771,"level":155},"/v0.1.1/learn/architecture#alias-restrictions",[1237,2756],{"id":10310,"title":2774,"titles":10311,"content":5107,"level":136},"/v0.1.1/learn/architecture#ast-structure",[1237],{"id":10313,"title":2779,"titles":10314,"content":2781,"level":155},"/v0.1.1/learn/architecture#internal-types",[1237,2774],{"id":10316,"title":2784,"titles":10317,"content":2786,"level":155},"/v0.1.1/learn/architecture#condition-types",[1237,2774],{"id":10319,"title":2789,"titles":10320,"content":2791,"level":136},"/v0.1.1/learn/architecture#render-engine",[1237],{"id":10322,"title":2794,"titles":10323,"content":2796,"level":155},"/v0.1.1/learn/architecture#identifier-quoting",[1237,2789],{"id":10325,"title":2799,"titles":10326,"content":2801,"level":155},"/v0.1.1/learn/architecture#parameter-placeholders",[1237,2789],{"id":10328,"title":2804,"titles":10329,"content":2806,"level":155},"/v0.1.1/learn/architecture#parameter-namespacing",[1237,2789],{"id":10331,"title":5128,"titles":10332,"content":5130,"level":136},"/v0.1.1/learn/architecture#provider-architecture",[1237],{"id":10334,"title":5133,"titles":10335,"content":6164,"level":155},"/v0.1.1/learn/architecture#available-providers",[1237,5128],{"id":10337,"title":3341,"titles":10338,"content":6168,"level":155},"/v0.1.1/learn/architecture#usage",[1237,5128],{"id":10340,"title":5142,"titles":10341,"content":5144,"level":155},"/v0.1.1/learn/architecture#dialect-differences",[1237,5128],{"id":10343,"title":2809,"titles":10344,"content":6175,"level":136},"/v0.1.1/learn/architecture#file-structure",[1237],{"id":10346,"title":2814,"titles":10347,"content":2816,"level":136},"/v0.1.1/learn/architecture#security-layers",[1237],{"id":10349,"title":2819,"titles":10350,"content":99,"level":136},"/v0.1.1/learn/architecture#extension-points",[1237],{"id":10352,"title":2823,"titles":10353,"content":2825,"level":155},"/v0.1.1/learn/architecture#custom-expressions",[1237,2819],{"id":10355,"title":2828,"titles":10356,"content":2830,"level":155},"/v0.1.1/learn/architecture#compound-queries",[1237,2819],{"id":10358,"title":2833,"titles":10359,"content":6191,"level":155},"/v0.1.1/learn/architecture#direct-ast-access",[1237,2819],{"id":10361,"title":1215,"titles":10362,"content":2839,"level":107},"/v0.1.1/guides/schema-validation",[],{"id":10364,"title":1215,"titles":10365,"content":2843,"level":107},"/v0.1.1/guides/schema-validation#schema-validation",[],{"id":10367,"title":2846,"titles":10368,"content":2848,"level":136},"/v0.1.1/guides/schema-validation#defining-a-schema",[1215],{"id":10370,"title":2851,"titles":10371,"content":2853,"level":136},"/v0.1.1/guides/schema-validation#creating-an-instance",[1215],{"id":10373,"title":2856,"titles":10374,"content":99,"level":136},"/v0.1.1/guides/schema-validation#validation-behavior",[1215],{"id":10376,"title":2860,"titles":10377,"content":2862,"level":155},"/v0.1.1/guides/schema-validation#table-validation",[1215,2856],{"id":10379,"title":2670,"titles":10380,"content":2866,"level":155},"/v0.1.1/guides/schema-validation#field-validation",[1215,2856],{"id":10382,"title":2680,"titles":10383,"content":2870,"level":155},"/v0.1.1/guides/schema-validation#parameter-validation",[1215,2856],{"id":10385,"title":2873,"titles":10386,"content":2875,"level":136},"/v0.1.1/guides/schema-validation#panic-vs-error",[1215],{"id":10388,"title":2733,"titles":10389,"content":2879,"level":155},"/v0.1.1/guides/schema-validation#try-variants",[1215,2873],{"id":10391,"title":2882,"titles":10392,"content":2884,"level":155},"/v0.1.1/guides/schema-validation#when-to-use-each",[1215,2873],{"id":10394,"title":2887,"titles":10395,"content":2889,"level":136},"/v0.1.1/guides/schema-validation#table-aliases",[1215],{"id":10397,"title":2769,"titles":10398,"content":2893,"level":155},"/v0.1.1/guides/schema-validation#alias-restrictions",[1215,2887],{"id":10400,"title":2896,"titles":10401,"content":2898,"level":155},"/v0.1.1/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":10403,"title":2901,"titles":10404,"content":99,"level":136},"/v0.1.1/guides/schema-validation#schema-organization",[1215],{"id":10406,"title":2905,"titles":10407,"content":6240,"level":155},"/v0.1.1/guides/schema-validation#single-schema-instance",[1215,2901],{"id":10409,"title":2910,"titles":10410,"content":2912,"level":155},"/v0.1.1/guides/schema-validation#multiple-schemas",[1215,2901],{"id":10412,"title":2915,"titles":10413,"content":99,"level":136},"/v0.1.1/guides/schema-validation#dynamic-queries",[1215],{"id":10415,"title":2919,"titles":10416,"content":6250,"level":155},"/v0.1.1/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":10418,"title":2924,"titles":10419,"content":2926,"level":155},"/v0.1.1/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":10421,"title":2929,"titles":10422,"content":99,"level":136},"/v0.1.1/guides/schema-validation#validation-errors",[1215],{"id":10424,"title":2933,"titles":10425,"content":2935,"level":155},"/v0.1.1/guides/schema-validation#error-types",[1215,2929],{"id":10427,"title":2938,"titles":10428,"content":6263,"level":155},"/v0.1.1/guides/schema-validation#handling-errors",[1215,2929],{"id":10430,"title":1251,"titles":10431,"content":2944,"level":107},"/v0.1.1/guides/conditions",[],{"id":10433,"title":1251,"titles":10434,"content":2948,"level":107},"/v0.1.1/guides/conditions#conditions",[],{"id":10436,"title":2951,"titles":10437,"content":2953,"level":136},"/v0.1.1/guides/conditions#basic-conditions",[1251],{"id":10439,"title":1727,"titles":10440,"content":99,"level":136},"/v0.1.1/guides/conditions#operators",[1251],{"id":10442,"title":2959,"titles":10443,"content":2961,"level":155},"/v0.1.1/guides/conditions#comparison-operators",[1251,1727],{"id":10445,"title":2964,"titles":10446,"content":2966,"level":155},"/v0.1.1/guides/conditions#pattern-matching",[1251,1727],{"id":10448,"title":2969,"titles":10449,"content":2971,"level":155},"/v0.1.1/guides/conditions#null-checks",[1251,1727],{"id":10451,"title":2974,"titles":10452,"content":2976,"level":155},"/v0.1.1/guides/conditions#array-operators",[1251,1727],{"id":10454,"title":2693,"titles":10455,"content":99,"level":136},"/v0.1.1/guides/conditions#combining-conditions",[1251],{"id":10457,"title":2982,"titles":10458,"content":2984,"level":155},"/v0.1.1/guides/conditions#and",[1251,2693],{"id":10460,"title":2987,"titles":10461,"content":2989,"level":155},"/v0.1.1/guides/conditions#or",[1251,2693],{"id":10463,"title":2992,"titles":10464,"content":2994,"level":155},"/v0.1.1/guides/conditions#nested-logic",[1251,2693],{"id":10466,"title":2997,"titles":10467,"content":2999,"level":136},"/v0.1.1/guides/conditions#between",[1251],{"id":10469,"title":2708,"titles":10470,"content":3003,"level":136},"/v0.1.1/guides/conditions#field-comparisons",[1251],{"id":10472,"title":3006,"titles":10473,"content":99,"level":136},"/v0.1.1/guides/conditions#subqueries",[1251],{"id":10475,"title":3010,"titles":10476,"content":3012,"level":155},"/v0.1.1/guides/conditions#in-subquery",[1251,3006],{"id":10478,"title":3015,"titles":10479,"content":3017,"level":155},"/v0.1.1/guides/conditions#not-in-subquery",[1251,3006],{"id":10481,"title":3020,"titles":10482,"content":3022,"level":155},"/v0.1.1/guides/conditions#exists",[1251,3006],{"id":10484,"title":3025,"titles":10485,"content":3027,"level":155},"/v0.1.1/guides/conditions#not-exists",[1251,3006],{"id":10487,"title":2804,"titles":10488,"content":3031,"level":155},"/v0.1.1/guides/conditions#parameter-namespacing",[1251,3006],{"id":10490,"title":3034,"titles":10491,"content":3036,"level":136},"/v0.1.1/guides/conditions#multiple-where-clauses",[1251],{"id":10493,"title":3039,"titles":10494,"content":3041,"level":136},"/v0.1.1/guides/conditions#wherefield-shorthand",[1251],{"id":10496,"title":3044,"titles":10497,"content":3046,"level":136},"/v0.1.1/guides/conditions#building-conditions-dynamically",[1251],{"id":10499,"title":1265,"titles":10500,"content":3050,"level":107},"/v0.1.1/guides/joins",[],{"id":10502,"title":1265,"titles":10503,"content":3054,"level":107},"/v0.1.1/guides/joins#joins",[],{"id":10505,"title":3057,"titles":10506,"content":3059,"level":136},"/v0.1.1/guides/joins#join-types",[1265],{"id":10508,"title":3062,"titles":10509,"content":3064,"level":136},"/v0.1.1/guides/joins#basic-join",[1265],{"id":10511,"title":2887,"titles":10512,"content":3068,"level":136},"/v0.1.1/guides/joins#table-aliases",[1265],{"id":10514,"title":3071,"titles":10515,"content":3073,"level":136},"/v0.1.1/guides/joins#left-join",[1265],{"id":10517,"title":3076,"titles":10518,"content":3078,"level":136},"/v0.1.1/guides/joins#right-join",[1265],{"id":10520,"title":3081,"titles":10521,"content":3083,"level":136},"/v0.1.1/guides/joins#full-outer-join",[1265],{"id":10523,"title":3086,"titles":10524,"content":3088,"level":136},"/v0.1.1/guides/joins#cross-join",[1265],{"id":10526,"title":3091,"titles":10527,"content":3093,"level":136},"/v0.1.1/guides/joins#multiple-joins",[1265],{"id":10529,"title":3096,"titles":10530,"content":3098,"level":136},"/v0.1.1/guides/joins#complex-on-conditions",[1265],{"id":10532,"title":3101,"titles":10533,"content":3103,"level":136},"/v0.1.1/guides/joins#self-joins",[1265],{"id":10535,"title":3106,"titles":10536,"content":3108,"level":136},"/v0.1.1/guides/joins#joins-with-count",[1265],{"id":10538,"title":3111,"titles":10539,"content":3113,"level":136},"/v0.1.1/guides/joins#join-validation",[1265],{"id":10541,"title":1668,"titles":10542,"content":3117,"level":107},"/v0.1.1/guides/aggregates",[],{"id":10544,"title":1668,"titles":10545,"content":3121,"level":107},"/v0.1.1/guides/aggregates#aggregates",[],{"id":10547,"title":3124,"titles":10548,"content":99,"level":136},"/v0.1.1/guides/aggregates#aggregate-functions",[1668],{"id":10550,"title":3128,"titles":10551,"content":3130,"level":155},"/v0.1.1/guides/aggregates#basic-aggregates",[1668,3124],{"id":10553,"title":3133,"titles":10554,"content":3135,"level":155},"/v0.1.1/guides/aggregates#using-aggregates",[1668,3124],{"id":10556,"title":3138,"titles":10557,"content":3140,"level":155},"/v0.1.1/guides/aggregates#aliases",[1668,3124],{"id":10559,"title":3143,"titles":10560,"content":3145,"level":136},"/v0.1.1/guides/aggregates#group-by",[1668],{"id":10562,"title":3148,"titles":10563,"content":3150,"level":136},"/v0.1.1/guides/aggregates#having",[1668],{"id":10565,"title":3153,"titles":10566,"content":3155,"level":155},"/v0.1.1/guides/aggregates#simple-having",[1668,3148],{"id":10568,"title":3158,"titles":10569,"content":3160,"level":155},"/v0.1.1/guides/aggregates#aggregate-having",[1668,3148],{"id":10571,"title":3163,"titles":10572,"content":3165,"level":155},"/v0.1.1/guides/aggregates#having-helpers",[1668,3148],{"id":10574,"title":3168,"titles":10575,"content":3170,"level":136},"/v0.1.1/guides/aggregates#filter-clause",[1668],{"id":10577,"title":3173,"titles":10578,"content":3175,"level":136},"/v0.1.1/guides/aggregates#window-functions",[1668],{"id":10580,"title":3178,"titles":10581,"content":3180,"level":155},"/v0.1.1/guides/aggregates#basic-window-functions",[1668,3173],{"id":10583,"title":3183,"titles":10584,"content":3185,"level":155},"/v0.1.1/guides/aggregates#window-function-types",[1668,3173],{"id":10586,"title":3188,"titles":10587,"content":3190,"level":155},"/v0.1.1/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":10589,"title":3193,"titles":10590,"content":3195,"level":155},"/v0.1.1/guides/aggregates#window-specification",[1668,3173],{"id":10592,"title":3198,"titles":10593,"content":3200,"level":155},"/v0.1.1/guides/aggregates#frame-bounds",[1668,3173],{"id":10595,"title":3203,"titles":10596,"content":99,"level":136},"/v0.1.1/guides/aggregates#math-functions",[1668],{"id":10598,"title":3207,"titles":10599,"content":3209,"level":155},"/v0.1.1/guides/aggregates#available-functions",[1668,3203],{"id":10601,"title":3212,"titles":10602,"content":3214,"level":155},"/v0.1.1/guides/aggregates#example",[1668,3203],{"id":10604,"title":1270,"titles":10605,"content":3218,"level":136},"/v0.1.1/guides/aggregates#case-expressions",[1668],{"id":10607,"title":3221,"titles":10608,"content":3223,"level":136},"/v0.1.1/guides/aggregates#type-casting",[1668],{"id":10610,"title":3226,"titles":10611,"content":3228,"level":136},"/v0.1.1/guides/aggregates#coalesce-and-nullif",[1668],{"id":10613,"title":1675,"titles":10614,"content":3232,"level":107},"/v0.1.1/guides/testing",[],{"id":10616,"title":1675,"titles":10617,"content":3236,"level":107},"/v0.1.1/guides/testing#testing",[],{"id":10619,"title":3239,"titles":10620,"content":99,"level":136},"/v0.1.1/guides/testing#testing-query-output",[1675],{"id":10622,"title":3243,"titles":10623,"content":6459,"level":155},"/v0.1.1/guides/testing#basic-output-testing",[1675,3239],{"id":10625,"title":3248,"titles":10626,"content":3250,"level":155},"/v0.1.1/guides/testing#test-instance-setup",[1675,3239],{"id":10628,"title":3253,"titles":10629,"content":99,"level":136},"/v0.1.1/guides/testing#table-driven-tests",[1675],{"id":10631,"title":3257,"titles":10632,"content":6469,"level":155},"/v0.1.1/guides/testing#testing-multiple-queries",[1675,3253],{"id":10634,"title":3262,"titles":10635,"content":99,"level":136},"/v0.1.1/guides/testing#testing-validation",[1675],{"id":10637,"title":3266,"titles":10638,"content":3268,"level":155},"/v0.1.1/guides/testing#testing-invalid-input",[1675,3262],{"id":10640,"title":3271,"titles":10641,"content":3273,"level":155},"/v0.1.1/guides/testing#testing-try-variants",[1675,3262],{"id":10643,"title":3276,"titles":10644,"content":99,"level":136},"/v0.1.1/guides/testing#testing-error-cases",[1675],{"id":10646,"title":3280,"titles":10647,"content":6485,"level":155},"/v0.1.1/guides/testing#builder-errors",[1675,3276],{"id":10649,"title":3285,"titles":10650,"content":99,"level":136},"/v0.1.1/guides/testing#testing-complex-queries",[1675],{"id":10652,"title":3289,"titles":10653,"content":6492,"level":155},"/v0.1.1/guides/testing#join-tests",[1675,3285],{"id":10655,"title":3294,"titles":10656,"content":6496,"level":155},"/v0.1.1/guides/testing#subquery-tests",[1675,3285],{"id":10658,"title":3299,"titles":10659,"content":3301,"level":136},"/v0.1.1/guides/testing#snapshot-testing",[1675],{"id":10661,"title":3304,"titles":10662,"content":99,"level":136},"/v0.1.1/guides/testing#best-practices",[1675],{"id":10664,"title":3308,"titles":10665,"content":3310,"level":155},"/v0.1.1/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":10667,"title":3313,"titles":10668,"content":3315,"level":155},"/v0.1.1/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":10670,"title":3318,"titles":10671,"content":3320,"level":155},"/v0.1.1/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":10673,"title":3323,"titles":10674,"content":6515,"level":155},"/v0.1.1/guides/testing#_4-test-edge-cases",[1675,3304],{"id":10676,"title":1688,"titles":10677,"content":3329,"level":107},"/v0.1.1/cookbook/pagination",[],{"id":10679,"title":1688,"titles":10680,"content":3333,"level":107},"/v0.1.1/cookbook/pagination#pagination",[],{"id":10682,"title":3336,"titles":10683,"content":6525,"level":136},"/v0.1.1/cookbook/pagination#offset-pagination",[1688],{"id":10685,"title":3341,"titles":10686,"content":3343,"level":155},"/v0.1.1/cookbook/pagination#usage",[1688,3336],{"id":10688,"title":3346,"titles":10689,"content":6532,"level":155},"/v0.1.1/cookbook/pagination#with-total-count",[1688,3336],{"id":10691,"title":3351,"titles":10692,"content":3353,"level":155},"/v0.1.1/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":10694,"title":3356,"titles":10695,"content":6539,"level":136},"/v0.1.1/cookbook/pagination#cursor-pagination",[1688],{"id":10697,"title":3341,"titles":10698,"content":3362,"level":155},"/v0.1.1/cookbook/pagination#usage-1",[1688,3356],{"id":10700,"title":3365,"titles":10701,"content":6546,"level":155},"/v0.1.1/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":10703,"title":3370,"titles":10704,"content":6550,"level":155},"/v0.1.1/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":10706,"title":3375,"titles":10707,"content":6554,"level":136},"/v0.1.1/cookbook/pagination#filtering-with-pagination",[1688],{"id":10709,"title":3380,"titles":10710,"content":6558,"level":136},"/v0.1.1/cookbook/pagination#pagination-with-joins",[1688],{"id":10712,"title":3304,"titles":10713,"content":99,"level":136},"/v0.1.1/cookbook/pagination#best-practices",[1688],{"id":10715,"title":3388,"titles":10716,"content":6565,"level":155},"/v0.1.1/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":10718,"title":3393,"titles":10719,"content":3395,"level":155},"/v0.1.1/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":10721,"title":3398,"titles":10722,"content":3400,"level":155},"/v0.1.1/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":10724,"title":3403,"titles":10725,"content":3405,"level":155},"/v0.1.1/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":10727,"title":1695,"titles":10728,"content":3409,"level":107},"/v0.1.1/cookbook/vector-search",[],{"id":10730,"title":1695,"titles":10731,"content":3413,"level":107},"/v0.1.1/cookbook/vector-search#vector-search",[],{"id":10733,"title":3416,"titles":10734,"content":3418,"level":136},"/v0.1.1/cookbook/vector-search#schema-setup",[1695],{"id":10736,"title":3421,"titles":10737,"content":3423,"level":136},"/v0.1.1/cookbook/vector-search#distance-operators",[1695],{"id":10739,"title":3426,"titles":10740,"content":3428,"level":136},"/v0.1.1/cookbook/vector-search#basic-similarity-search",[1695],{"id":10742,"title":3431,"titles":10743,"content":3433,"level":155},"/v0.1.1/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":10745,"title":3436,"titles":10746,"content":3438,"level":136},"/v0.1.1/cookbook/vector-search#cosine-similarity",[1695],{"id":10748,"title":3441,"titles":10749,"content":3443,"level":136},"/v0.1.1/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":10751,"title":3446,"titles":10752,"content":3448,"level":136},"/v0.1.1/cookbook/vector-search#filtered-vector-search",[1695],{"id":10754,"title":3451,"titles":10755,"content":3453,"level":136},"/v0.1.1/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":10757,"title":3456,"titles":10758,"content":3458,"level":136},"/v0.1.1/cookbook/vector-search#hybrid-search",[1695],{"id":10760,"title":3461,"titles":10761,"content":3463,"level":136},"/v0.1.1/cookbook/vector-search#multi-vector-search",[1695],{"id":10763,"title":3466,"titles":10764,"content":3468,"level":136},"/v0.1.1/cookbook/vector-search#indexing-recommendations",[1695],{"id":10766,"title":3304,"titles":10767,"content":99,"level":136},"/v0.1.1/cookbook/vector-search#best-practices",[1695],{"id":10769,"title":3474,"titles":10770,"content":3476,"level":155},"/v0.1.1/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":10772,"title":3479,"titles":10773,"content":3481,"level":155},"/v0.1.1/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":10775,"title":3484,"titles":10776,"content":3486,"level":155},"/v0.1.1/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":10778,"title":1702,"titles":10779,"content":3490,"level":107},"/v0.1.1/cookbook/upserts",[],{"id":10781,"title":1702,"titles":10782,"content":3494,"level":107},"/v0.1.1/cookbook/upserts#upserts",[],{"id":10784,"title":3497,"titles":10785,"content":6635,"level":136},"/v0.1.1/cookbook/upserts#basic-upsert",[1702],{"id":10787,"title":3502,"titles":10788,"content":6639,"level":136},"/v0.1.1/cookbook/upserts#do-nothing",[1702],{"id":10790,"title":3507,"titles":10791,"content":6643,"level":136},"/v0.1.1/cookbook/upserts#multi-column-conflict",[1702],{"id":10793,"title":3512,"titles":10794,"content":6647,"level":136},"/v0.1.1/cookbook/upserts#returning-with-upsert",[1702],{"id":10796,"title":3517,"titles":10797,"content":6651,"level":136},"/v0.1.1/cookbook/upserts#batch-upsert",[1702],{"id":10799,"title":3522,"titles":10800,"content":6655,"level":136},"/v0.1.1/cookbook/upserts#conditional-upsert",[1702],{"id":10802,"title":3527,"titles":10803,"content":6659,"level":136},"/v0.1.1/cookbook/upserts#sync-pattern",[1702],{"id":10805,"title":3532,"titles":10806,"content":6663,"level":136},"/v0.1.1/cookbook/upserts#upsert-with-timestamps",[1702],{"id":10808,"title":3304,"titles":10809,"content":99,"level":136},"/v0.1.1/cookbook/upserts#best-practices",[1702],{"id":10811,"title":3540,"titles":10812,"content":3542,"level":155},"/v0.1.1/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":10814,"title":3545,"titles":10815,"content":3547,"level":155},"/v0.1.1/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":10817,"title":3550,"titles":10818,"content":3552,"level":155},"/v0.1.1/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":10820,"title":3555,"titles":10821,"content":3557,"level":155},"/v0.1.1/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":10823,"title":1709,"titles":10824,"content":6682,"level":107},"/v0.1.1/cookbook/orm-foundation",[],{"id":10826,"title":1709,"titles":10827,"content":6686,"level":107},"/v0.1.1/cookbook/orm-foundation#orm-foundation",[],{"id":10829,"title":6689,"titles":10830,"content":6691,"level":136},"/v0.1.1/cookbook/orm-foundation#the-result",[1709],{"id":10832,"title":6694,"titles":10833,"content":6696,"level":136},"/v0.1.1/cookbook/orm-foundation#the-architecture",[1709],{"id":10835,"title":6699,"titles":10836,"content":6701,"level":136},"/v0.1.1/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":10838,"title":6704,"titles":10839,"content":6706,"level":155},"/v0.1.1/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":10841,"title":6709,"titles":10842,"content":6711,"level":155},"/v0.1.1/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":10844,"title":6714,"titles":10845,"content":6716,"level":155},"/v0.1.1/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":10847,"title":6719,"titles":10848,"content":6721,"level":155},"/v0.1.1/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":10850,"title":6724,"titles":10851,"content":6726,"level":136},"/v0.1.1/cookbook/orm-foundation#the-security-model",[1709],{"id":10853,"title":6729,"titles":10854,"content":6731,"level":136},"/v0.1.1/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":10856,"title":6734,"titles":10857,"content":6736,"level":136},"/v0.1.1/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":10859,"title":6739,"titles":10860,"content":6741,"level":155},"/v0.1.1/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":10862,"title":6744,"titles":10863,"content":6746,"level":155},"/v0.1.1/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":10865,"title":6749,"titles":10866,"content":6751,"level":155},"/v0.1.1/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":10868,"title":6754,"titles":10869,"content":6756,"level":155},"/v0.1.1/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":10871,"title":6759,"titles":10872,"content":6761,"level":136},"/v0.1.1/cookbook/orm-foundation#see-also",[1709],{"id":10874,"title":3560,"titles":10875,"content":3562,"level":107},"/v0.1.1/reference/api",[],{"id":10877,"title":3560,"titles":10878,"content":3566,"level":107},"/v0.1.1/reference/api#api-reference",[],{"id":10880,"title":3569,"titles":10881,"content":99,"level":136},"/v0.1.1/reference/api#instance-creation",[3560],{"id":10883,"title":856,"titles":10884,"content":3574,"level":155},"/v0.1.1/reference/api#newfromdbml",[3560,3569],{"id":10886,"title":3577,"titles":10887,"content":99,"level":136},"/v0.1.1/reference/api#instance-methods",[3560],{"id":10889,"title":119,"titles":10890,"content":3582,"level":155},"/v0.1.1/reference/api#t",[3560,3577],{"id":10892,"title":3585,"titles":10893,"content":3587,"level":155},"/v0.1.1/reference/api#tryt",[3560,3577],{"id":10895,"title":169,"titles":10896,"content":3591,"level":155},"/v0.1.1/reference/api#f",[3560,3577],{"id":10898,"title":3594,"titles":10899,"content":3596,"level":155},"/v0.1.1/reference/api#tryf",[3560,3577],{"id":10901,"title":316,"titles":10902,"content":3600,"level":155},"/v0.1.1/reference/api#p",[3560,3577],{"id":10904,"title":3603,"titles":10905,"content":3605,"level":155},"/v0.1.1/reference/api#tryp",[3560,3577],{"id":10907,"title":284,"titles":10908,"content":3609,"level":155},"/v0.1.1/reference/api#c",[3560,3577],{"id":10910,"title":3612,"titles":10911,"content":3614,"level":155},"/v0.1.1/reference/api#tryc",[3560,3577],{"id":10913,"title":3617,"titles":10914,"content":3619,"level":155},"/v0.1.1/reference/api#and",[3560,3577],{"id":10916,"title":3622,"titles":10917,"content":3624,"level":155},"/v0.1.1/reference/api#or",[3560,3577],{"id":10919,"title":3627,"titles":10920,"content":3629,"level":155},"/v0.1.1/reference/api#null",[3560,3577],{"id":10922,"title":3632,"titles":10923,"content":3634,"level":155},"/v0.1.1/reference/api#notnull",[3560,3577],{"id":10925,"title":3637,"titles":10926,"content":3639,"level":155},"/v0.1.1/reference/api#withtable",[3560,3577],{"id":10928,"title":3642,"titles":10929,"content":3644,"level":155},"/v0.1.1/reference/api#trywithtable",[3560,3577],{"id":10931,"title":3647,"titles":10932,"content":3649,"level":155},"/v0.1.1/reference/api#aggc",[3560,3577],{"id":10934,"title":3652,"titles":10935,"content":3654,"level":155},"/v0.1.1/reference/api#tryaggc",[3560,3577],{"id":10937,"title":3657,"titles":10938,"content":3659,"level":155},"/v0.1.1/reference/api#valuemap",[3560,3577],{"id":10940,"title":3662,"titles":10941,"content":99,"level":136},"/v0.1.1/reference/api#query-builders",[3560],{"id":10943,"title":219,"titles":10944,"content":3667,"level":155},"/v0.1.1/reference/api#select",[3560,3662],{"id":10946,"title":3670,"titles":10947,"content":3672,"level":155},"/v0.1.1/reference/api#insert",[3560,3662],{"id":10949,"title":3675,"titles":10950,"content":3677,"level":155},"/v0.1.1/reference/api#update",[3560,3662],{"id":10952,"title":3680,"titles":10953,"content":3682,"level":155},"/v0.1.1/reference/api#delete",[3560,3662],{"id":10955,"title":3685,"titles":10956,"content":3687,"level":155},"/v0.1.1/reference/api#count",[3560,3662],{"id":10958,"title":3690,"titles":10959,"content":99,"level":136},"/v0.1.1/reference/api#builder-methods",[3560],{"id":10961,"title":2665,"titles":10962,"content":3695,"level":155},"/v0.1.1/reference/api#fields",[3560,3690],{"id":10964,"title":3698,"titles":10965,"content":3700,"level":155},"/v0.1.1/reference/api#where",[3560,3690],{"id":10967,"title":3703,"titles":10968,"content":3705,"level":155},"/v0.1.1/reference/api#wherefield",[3560,3690],{"id":10970,"title":3708,"titles":10971,"content":3710,"level":155},"/v0.1.1/reference/api#orderby",[3560,3690],{"id":10973,"title":3713,"titles":10974,"content":3715,"level":155},"/v0.1.1/reference/api#orderbynulls",[3560,3690],{"id":10976,"title":3718,"titles":10977,"content":3720,"level":155},"/v0.1.1/reference/api#orderbyexpr",[3560,3690],{"id":10979,"title":3723,"titles":10980,"content":5734,"level":155},"/v0.1.1/reference/api#limit",[3560,3690],{"id":10982,"title":5737,"titles":10983,"content":5739,"level":155},"/v0.1.1/reference/api#limitparam",[3560,3690],{"id":10985,"title":3728,"titles":10986,"content":5743,"level":155},"/v0.1.1/reference/api#offset",[3560,3690],{"id":10988,"title":5746,"titles":10989,"content":5748,"level":155},"/v0.1.1/reference/api#offsetparam",[3560,3690],{"id":10991,"title":3733,"titles":10992,"content":3735,"level":155},"/v0.1.1/reference/api#set",[3560,3690],{"id":10994,"title":3738,"titles":10995,"content":3740,"level":155},"/v0.1.1/reference/api#values",[3560,3690],{"id":10997,"title":3743,"titles":10998,"content":3745,"level":155},"/v0.1.1/reference/api#returning",[3560,3690],{"id":11000,"title":3748,"titles":11001,"content":3750,"level":155},"/v0.1.1/reference/api#distinct",[3560,3690],{"id":11003,"title":3753,"titles":11004,"content":3755,"level":155},"/v0.1.1/reference/api#distincton",[3560,3690],{"id":11006,"title":3758,"titles":11007,"content":3760,"level":155},"/v0.1.1/reference/api#groupby",[3560,3690],{"id":11009,"title":3763,"titles":11010,"content":3765,"level":155},"/v0.1.1/reference/api#having",[3560,3690],{"id":11012,"title":3768,"titles":11013,"content":3770,"level":155},"/v0.1.1/reference/api#havingagg",[3560,3690],{"id":11015,"title":3773,"titles":11016,"content":3775,"level":155},"/v0.1.1/reference/api#selectexpr",[3560,3690],{"id":11018,"title":3778,"titles":11019,"content":3780,"level":155},"/v0.1.1/reference/api#onconflict",[3560,3690],{"id":11021,"title":3783,"titles":11022,"content":3785,"level":155},"/v0.1.1/reference/api#join-methods",[3560,3690],{"id":11024,"title":3788,"titles":11025,"content":3790,"level":155},"/v0.1.1/reference/api#row-locking",[3560,3690],{"id":11027,"title":3793,"titles":11028,"content":3795,"level":155},"/v0.1.1/reference/api#build",[3560,3690],{"id":11030,"title":3798,"titles":11031,"content":3800,"level":155},"/v0.1.1/reference/api#mustbuild",[3560,3690],{"id":11033,"title":350,"titles":11034,"content":6924,"level":155},"/v0.1.1/reference/api#render",[3560,3690],{"id":11036,"title":3807,"titles":11037,"content":6928,"level":155},"/v0.1.1/reference/api#mustrender",[3560,3690],{"id":11039,"title":3812,"titles":11040,"content":99,"level":136},"/v0.1.1/reference/api#set-operations",[3560],{"id":11042,"title":3816,"titles":11043,"content":3818,"level":155},"/v0.1.1/reference/api#union-unionall",[3560,3812],{"id":11045,"title":3821,"titles":11046,"content":3823,"level":155},"/v0.1.1/reference/api#intersect-intersectall",[3560,3812],{"id":11048,"title":3826,"titles":11049,"content":3828,"level":155},"/v0.1.1/reference/api#except-exceptall",[3560,3812],{"id":11051,"title":3831,"titles":11052,"content":6944,"level":136},"/v0.1.1/reference/api#rendering",[3560],{"id":11054,"title":3844,"titles":11055,"content":99,"level":136},"/v0.1.1/reference/api#expression-functions",[3560],{"id":11057,"title":1668,"titles":11058,"content":3849,"level":155},"/v0.1.1/reference/api#aggregates",[3560,3844],{"id":11060,"title":3852,"titles":11061,"content":3854,"level":155},"/v0.1.1/reference/api#filter-aggregates",[3560,3844],{"id":11063,"title":1251,"titles":11064,"content":3858,"level":155},"/v0.1.1/reference/api#conditions",[3560,3844],{"id":11066,"title":3006,"titles":11067,"content":3862,"level":155},"/v0.1.1/reference/api#subqueries",[3560,3844],{"id":11069,"title":3865,"titles":11070,"content":3867,"level":155},"/v0.1.1/reference/api#case-expression",[3560,3844],{"id":11072,"title":3870,"titles":11073,"content":3872,"level":155},"/v0.1.1/reference/api#null-handling",[3560,3844],{"id":11075,"title":3203,"titles":11076,"content":3876,"level":155},"/v0.1.1/reference/api#math-functions",[3560,3844],{"id":11078,"title":5855,"titles":11079,"content":5857,"level":155},"/v0.1.1/reference/api#string-functions",[3560,3844],{"id":11081,"title":5860,"titles":11082,"content":5862,"level":155},"/v0.1.1/reference/api#date-functions",[3560,3844],{"id":11084,"title":3221,"titles":11085,"content":3880,"level":155},"/v0.1.1/reference/api#type-casting",[3560,3844],{"id":11087,"title":3173,"titles":11088,"content":3884,"level":155},"/v0.1.1/reference/api#window-functions",[3560,3844],{"id":11090,"title":3193,"titles":11091,"content":3888,"level":155},"/v0.1.1/reference/api#window-specification",[3560,3844],{"id":11093,"title":3891,"titles":11094,"content":3893,"level":155},"/v0.1.1/reference/api#windowbuilder-methods",[3560,3844],{"id":11096,"title":3896,"titles":11097,"content":3898,"level":155},"/v0.1.1/reference/api#expression-alias",[3560,3844],{"id":11099,"title":3163,"titles":11100,"content":3902,"level":155},"/v0.1.1/reference/api#having-helpers",[3560,3844],{"id":11102,"title":3905,"titles":11103,"content":99,"level":136},"/v0.1.1/reference/api#types",[3560],{"id":11105,"title":3909,"titles":11106,"content":3911,"level":155},"/v0.1.1/reference/api#queryresult",[3560,3905],{"id":11108,"title":3914,"titles":11109,"content":3916,"level":155},"/v0.1.1/reference/api#direction",[3560,3905],{"id":11111,"title":3919,"titles":11112,"content":3921,"level":155},"/v0.1.1/reference/api#nullsordering",[3560,3905],{"id":11114,"title":3924,"titles":11115,"content":5896,"level":155},"/v0.1.1/reference/api#operation",[3560,3905],{"id":11117,"title":5899,"titles":11118,"content":99,"level":136},"/v0.1.1/reference/api#providers",[3560],{"id":11120,"title":5903,"titles":11121,"content":5905,"level":155},"/v0.1.1/reference/api#renderer-interface",[3560,5899],{"id":11123,"title":5908,"titles":11124,"content":7017,"level":155},"/v0.1.1/reference/api#postgresql-provider",[3560,5899],{"id":11126,"title":5913,"titles":11127,"content":7021,"level":155},"/v0.1.1/reference/api#sqlite-provider",[3560,5899],{"id":11129,"title":5918,"titles":11130,"content":7025,"level":155},"/v0.1.1/reference/api#mysql-provider",[3560,5899],{"id":11132,"title":5923,"titles":11133,"content":7029,"level":155},"/v0.1.1/reference/api#sql-server-provider",[3560,5899],{"id":11135,"title":3929,"titles":11136,"content":3931,"level":107},"/v0.1.1/reference/operators",[],{"id":11138,"title":3929,"titles":11139,"content":3935,"level":107},"/v0.1.1/reference/operators#operators-reference",[],{"id":11141,"title":2959,"titles":11142,"content":3939,"level":136},"/v0.1.1/reference/operators#comparison-operators",[3929],{"id":11144,"title":3341,"titles":11145,"content":3943,"level":155},"/v0.1.1/reference/operators#usage",[3929,2959],{"id":11147,"title":2964,"titles":11148,"content":3947,"level":136},"/v0.1.1/reference/operators#pattern-matching",[3929],{"id":11150,"title":3341,"titles":11151,"content":3951,"level":155},"/v0.1.1/reference/operators#usage-1",[3929,2964],{"id":11153,"title":3954,"titles":11154,"content":3956,"level":136},"/v0.1.1/reference/operators#null-operators",[3929],{"id":11156,"title":3341,"titles":11157,"content":3960,"level":155},"/v0.1.1/reference/operators#usage-2",[3929,3954],{"id":11159,"title":2974,"titles":11160,"content":3964,"level":136},"/v0.1.1/reference/operators#array-operators",[3929],{"id":11162,"title":3341,"titles":11163,"content":3968,"level":155},"/v0.1.1/reference/operators#usage-3",[3929,2974],{"id":11165,"title":3971,"titles":11166,"content":3973,"level":155},"/v0.1.1/reference/operators#with-sqlx",[3929,2974],{"id":11168,"title":3976,"titles":11169,"content":3978,"level":136},"/v0.1.1/reference/operators#subquery-operators",[3929],{"id":11171,"title":3341,"titles":11172,"content":3982,"level":155},"/v0.1.1/reference/operators#usage-4",[3929,3976],{"id":11174,"title":3985,"titles":11175,"content":3987,"level":136},"/v0.1.1/reference/operators#regex-operators",[3929],{"id":11177,"title":3341,"titles":11178,"content":3991,"level":155},"/v0.1.1/reference/operators#usage-5",[3929,3985],{"id":11180,"title":3994,"titles":11181,"content":3996,"level":136},"/v0.1.1/reference/operators#postgresql-array-operators",[3929],{"id":11183,"title":3341,"titles":11184,"content":4000,"level":155},"/v0.1.1/reference/operators#usage-6",[3929,3994],{"id":11186,"title":4003,"titles":11187,"content":4005,"level":136},"/v0.1.1/reference/operators#vector-operators-pgvector",[3929],{"id":11189,"title":3341,"titles":11190,"content":4009,"level":155},"/v0.1.1/reference/operators#usage-7",[3929,4003],{"id":11192,"title":4012,"titles":11193,"content":4014,"level":155},"/v0.1.1/reference/operators#with-pgvector",[3929,4003],{"id":11195,"title":4017,"titles":11196,"content":4019,"level":136},"/v0.1.1/reference/operators#operator-selection-guide",[3929],{"id":11198,"title":3124,"titles":11199,"content":4023,"level":136},"/v0.1.1/reference/operators#aggregate-functions",[3929],{"id":11201,"title":3173,"titles":11202,"content":4027,"level":136},"/v0.1.1/reference/operators#window-functions",[3929],{"id":11204,"title":3198,"titles":11205,"content":4031,"level":136},"/v0.1.1/reference/operators#frame-bounds",[3929],{"id":11207,"title":4034,"titles":11208,"content":4036,"level":136},"/v0.1.1/reference/operators#cast-types",[3929],{"id":11210,"title":1614,"titles":11211,"content":2581,"level":107},"/v0.1.2/overview",[],{"id":11213,"title":1614,"titles":11214,"content":6007,"level":107},"/v0.1.2/overview#overview",[],{"id":11216,"title":1237,"titles":11217,"content":2589,"level":136},"/v0.1.2/overview#architecture",[1614],{"id":11219,"title":2592,"titles":11220,"content":2594,"level":136},"/v0.1.2/overview#philosophy",[1614],{"id":11222,"title":1187,"titles":11223,"content":2598,"level":136},"/v0.1.2/overview#capabilities",[1614],{"id":11225,"title":2601,"titles":11226,"content":99,"level":136},"/v0.1.2/overview#priorities",[1614],{"id":11228,"title":1782,"titles":11229,"content":2606,"level":155},"/v0.1.2/overview#security",[1614,2601],{"id":11231,"title":2609,"titles":11232,"content":6026,"level":155},"/v0.1.2/overview#ergonomics",[1614,2601],{"id":11234,"title":5002,"titles":11235,"content":6030,"level":155},"/v0.1.2/overview#multi-provider-architecture",[1614,2601],{"id":11237,"title":1628,"titles":11238,"content":2620,"level":107},"/v0.1.2/learn/quickstart",[],{"id":11240,"title":1628,"titles":11241,"content":99,"level":107},"/v0.1.2/learn/quickstart#quickstart",[],{"id":11243,"title":2626,"titles":11244,"content":6040,"level":136},"/v0.1.2/learn/quickstart#requirements",[1628],{"id":11246,"title":2631,"titles":11247,"content":2633,"level":136},"/v0.1.2/learn/quickstart#installation",[1628],{"id":11249,"title":2636,"titles":11250,"content":6047,"level":136},"/v0.1.2/learn/quickstart#basic-usage",[1628],{"id":11252,"title":2641,"titles":11253,"content":6051,"level":136},"/v0.1.2/learn/quickstart#whats-happening",[1628],{"id":11255,"title":2646,"titles":11256,"content":6055,"level":136},"/v0.1.2/learn/quickstart#using-with-sqlx",[1628],{"id":11258,"title":2651,"titles":11259,"content":2653,"level":107},"/v0.1.2/learn/concepts",[],{"id":11261,"title":2651,"titles":11262,"content":2657,"level":107},"/v0.1.2/learn/concepts#core-concepts",[],{"id":11264,"title":2660,"titles":11265,"content":2662,"level":136},"/v0.1.2/learn/concepts#tables",[2651],{"id":11267,"title":2665,"titles":11268,"content":2667,"level":136},"/v0.1.2/learn/concepts#fields",[2651],{"id":11270,"title":2670,"titles":11271,"content":2672,"level":155},"/v0.1.2/learn/concepts#field-validation",[2651,2665],{"id":11273,"title":2675,"titles":11274,"content":2677,"level":136},"/v0.1.2/learn/concepts#params",[2651],{"id":11276,"title":2680,"titles":11277,"content":2682,"level":155},"/v0.1.2/learn/concepts#parameter-validation",[2651,2675],{"id":11279,"title":1251,"titles":11280,"content":2686,"level":136},"/v0.1.2/learn/concepts#conditions",[2651],{"id":11282,"title":1727,"titles":11283,"content":2690,"level":155},"/v0.1.2/learn/concepts#operators",[2651,1251],{"id":11285,"title":2693,"titles":11286,"content":2695,"level":155},"/v0.1.2/learn/concepts#combining-conditions",[2651,1251],{"id":11288,"title":2698,"titles":11289,"content":2700,"level":155},"/v0.1.2/learn/concepts#nested-conditions",[2651,1251],{"id":11291,"title":2703,"titles":11292,"content":2705,"level":155},"/v0.1.2/learn/concepts#null-conditions",[2651,1251],{"id":11294,"title":2708,"titles":11295,"content":2710,"level":155},"/v0.1.2/learn/concepts#field-comparisons",[2651,1251],{"id":11297,"title":2713,"titles":11298,"content":2715,"level":136},"/v0.1.2/learn/concepts#builders",[2651],{"id":11300,"title":2718,"titles":11301,"content":6101,"level":155},"/v0.1.2/learn/concepts#fluent-api",[2651,2713],{"id":11303,"title":2723,"titles":11304,"content":6105,"level":155},"/v0.1.2/learn/concepts#build-vs-render",[2651,2713],{"id":11306,"title":2728,"titles":11307,"content":6109,"level":155},"/v0.1.2/learn/concepts#must-variants",[2651,2713],{"id":11309,"title":2733,"titles":11310,"content":2735,"level":136},"/v0.1.2/learn/concepts#try-variants",[2651],{"id":11312,"title":2738,"titles":11313,"content":2740,"level":136},"/v0.1.2/learn/concepts#query-result",[2651],{"id":11315,"title":1237,"titles":11316,"content":2744,"level":107},"/v0.1.2/learn/architecture",[],{"id":11318,"title":1237,"titles":11319,"content":2748,"level":107},"/v0.1.2/learn/architecture#architecture",[],{"id":11321,"title":2751,"titles":11322,"content":2753,"level":136},"/v0.1.2/learn/architecture#pipeline-overview",[1237],{"id":11324,"title":2756,"titles":11325,"content":99,"level":136},"/v0.1.2/learn/architecture#validation-layer",[1237],{"id":11327,"title":1215,"titles":11328,"content":2761,"level":155},"/v0.1.2/learn/architecture#schema-validation",[1237,2756],{"id":11330,"title":2764,"titles":11331,"content":2766,"level":155},"/v0.1.2/learn/architecture#identifier-validation",[1237,2756],{"id":11333,"title":2769,"titles":11334,"content":2771,"level":155},"/v0.1.2/learn/architecture#alias-restrictions",[1237,2756],{"id":11336,"title":2774,"titles":11337,"content":5107,"level":136},"/v0.1.2/learn/architecture#ast-structure",[1237],{"id":11339,"title":2779,"titles":11340,"content":2781,"level":155},"/v0.1.2/learn/architecture#internal-types",[1237,2774],{"id":11342,"title":2784,"titles":11343,"content":2786,"level":155},"/v0.1.2/learn/architecture#condition-types",[1237,2774],{"id":11345,"title":2789,"titles":11346,"content":2791,"level":136},"/v0.1.2/learn/architecture#render-engine",[1237],{"id":11348,"title":2794,"titles":11349,"content":2796,"level":155},"/v0.1.2/learn/architecture#identifier-quoting",[1237,2789],{"id":11351,"title":2799,"titles":11352,"content":2801,"level":155},"/v0.1.2/learn/architecture#parameter-placeholders",[1237,2789],{"id":11354,"title":2804,"titles":11355,"content":2806,"level":155},"/v0.1.2/learn/architecture#parameter-namespacing",[1237,2789],{"id":11357,"title":5128,"titles":11358,"content":5130,"level":136},"/v0.1.2/learn/architecture#provider-architecture",[1237],{"id":11360,"title":5133,"titles":11361,"content":11362,"level":155},"/v0.1.2/learn/architecture#available-providers",[1237,5128],"ProviderImportNotesPostgreSQLgithub.com/zoobzio/astql/pkg/postgresFull feature supportSQLitegithub.com/zoobzio/astql/pkg/sqliteRejects unsupported featuresMariaDBgithub.com/zoobzio/astql/pkg/mariadbON DUPLICATE KEY UPDATE, RETURNING (10.5+)SQL Servergithub.com/zoobzio/astql/pkg/mssqlOUTPUT clause, OFFSET/FETCH syntax",{"id":11364,"title":3341,"titles":11365,"content":6168,"level":155},"/v0.1.2/learn/architecture#usage",[1237,5128],{"id":11367,"title":5142,"titles":11368,"content":11369,"level":155},"/v0.1.2/learn/architecture#dialect-differences",[1237,5128],"Providers handle syntax differences automatically: FeaturePostgreSQLSQLiteMariaDBSQL ServerIdentifier quoting\"name\"\"name\"`name`[name]Param placeholder:name:name:name:nameString concatCONCAT()||CONCAT()CONCAT()String lengthLENGTH()LENGTH()LENGTH()LEN()Current timeNOW()DATETIME('now')NOW()GETDATE()Extract yearEXTRACT(YEAR FROM d)STRFTIME('%Y', d)EXTRACT(YEAR FROM d)DATEPART(YEAR, d)LIMIT/OFFSETLIMIT n OFFSET mLIMIT n OFFSET mLIMIT n OFFSET mOFFSET m ROWS FETCH NEXT n ROWS ONLYRETURNINGRETURNINGRETURNINGRETURNINGOUTPUTUpsertON CONFLICTON CONFLICTON DUPLICATE KEY UPDATEUnsupported Each provider rejects unsupported features with clear errors rather than generating invalid SQL.",{"id":11371,"title":2809,"titles":11372,"content":11373,"level":136},"/v0.1.2/learn/architecture#file-structure",[1237],"astql/\n├── api.go           # Public types and package docs\n├── builder.go       # Query builders (Select, Insert, Update, Delete)\n├── expressions.go   # Expression helpers (Sum, Case, Window, String, Date, etc.)\n├── instance.go      # ASTQL instance and validation\n├── renderer.go      # Renderer interface\n├── internal/\n│   ├── types/       # Internal AST types\n│   │   ├── ast.go\n│   │   ├── condition.go\n│   │   ├── field.go\n│   │   ├── operator.go\n│   │   ├── param.go\n│   │   └── table.go\n│   └── render/      # Shared render utilities\n│       └── errors.go\n└── pkg/\n    ├── postgres/    # PostgreSQL provider\n    │   └── postgres.go\n    ├── sqlite/      # SQLite provider\n    │   └── sqlite.go\n    ├── mariadb/     # MariaDB provider\n    │   └── mariadb.go\n    └── mssql/       # SQL Server provider\n        └── mssql.go",{"id":11375,"title":2814,"titles":11376,"content":2816,"level":136},"/v0.1.2/learn/architecture#security-layers",[1237],{"id":11378,"title":2819,"titles":11379,"content":99,"level":136},"/v0.1.2/learn/architecture#extension-points",[1237],{"id":11381,"title":2823,"titles":11382,"content":2825,"level":155},"/v0.1.2/learn/architecture#custom-expressions",[1237,2819],{"id":11384,"title":2828,"titles":11385,"content":2830,"level":155},"/v0.1.2/learn/architecture#compound-queries",[1237,2819],{"id":11387,"title":2833,"titles":11388,"content":6191,"level":155},"/v0.1.2/learn/architecture#direct-ast-access",[1237,2819],{"id":11390,"title":1215,"titles":11391,"content":2839,"level":107},"/v0.1.2/guides/schema-validation",[],{"id":11393,"title":1215,"titles":11394,"content":2843,"level":107},"/v0.1.2/guides/schema-validation#schema-validation",[],{"id":11396,"title":2846,"titles":11397,"content":2848,"level":136},"/v0.1.2/guides/schema-validation#defining-a-schema",[1215],{"id":11399,"title":2851,"titles":11400,"content":2853,"level":136},"/v0.1.2/guides/schema-validation#creating-an-instance",[1215],{"id":11402,"title":2856,"titles":11403,"content":99,"level":136},"/v0.1.2/guides/schema-validation#validation-behavior",[1215],{"id":11405,"title":2860,"titles":11406,"content":2862,"level":155},"/v0.1.2/guides/schema-validation#table-validation",[1215,2856],{"id":11408,"title":2670,"titles":11409,"content":2866,"level":155},"/v0.1.2/guides/schema-validation#field-validation",[1215,2856],{"id":11411,"title":2680,"titles":11412,"content":2870,"level":155},"/v0.1.2/guides/schema-validation#parameter-validation",[1215,2856],{"id":11414,"title":2873,"titles":11415,"content":2875,"level":136},"/v0.1.2/guides/schema-validation#panic-vs-error",[1215],{"id":11417,"title":2733,"titles":11418,"content":2879,"level":155},"/v0.1.2/guides/schema-validation#try-variants",[1215,2873],{"id":11420,"title":2882,"titles":11421,"content":2884,"level":155},"/v0.1.2/guides/schema-validation#when-to-use-each",[1215,2873],{"id":11423,"title":2887,"titles":11424,"content":2889,"level":136},"/v0.1.2/guides/schema-validation#table-aliases",[1215],{"id":11426,"title":2769,"titles":11427,"content":2893,"level":155},"/v0.1.2/guides/schema-validation#alias-restrictions",[1215,2887],{"id":11429,"title":2896,"titles":11430,"content":2898,"level":155},"/v0.1.2/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":11432,"title":2901,"titles":11433,"content":99,"level":136},"/v0.1.2/guides/schema-validation#schema-organization",[1215],{"id":11435,"title":2905,"titles":11436,"content":6240,"level":155},"/v0.1.2/guides/schema-validation#single-schema-instance",[1215,2901],{"id":11438,"title":2910,"titles":11439,"content":2912,"level":155},"/v0.1.2/guides/schema-validation#multiple-schemas",[1215,2901],{"id":11441,"title":2915,"titles":11442,"content":99,"level":136},"/v0.1.2/guides/schema-validation#dynamic-queries",[1215],{"id":11444,"title":2919,"titles":11445,"content":6250,"level":155},"/v0.1.2/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":11447,"title":2924,"titles":11448,"content":2926,"level":155},"/v0.1.2/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":11450,"title":2929,"titles":11451,"content":99,"level":136},"/v0.1.2/guides/schema-validation#validation-errors",[1215],{"id":11453,"title":2933,"titles":11454,"content":2935,"level":155},"/v0.1.2/guides/schema-validation#error-types",[1215,2929],{"id":11456,"title":2938,"titles":11457,"content":6263,"level":155},"/v0.1.2/guides/schema-validation#handling-errors",[1215,2929],{"id":11459,"title":1251,"titles":11460,"content":2944,"level":107},"/v0.1.2/guides/conditions",[],{"id":11462,"title":1251,"titles":11463,"content":2948,"level":107},"/v0.1.2/guides/conditions#conditions",[],{"id":11465,"title":2951,"titles":11466,"content":2953,"level":136},"/v0.1.2/guides/conditions#basic-conditions",[1251],{"id":11468,"title":1727,"titles":11469,"content":99,"level":136},"/v0.1.2/guides/conditions#operators",[1251],{"id":11471,"title":2959,"titles":11472,"content":2961,"level":155},"/v0.1.2/guides/conditions#comparison-operators",[1251,1727],{"id":11474,"title":2964,"titles":11475,"content":2966,"level":155},"/v0.1.2/guides/conditions#pattern-matching",[1251,1727],{"id":11477,"title":2969,"titles":11478,"content":2971,"level":155},"/v0.1.2/guides/conditions#null-checks",[1251,1727],{"id":11480,"title":2974,"titles":11481,"content":2976,"level":155},"/v0.1.2/guides/conditions#array-operators",[1251,1727],{"id":11483,"title":2693,"titles":11484,"content":99,"level":136},"/v0.1.2/guides/conditions#combining-conditions",[1251],{"id":11486,"title":2982,"titles":11487,"content":2984,"level":155},"/v0.1.2/guides/conditions#and",[1251,2693],{"id":11489,"title":2987,"titles":11490,"content":2989,"level":155},"/v0.1.2/guides/conditions#or",[1251,2693],{"id":11492,"title":2992,"titles":11493,"content":2994,"level":155},"/v0.1.2/guides/conditions#nested-logic",[1251,2693],{"id":11495,"title":2997,"titles":11496,"content":2999,"level":136},"/v0.1.2/guides/conditions#between",[1251],{"id":11498,"title":2708,"titles":11499,"content":3003,"level":136},"/v0.1.2/guides/conditions#field-comparisons",[1251],{"id":11501,"title":3006,"titles":11502,"content":99,"level":136},"/v0.1.2/guides/conditions#subqueries",[1251],{"id":11504,"title":3010,"titles":11505,"content":3012,"level":155},"/v0.1.2/guides/conditions#in-subquery",[1251,3006],{"id":11507,"title":3015,"titles":11508,"content":3017,"level":155},"/v0.1.2/guides/conditions#not-in-subquery",[1251,3006],{"id":11510,"title":3020,"titles":11511,"content":3022,"level":155},"/v0.1.2/guides/conditions#exists",[1251,3006],{"id":11513,"title":3025,"titles":11514,"content":3027,"level":155},"/v0.1.2/guides/conditions#not-exists",[1251,3006],{"id":11516,"title":2804,"titles":11517,"content":3031,"level":155},"/v0.1.2/guides/conditions#parameter-namespacing",[1251,3006],{"id":11519,"title":3034,"titles":11520,"content":3036,"level":136},"/v0.1.2/guides/conditions#multiple-where-clauses",[1251],{"id":11522,"title":3039,"titles":11523,"content":3041,"level":136},"/v0.1.2/guides/conditions#wherefield-shorthand",[1251],{"id":11525,"title":3044,"titles":11526,"content":3046,"level":136},"/v0.1.2/guides/conditions#building-conditions-dynamically",[1251],{"id":11528,"title":1265,"titles":11529,"content":3050,"level":107},"/v0.1.2/guides/joins",[],{"id":11531,"title":1265,"titles":11532,"content":3054,"level":107},"/v0.1.2/guides/joins#joins",[],{"id":11534,"title":3057,"titles":11535,"content":3059,"level":136},"/v0.1.2/guides/joins#join-types",[1265],{"id":11537,"title":3062,"titles":11538,"content":3064,"level":136},"/v0.1.2/guides/joins#basic-join",[1265],{"id":11540,"title":2887,"titles":11541,"content":3068,"level":136},"/v0.1.2/guides/joins#table-aliases",[1265],{"id":11543,"title":3071,"titles":11544,"content":3073,"level":136},"/v0.1.2/guides/joins#left-join",[1265],{"id":11546,"title":3076,"titles":11547,"content":3078,"level":136},"/v0.1.2/guides/joins#right-join",[1265],{"id":11549,"title":3081,"titles":11550,"content":3083,"level":136},"/v0.1.2/guides/joins#full-outer-join",[1265],{"id":11552,"title":3086,"titles":11553,"content":3088,"level":136},"/v0.1.2/guides/joins#cross-join",[1265],{"id":11555,"title":3091,"titles":11556,"content":3093,"level":136},"/v0.1.2/guides/joins#multiple-joins",[1265],{"id":11558,"title":3096,"titles":11559,"content":3098,"level":136},"/v0.1.2/guides/joins#complex-on-conditions",[1265],{"id":11561,"title":3101,"titles":11562,"content":3103,"level":136},"/v0.1.2/guides/joins#self-joins",[1265],{"id":11564,"title":3106,"titles":11565,"content":3108,"level":136},"/v0.1.2/guides/joins#joins-with-count",[1265],{"id":11567,"title":3111,"titles":11568,"content":3113,"level":136},"/v0.1.2/guides/joins#join-validation",[1265],{"id":11570,"title":1668,"titles":11571,"content":3117,"level":107},"/v0.1.2/guides/aggregates",[],{"id":11573,"title":1668,"titles":11574,"content":3121,"level":107},"/v0.1.2/guides/aggregates#aggregates",[],{"id":11576,"title":3124,"titles":11577,"content":99,"level":136},"/v0.1.2/guides/aggregates#aggregate-functions",[1668],{"id":11579,"title":3128,"titles":11580,"content":3130,"level":155},"/v0.1.2/guides/aggregates#basic-aggregates",[1668,3124],{"id":11582,"title":3133,"titles":11583,"content":3135,"level":155},"/v0.1.2/guides/aggregates#using-aggregates",[1668,3124],{"id":11585,"title":3138,"titles":11586,"content":3140,"level":155},"/v0.1.2/guides/aggregates#aliases",[1668,3124],{"id":11588,"title":3143,"titles":11589,"content":3145,"level":136},"/v0.1.2/guides/aggregates#group-by",[1668],{"id":11591,"title":3148,"titles":11592,"content":3150,"level":136},"/v0.1.2/guides/aggregates#having",[1668],{"id":11594,"title":3153,"titles":11595,"content":3155,"level":155},"/v0.1.2/guides/aggregates#simple-having",[1668,3148],{"id":11597,"title":3158,"titles":11598,"content":3160,"level":155},"/v0.1.2/guides/aggregates#aggregate-having",[1668,3148],{"id":11600,"title":3163,"titles":11601,"content":3165,"level":155},"/v0.1.2/guides/aggregates#having-helpers",[1668,3148],{"id":11603,"title":3168,"titles":11604,"content":3170,"level":136},"/v0.1.2/guides/aggregates#filter-clause",[1668],{"id":11606,"title":3173,"titles":11607,"content":3175,"level":136},"/v0.1.2/guides/aggregates#window-functions",[1668],{"id":11609,"title":3178,"titles":11610,"content":3180,"level":155},"/v0.1.2/guides/aggregates#basic-window-functions",[1668,3173],{"id":11612,"title":3183,"titles":11613,"content":3185,"level":155},"/v0.1.2/guides/aggregates#window-function-types",[1668,3173],{"id":11615,"title":3188,"titles":11616,"content":3190,"level":155},"/v0.1.2/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":11618,"title":3193,"titles":11619,"content":3195,"level":155},"/v0.1.2/guides/aggregates#window-specification",[1668,3173],{"id":11621,"title":3198,"titles":11622,"content":3200,"level":155},"/v0.1.2/guides/aggregates#frame-bounds",[1668,3173],{"id":11624,"title":3203,"titles":11625,"content":99,"level":136},"/v0.1.2/guides/aggregates#math-functions",[1668],{"id":11627,"title":3207,"titles":11628,"content":3209,"level":155},"/v0.1.2/guides/aggregates#available-functions",[1668,3203],{"id":11630,"title":3212,"titles":11631,"content":3214,"level":155},"/v0.1.2/guides/aggregates#example",[1668,3203],{"id":11633,"title":1270,"titles":11634,"content":3218,"level":136},"/v0.1.2/guides/aggregates#case-expressions",[1668],{"id":11636,"title":3221,"titles":11637,"content":3223,"level":136},"/v0.1.2/guides/aggregates#type-casting",[1668],{"id":11639,"title":3226,"titles":11640,"content":3228,"level":136},"/v0.1.2/guides/aggregates#coalesce-and-nullif",[1668],{"id":11642,"title":1675,"titles":11643,"content":3232,"level":107},"/v0.1.2/guides/testing",[],{"id":11645,"title":1675,"titles":11646,"content":3236,"level":107},"/v0.1.2/guides/testing#testing",[],{"id":11648,"title":3239,"titles":11649,"content":99,"level":136},"/v0.1.2/guides/testing#testing-query-output",[1675],{"id":11651,"title":3243,"titles":11652,"content":6459,"level":155},"/v0.1.2/guides/testing#basic-output-testing",[1675,3239],{"id":11654,"title":3248,"titles":11655,"content":3250,"level":155},"/v0.1.2/guides/testing#test-instance-setup",[1675,3239],{"id":11657,"title":3253,"titles":11658,"content":99,"level":136},"/v0.1.2/guides/testing#table-driven-tests",[1675],{"id":11660,"title":3257,"titles":11661,"content":6469,"level":155},"/v0.1.2/guides/testing#testing-multiple-queries",[1675,3253],{"id":11663,"title":3262,"titles":11664,"content":99,"level":136},"/v0.1.2/guides/testing#testing-validation",[1675],{"id":11666,"title":3266,"titles":11667,"content":3268,"level":155},"/v0.1.2/guides/testing#testing-invalid-input",[1675,3262],{"id":11669,"title":3271,"titles":11670,"content":3273,"level":155},"/v0.1.2/guides/testing#testing-try-variants",[1675,3262],{"id":11672,"title":3276,"titles":11673,"content":99,"level":136},"/v0.1.2/guides/testing#testing-error-cases",[1675],{"id":11675,"title":3280,"titles":11676,"content":6485,"level":155},"/v0.1.2/guides/testing#builder-errors",[1675,3276],{"id":11678,"title":3285,"titles":11679,"content":99,"level":136},"/v0.1.2/guides/testing#testing-complex-queries",[1675],{"id":11681,"title":3289,"titles":11682,"content":6492,"level":155},"/v0.1.2/guides/testing#join-tests",[1675,3285],{"id":11684,"title":3294,"titles":11685,"content":6496,"level":155},"/v0.1.2/guides/testing#subquery-tests",[1675,3285],{"id":11687,"title":3299,"titles":11688,"content":3301,"level":136},"/v0.1.2/guides/testing#snapshot-testing",[1675],{"id":11690,"title":3304,"titles":11691,"content":99,"level":136},"/v0.1.2/guides/testing#best-practices",[1675],{"id":11693,"title":3308,"titles":11694,"content":3310,"level":155},"/v0.1.2/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":11696,"title":3313,"titles":11697,"content":3315,"level":155},"/v0.1.2/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":11699,"title":3318,"titles":11700,"content":3320,"level":155},"/v0.1.2/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":11702,"title":3323,"titles":11703,"content":6515,"level":155},"/v0.1.2/guides/testing#_4-test-edge-cases",[1675,3304],{"id":11705,"title":1688,"titles":11706,"content":3329,"level":107},"/v0.1.2/cookbook/pagination",[],{"id":11708,"title":1688,"titles":11709,"content":3333,"level":107},"/v0.1.2/cookbook/pagination#pagination",[],{"id":11711,"title":3336,"titles":11712,"content":6525,"level":136},"/v0.1.2/cookbook/pagination#offset-pagination",[1688],{"id":11714,"title":3341,"titles":11715,"content":3343,"level":155},"/v0.1.2/cookbook/pagination#usage",[1688,3336],{"id":11717,"title":3346,"titles":11718,"content":6532,"level":155},"/v0.1.2/cookbook/pagination#with-total-count",[1688,3336],{"id":11720,"title":3351,"titles":11721,"content":3353,"level":155},"/v0.1.2/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":11723,"title":3356,"titles":11724,"content":6539,"level":136},"/v0.1.2/cookbook/pagination#cursor-pagination",[1688],{"id":11726,"title":3341,"titles":11727,"content":3362,"level":155},"/v0.1.2/cookbook/pagination#usage-1",[1688,3356],{"id":11729,"title":3365,"titles":11730,"content":6546,"level":155},"/v0.1.2/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":11732,"title":3370,"titles":11733,"content":6550,"level":155},"/v0.1.2/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":11735,"title":3375,"titles":11736,"content":6554,"level":136},"/v0.1.2/cookbook/pagination#filtering-with-pagination",[1688],{"id":11738,"title":3380,"titles":11739,"content":6558,"level":136},"/v0.1.2/cookbook/pagination#pagination-with-joins",[1688],{"id":11741,"title":3304,"titles":11742,"content":99,"level":136},"/v0.1.2/cookbook/pagination#best-practices",[1688],{"id":11744,"title":3388,"titles":11745,"content":6565,"level":155},"/v0.1.2/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":11747,"title":3393,"titles":11748,"content":3395,"level":155},"/v0.1.2/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":11750,"title":3398,"titles":11751,"content":3400,"level":155},"/v0.1.2/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":11753,"title":3403,"titles":11754,"content":3405,"level":155},"/v0.1.2/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":11756,"title":1695,"titles":11757,"content":3409,"level":107},"/v0.1.2/cookbook/vector-search",[],{"id":11759,"title":1695,"titles":11760,"content":3413,"level":107},"/v0.1.2/cookbook/vector-search#vector-search",[],{"id":11762,"title":3416,"titles":11763,"content":3418,"level":136},"/v0.1.2/cookbook/vector-search#schema-setup",[1695],{"id":11765,"title":3421,"titles":11766,"content":3423,"level":136},"/v0.1.2/cookbook/vector-search#distance-operators",[1695],{"id":11768,"title":3426,"titles":11769,"content":3428,"level":136},"/v0.1.2/cookbook/vector-search#basic-similarity-search",[1695],{"id":11771,"title":3431,"titles":11772,"content":3433,"level":155},"/v0.1.2/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":11774,"title":3436,"titles":11775,"content":3438,"level":136},"/v0.1.2/cookbook/vector-search#cosine-similarity",[1695],{"id":11777,"title":3441,"titles":11778,"content":3443,"level":136},"/v0.1.2/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":11780,"title":3446,"titles":11781,"content":3448,"level":136},"/v0.1.2/cookbook/vector-search#filtered-vector-search",[1695],{"id":11783,"title":3451,"titles":11784,"content":3453,"level":136},"/v0.1.2/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":11786,"title":3456,"titles":11787,"content":3458,"level":136},"/v0.1.2/cookbook/vector-search#hybrid-search",[1695],{"id":11789,"title":3461,"titles":11790,"content":3463,"level":136},"/v0.1.2/cookbook/vector-search#multi-vector-search",[1695],{"id":11792,"title":3466,"titles":11793,"content":3468,"level":136},"/v0.1.2/cookbook/vector-search#indexing-recommendations",[1695],{"id":11795,"title":3304,"titles":11796,"content":99,"level":136},"/v0.1.2/cookbook/vector-search#best-practices",[1695],{"id":11798,"title":3474,"titles":11799,"content":3476,"level":155},"/v0.1.2/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":11801,"title":3479,"titles":11802,"content":3481,"level":155},"/v0.1.2/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":11804,"title":3484,"titles":11805,"content":3486,"level":155},"/v0.1.2/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":11807,"title":1702,"titles":11808,"content":3490,"level":107},"/v0.1.2/cookbook/upserts",[],{"id":11810,"title":1702,"titles":11811,"content":3494,"level":107},"/v0.1.2/cookbook/upserts#upserts",[],{"id":11813,"title":3497,"titles":11814,"content":6635,"level":136},"/v0.1.2/cookbook/upserts#basic-upsert",[1702],{"id":11816,"title":3502,"titles":11817,"content":6639,"level":136},"/v0.1.2/cookbook/upserts#do-nothing",[1702],{"id":11819,"title":3507,"titles":11820,"content":6643,"level":136},"/v0.1.2/cookbook/upserts#multi-column-conflict",[1702],{"id":11822,"title":3512,"titles":11823,"content":6647,"level":136},"/v0.1.2/cookbook/upserts#returning-with-upsert",[1702],{"id":11825,"title":3517,"titles":11826,"content":6651,"level":136},"/v0.1.2/cookbook/upserts#batch-upsert",[1702],{"id":11828,"title":3522,"titles":11829,"content":6655,"level":136},"/v0.1.2/cookbook/upserts#conditional-upsert",[1702],{"id":11831,"title":3527,"titles":11832,"content":6659,"level":136},"/v0.1.2/cookbook/upserts#sync-pattern",[1702],{"id":11834,"title":3532,"titles":11835,"content":6663,"level":136},"/v0.1.2/cookbook/upserts#upsert-with-timestamps",[1702],{"id":11837,"title":3304,"titles":11838,"content":99,"level":136},"/v0.1.2/cookbook/upserts#best-practices",[1702],{"id":11840,"title":3540,"titles":11841,"content":3542,"level":155},"/v0.1.2/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":11843,"title":3545,"titles":11844,"content":3547,"level":155},"/v0.1.2/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":11846,"title":3550,"titles":11847,"content":3552,"level":155},"/v0.1.2/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":11849,"title":3555,"titles":11850,"content":3557,"level":155},"/v0.1.2/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":11852,"title":1709,"titles":11853,"content":6682,"level":107},"/v0.1.2/cookbook/orm-foundation",[],{"id":11855,"title":1709,"titles":11856,"content":6686,"level":107},"/v0.1.2/cookbook/orm-foundation#orm-foundation",[],{"id":11858,"title":6689,"titles":11859,"content":6691,"level":136},"/v0.1.2/cookbook/orm-foundation#the-result",[1709],{"id":11861,"title":6694,"titles":11862,"content":6696,"level":136},"/v0.1.2/cookbook/orm-foundation#the-architecture",[1709],{"id":11864,"title":6699,"titles":11865,"content":6701,"level":136},"/v0.1.2/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":11867,"title":6704,"titles":11868,"content":6706,"level":155},"/v0.1.2/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":11870,"title":6709,"titles":11871,"content":6711,"level":155},"/v0.1.2/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":11873,"title":6714,"titles":11874,"content":6716,"level":155},"/v0.1.2/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":11876,"title":6719,"titles":11877,"content":6721,"level":155},"/v0.1.2/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":11879,"title":6724,"titles":11880,"content":6726,"level":136},"/v0.1.2/cookbook/orm-foundation#the-security-model",[1709],{"id":11882,"title":6729,"titles":11883,"content":6731,"level":136},"/v0.1.2/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":11885,"title":6734,"titles":11886,"content":6736,"level":136},"/v0.1.2/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":11888,"title":6739,"titles":11889,"content":6741,"level":155},"/v0.1.2/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":11891,"title":6744,"titles":11892,"content":6746,"level":155},"/v0.1.2/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":11894,"title":6749,"titles":11895,"content":6751,"level":155},"/v0.1.2/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":11897,"title":6754,"titles":11898,"content":6756,"level":155},"/v0.1.2/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":11900,"title":6759,"titles":11901,"content":6761,"level":136},"/v0.1.2/cookbook/orm-foundation#see-also",[1709],{"id":11903,"title":3560,"titles":11904,"content":3562,"level":107},"/v0.1.2/reference/api",[],{"id":11906,"title":3560,"titles":11907,"content":3566,"level":107},"/v0.1.2/reference/api#api-reference",[],{"id":11909,"title":3569,"titles":11910,"content":99,"level":136},"/v0.1.2/reference/api#instance-creation",[3560],{"id":11912,"title":856,"titles":11913,"content":3574,"level":155},"/v0.1.2/reference/api#newfromdbml",[3560,3569],{"id":11915,"title":3577,"titles":11916,"content":99,"level":136},"/v0.1.2/reference/api#instance-methods",[3560],{"id":11918,"title":119,"titles":11919,"content":3582,"level":155},"/v0.1.2/reference/api#t",[3560,3577],{"id":11921,"title":3585,"titles":11922,"content":3587,"level":155},"/v0.1.2/reference/api#tryt",[3560,3577],{"id":11924,"title":169,"titles":11925,"content":3591,"level":155},"/v0.1.2/reference/api#f",[3560,3577],{"id":11927,"title":3594,"titles":11928,"content":3596,"level":155},"/v0.1.2/reference/api#tryf",[3560,3577],{"id":11930,"title":316,"titles":11931,"content":3600,"level":155},"/v0.1.2/reference/api#p",[3560,3577],{"id":11933,"title":3603,"titles":11934,"content":3605,"level":155},"/v0.1.2/reference/api#tryp",[3560,3577],{"id":11936,"title":284,"titles":11937,"content":3609,"level":155},"/v0.1.2/reference/api#c",[3560,3577],{"id":11939,"title":3612,"titles":11940,"content":3614,"level":155},"/v0.1.2/reference/api#tryc",[3560,3577],{"id":11942,"title":3617,"titles":11943,"content":3619,"level":155},"/v0.1.2/reference/api#and",[3560,3577],{"id":11945,"title":3622,"titles":11946,"content":3624,"level":155},"/v0.1.2/reference/api#or",[3560,3577],{"id":11948,"title":3627,"titles":11949,"content":3629,"level":155},"/v0.1.2/reference/api#null",[3560,3577],{"id":11951,"title":3632,"titles":11952,"content":3634,"level":155},"/v0.1.2/reference/api#notnull",[3560,3577],{"id":11954,"title":3637,"titles":11955,"content":3639,"level":155},"/v0.1.2/reference/api#withtable",[3560,3577],{"id":11957,"title":3642,"titles":11958,"content":3644,"level":155},"/v0.1.2/reference/api#trywithtable",[3560,3577],{"id":11960,"title":3647,"titles":11961,"content":3649,"level":155},"/v0.1.2/reference/api#aggc",[3560,3577],{"id":11963,"title":3652,"titles":11964,"content":3654,"level":155},"/v0.1.2/reference/api#tryaggc",[3560,3577],{"id":11966,"title":3657,"titles":11967,"content":3659,"level":155},"/v0.1.2/reference/api#valuemap",[3560,3577],{"id":11969,"title":3662,"titles":11970,"content":99,"level":136},"/v0.1.2/reference/api#query-builders",[3560],{"id":11972,"title":219,"titles":11973,"content":3667,"level":155},"/v0.1.2/reference/api#select",[3560,3662],{"id":11975,"title":3670,"titles":11976,"content":3672,"level":155},"/v0.1.2/reference/api#insert",[3560,3662],{"id":11978,"title":3675,"titles":11979,"content":3677,"level":155},"/v0.1.2/reference/api#update",[3560,3662],{"id":11981,"title":3680,"titles":11982,"content":3682,"level":155},"/v0.1.2/reference/api#delete",[3560,3662],{"id":11984,"title":3685,"titles":11985,"content":3687,"level":155},"/v0.1.2/reference/api#count",[3560,3662],{"id":11987,"title":3690,"titles":11988,"content":99,"level":136},"/v0.1.2/reference/api#builder-methods",[3560],{"id":11990,"title":2665,"titles":11991,"content":3695,"level":155},"/v0.1.2/reference/api#fields",[3560,3690],{"id":11993,"title":3698,"titles":11994,"content":3700,"level":155},"/v0.1.2/reference/api#where",[3560,3690],{"id":11996,"title":3703,"titles":11997,"content":3705,"level":155},"/v0.1.2/reference/api#wherefield",[3560,3690],{"id":11999,"title":3708,"titles":12000,"content":3710,"level":155},"/v0.1.2/reference/api#orderby",[3560,3690],{"id":12002,"title":3713,"titles":12003,"content":3715,"level":155},"/v0.1.2/reference/api#orderbynulls",[3560,3690],{"id":12005,"title":3718,"titles":12006,"content":3720,"level":155},"/v0.1.2/reference/api#orderbyexpr",[3560,3690],{"id":12008,"title":3723,"titles":12009,"content":5734,"level":155},"/v0.1.2/reference/api#limit",[3560,3690],{"id":12011,"title":5737,"titles":12012,"content":5739,"level":155},"/v0.1.2/reference/api#limitparam",[3560,3690],{"id":12014,"title":3728,"titles":12015,"content":5743,"level":155},"/v0.1.2/reference/api#offset",[3560,3690],{"id":12017,"title":5746,"titles":12018,"content":5748,"level":155},"/v0.1.2/reference/api#offsetparam",[3560,3690],{"id":12020,"title":3733,"titles":12021,"content":3735,"level":155},"/v0.1.2/reference/api#set",[3560,3690],{"id":12023,"title":3738,"titles":12024,"content":3740,"level":155},"/v0.1.2/reference/api#values",[3560,3690],{"id":12026,"title":3743,"titles":12027,"content":3745,"level":155},"/v0.1.2/reference/api#returning",[3560,3690],{"id":12029,"title":3748,"titles":12030,"content":3750,"level":155},"/v0.1.2/reference/api#distinct",[3560,3690],{"id":12032,"title":3753,"titles":12033,"content":3755,"level":155},"/v0.1.2/reference/api#distincton",[3560,3690],{"id":12035,"title":3758,"titles":12036,"content":3760,"level":155},"/v0.1.2/reference/api#groupby",[3560,3690],{"id":12038,"title":3763,"titles":12039,"content":3765,"level":155},"/v0.1.2/reference/api#having",[3560,3690],{"id":12041,"title":3768,"titles":12042,"content":3770,"level":155},"/v0.1.2/reference/api#havingagg",[3560,3690],{"id":12044,"title":3773,"titles":12045,"content":3775,"level":155},"/v0.1.2/reference/api#selectexpr",[3560,3690],{"id":12047,"title":3778,"titles":12048,"content":3780,"level":155},"/v0.1.2/reference/api#onconflict",[3560,3690],{"id":12050,"title":3783,"titles":12051,"content":3785,"level":155},"/v0.1.2/reference/api#join-methods",[3560,3690],{"id":12053,"title":3788,"titles":12054,"content":3790,"level":155},"/v0.1.2/reference/api#row-locking",[3560,3690],{"id":12056,"title":3793,"titles":12057,"content":3795,"level":155},"/v0.1.2/reference/api#build",[3560,3690],{"id":12059,"title":3798,"titles":12060,"content":3800,"level":155},"/v0.1.2/reference/api#mustbuild",[3560,3690],{"id":12062,"title":350,"titles":12063,"content":6924,"level":155},"/v0.1.2/reference/api#render",[3560,3690],{"id":12065,"title":3807,"titles":12066,"content":6928,"level":155},"/v0.1.2/reference/api#mustrender",[3560,3690],{"id":12068,"title":3812,"titles":12069,"content":99,"level":136},"/v0.1.2/reference/api#set-operations",[3560],{"id":12071,"title":3816,"titles":12072,"content":3818,"level":155},"/v0.1.2/reference/api#union-unionall",[3560,3812],{"id":12074,"title":3821,"titles":12075,"content":3823,"level":155},"/v0.1.2/reference/api#intersect-intersectall",[3560,3812],{"id":12077,"title":3826,"titles":12078,"content":3828,"level":155},"/v0.1.2/reference/api#except-exceptall",[3560,3812],{"id":12080,"title":3831,"titles":12081,"content":6944,"level":136},"/v0.1.2/reference/api#rendering",[3560],{"id":12083,"title":3844,"titles":12084,"content":99,"level":136},"/v0.1.2/reference/api#expression-functions",[3560],{"id":12086,"title":1668,"titles":12087,"content":3849,"level":155},"/v0.1.2/reference/api#aggregates",[3560,3844],{"id":12089,"title":3852,"titles":12090,"content":3854,"level":155},"/v0.1.2/reference/api#filter-aggregates",[3560,3844],{"id":12092,"title":1251,"titles":12093,"content":3858,"level":155},"/v0.1.2/reference/api#conditions",[3560,3844],{"id":12095,"title":3006,"titles":12096,"content":3862,"level":155},"/v0.1.2/reference/api#subqueries",[3560,3844],{"id":12098,"title":3865,"titles":12099,"content":3867,"level":155},"/v0.1.2/reference/api#case-expression",[3560,3844],{"id":12101,"title":3870,"titles":12102,"content":3872,"level":155},"/v0.1.2/reference/api#null-handling",[3560,3844],{"id":12104,"title":3203,"titles":12105,"content":3876,"level":155},"/v0.1.2/reference/api#math-functions",[3560,3844],{"id":12107,"title":5855,"titles":12108,"content":5857,"level":155},"/v0.1.2/reference/api#string-functions",[3560,3844],{"id":12110,"title":5860,"titles":12111,"content":5862,"level":155},"/v0.1.2/reference/api#date-functions",[3560,3844],{"id":12113,"title":3221,"titles":12114,"content":3880,"level":155},"/v0.1.2/reference/api#type-casting",[3560,3844],{"id":12116,"title":3173,"titles":12117,"content":3884,"level":155},"/v0.1.2/reference/api#window-functions",[3560,3844],{"id":12119,"title":3193,"titles":12120,"content":3888,"level":155},"/v0.1.2/reference/api#window-specification",[3560,3844],{"id":12122,"title":3891,"titles":12123,"content":3893,"level":155},"/v0.1.2/reference/api#windowbuilder-methods",[3560,3844],{"id":12125,"title":3896,"titles":12126,"content":3898,"level":155},"/v0.1.2/reference/api#expression-alias",[3560,3844],{"id":12128,"title":3163,"titles":12129,"content":3902,"level":155},"/v0.1.2/reference/api#having-helpers",[3560,3844],{"id":12131,"title":3905,"titles":12132,"content":99,"level":136},"/v0.1.2/reference/api#types",[3560],{"id":12134,"title":3909,"titles":12135,"content":3911,"level":155},"/v0.1.2/reference/api#queryresult",[3560,3905],{"id":12137,"title":3914,"titles":12138,"content":3916,"level":155},"/v0.1.2/reference/api#direction",[3560,3905],{"id":12140,"title":3919,"titles":12141,"content":3921,"level":155},"/v0.1.2/reference/api#nullsordering",[3560,3905],{"id":12143,"title":3924,"titles":12144,"content":5896,"level":155},"/v0.1.2/reference/api#operation",[3560,3905],{"id":12146,"title":5899,"titles":12147,"content":99,"level":136},"/v0.1.2/reference/api#providers",[3560],{"id":12149,"title":5903,"titles":12150,"content":5905,"level":155},"/v0.1.2/reference/api#renderer-interface",[3560,5899],{"id":12152,"title":5908,"titles":12153,"content":7017,"level":155},"/v0.1.2/reference/api#postgresql-provider",[3560,5899],{"id":12155,"title":5913,"titles":12156,"content":7021,"level":155},"/v0.1.2/reference/api#sqlite-provider",[3560,5899],{"id":12158,"title":12159,"titles":12160,"content":12161,"level":155},"/v0.1.2/reference/api#mariadb-provider","MariaDB Provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/mariadb\"\n\nrenderer := mariadb.New()\nresult, err := query.Render(renderer) MariaDB-specific behavior: Uses backtick quoting for identifiers: `name`Uses :name parameter placeholders (sqlx compatible)ON CONFLICT DO UPDATE → ON DUPLICATE KEY UPDATEON CONFLICT DO NOTHING → ON DUPLICATE KEY UPDATE field = field (no-op)ILIKE maps to LIKE (MariaDB LIKE is case-insensitive by default)Standard IN (...) syntax instead of = ANY(:array)RETURNING clause support (MariaDB 10.5+) Returns UnsupportedFeatureError for: DISTINCT ONFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)FOR NO KEY UPDATE / FOR KEY SHARE (use FOR UPDATE or FOR SHARE instead)",{"id":12163,"title":5923,"titles":12164,"content":7029,"level":155},"/v0.1.2/reference/api#sql-server-provider",[3560,5899],{"id":12166,"title":3929,"titles":12167,"content":3931,"level":107},"/v0.1.2/reference/operators",[],{"id":12169,"title":3929,"titles":12170,"content":3935,"level":107},"/v0.1.2/reference/operators#operators-reference",[],{"id":12172,"title":2959,"titles":12173,"content":3939,"level":136},"/v0.1.2/reference/operators#comparison-operators",[3929],{"id":12175,"title":3341,"titles":12176,"content":3943,"level":155},"/v0.1.2/reference/operators#usage",[3929,2959],{"id":12178,"title":2964,"titles":12179,"content":3947,"level":136},"/v0.1.2/reference/operators#pattern-matching",[3929],{"id":12181,"title":3341,"titles":12182,"content":3951,"level":155},"/v0.1.2/reference/operators#usage-1",[3929,2964],{"id":12184,"title":3954,"titles":12185,"content":3956,"level":136},"/v0.1.2/reference/operators#null-operators",[3929],{"id":12187,"title":3341,"titles":12188,"content":3960,"level":155},"/v0.1.2/reference/operators#usage-2",[3929,3954],{"id":12190,"title":2974,"titles":12191,"content":3964,"level":136},"/v0.1.2/reference/operators#array-operators",[3929],{"id":12193,"title":3341,"titles":12194,"content":3968,"level":155},"/v0.1.2/reference/operators#usage-3",[3929,2974],{"id":12196,"title":3971,"titles":12197,"content":3973,"level":155},"/v0.1.2/reference/operators#with-sqlx",[3929,2974],{"id":12199,"title":3976,"titles":12200,"content":3978,"level":136},"/v0.1.2/reference/operators#subquery-operators",[3929],{"id":12202,"title":3341,"titles":12203,"content":3982,"level":155},"/v0.1.2/reference/operators#usage-4",[3929,3976],{"id":12205,"title":3985,"titles":12206,"content":3987,"level":136},"/v0.1.2/reference/operators#regex-operators",[3929],{"id":12208,"title":3341,"titles":12209,"content":3991,"level":155},"/v0.1.2/reference/operators#usage-5",[3929,3985],{"id":12211,"title":3994,"titles":12212,"content":3996,"level":136},"/v0.1.2/reference/operators#postgresql-array-operators",[3929],{"id":12214,"title":3341,"titles":12215,"content":4000,"level":155},"/v0.1.2/reference/operators#usage-6",[3929,3994],{"id":12217,"title":4003,"titles":12218,"content":4005,"level":136},"/v0.1.2/reference/operators#vector-operators-pgvector",[3929],{"id":12220,"title":3341,"titles":12221,"content":4009,"level":155},"/v0.1.2/reference/operators#usage-7",[3929,4003],{"id":12223,"title":4012,"titles":12224,"content":4014,"level":155},"/v0.1.2/reference/operators#with-pgvector",[3929,4003],{"id":12226,"title":4017,"titles":12227,"content":4019,"level":136},"/v0.1.2/reference/operators#operator-selection-guide",[3929],{"id":12229,"title":3124,"titles":12230,"content":4023,"level":136},"/v0.1.2/reference/operators#aggregate-functions",[3929],{"id":12232,"title":3173,"titles":12233,"content":4027,"level":136},"/v0.1.2/reference/operators#window-functions",[3929],{"id":12235,"title":3198,"titles":12236,"content":4031,"level":136},"/v0.1.2/reference/operators#frame-bounds",[3929],{"id":12238,"title":4034,"titles":12239,"content":4036,"level":136},"/v0.1.2/reference/operators#cast-types",[3929],{"id":12241,"title":1614,"titles":12242,"content":2581,"level":107},"/v0.1.3/overview",[],{"id":12244,"title":1614,"titles":12245,"content":6007,"level":107},"/v0.1.3/overview#overview",[],{"id":12247,"title":1237,"titles":12248,"content":2589,"level":136},"/v0.1.3/overview#architecture",[1614],{"id":12250,"title":2592,"titles":12251,"content":2594,"level":136},"/v0.1.3/overview#philosophy",[1614],{"id":12253,"title":1187,"titles":12254,"content":2598,"level":136},"/v0.1.3/overview#capabilities",[1614],{"id":12256,"title":2601,"titles":12257,"content":99,"level":136},"/v0.1.3/overview#priorities",[1614],{"id":12259,"title":1782,"titles":12260,"content":2606,"level":155},"/v0.1.3/overview#security",[1614,2601],{"id":12262,"title":2609,"titles":12263,"content":6026,"level":155},"/v0.1.3/overview#ergonomics",[1614,2601],{"id":12265,"title":5002,"titles":12266,"content":6030,"level":155},"/v0.1.3/overview#multi-provider-architecture",[1614,2601],{"id":12268,"title":1628,"titles":12269,"content":2620,"level":107},"/v0.1.3/learn/quickstart",[],{"id":12271,"title":1628,"titles":12272,"content":99,"level":107},"/v0.1.3/learn/quickstart#quickstart",[],{"id":12274,"title":2626,"titles":12275,"content":6040,"level":136},"/v0.1.3/learn/quickstart#requirements",[1628],{"id":12277,"title":2631,"titles":12278,"content":2633,"level":136},"/v0.1.3/learn/quickstart#installation",[1628],{"id":12280,"title":2636,"titles":12281,"content":6047,"level":136},"/v0.1.3/learn/quickstart#basic-usage",[1628],{"id":12283,"title":2641,"titles":12284,"content":6051,"level":136},"/v0.1.3/learn/quickstart#whats-happening",[1628],{"id":12286,"title":2646,"titles":12287,"content":6055,"level":136},"/v0.1.3/learn/quickstart#using-with-sqlx",[1628],{"id":12289,"title":2651,"titles":12290,"content":2653,"level":107},"/v0.1.3/learn/concepts",[],{"id":12292,"title":2651,"titles":12293,"content":2657,"level":107},"/v0.1.3/learn/concepts#core-concepts",[],{"id":12295,"title":2660,"titles":12296,"content":2662,"level":136},"/v0.1.3/learn/concepts#tables",[2651],{"id":12298,"title":2665,"titles":12299,"content":2667,"level":136},"/v0.1.3/learn/concepts#fields",[2651],{"id":12301,"title":2670,"titles":12302,"content":2672,"level":155},"/v0.1.3/learn/concepts#field-validation",[2651,2665],{"id":12304,"title":2675,"titles":12305,"content":2677,"level":136},"/v0.1.3/learn/concepts#params",[2651],{"id":12307,"title":2680,"titles":12308,"content":2682,"level":155},"/v0.1.3/learn/concepts#parameter-validation",[2651,2675],{"id":12310,"title":1251,"titles":12311,"content":2686,"level":136},"/v0.1.3/learn/concepts#conditions",[2651],{"id":12313,"title":1727,"titles":12314,"content":2690,"level":155},"/v0.1.3/learn/concepts#operators",[2651,1251],{"id":12316,"title":2693,"titles":12317,"content":2695,"level":155},"/v0.1.3/learn/concepts#combining-conditions",[2651,1251],{"id":12319,"title":2698,"titles":12320,"content":2700,"level":155},"/v0.1.3/learn/concepts#nested-conditions",[2651,1251],{"id":12322,"title":2703,"titles":12323,"content":2705,"level":155},"/v0.1.3/learn/concepts#null-conditions",[2651,1251],{"id":12325,"title":2708,"titles":12326,"content":2710,"level":155},"/v0.1.3/learn/concepts#field-comparisons",[2651,1251],{"id":12328,"title":2713,"titles":12329,"content":2715,"level":136},"/v0.1.3/learn/concepts#builders",[2651],{"id":12331,"title":2718,"titles":12332,"content":6101,"level":155},"/v0.1.3/learn/concepts#fluent-api",[2651,2713],{"id":12334,"title":2723,"titles":12335,"content":6105,"level":155},"/v0.1.3/learn/concepts#build-vs-render",[2651,2713],{"id":12337,"title":2728,"titles":12338,"content":6109,"level":155},"/v0.1.3/learn/concepts#must-variants",[2651,2713],{"id":12340,"title":2733,"titles":12341,"content":2735,"level":136},"/v0.1.3/learn/concepts#try-variants",[2651],{"id":12343,"title":2738,"titles":12344,"content":2740,"level":136},"/v0.1.3/learn/concepts#query-result",[2651],{"id":12346,"title":1237,"titles":12347,"content":2744,"level":107},"/v0.1.3/learn/architecture",[],{"id":12349,"title":1237,"titles":12350,"content":2748,"level":107},"/v0.1.3/learn/architecture#architecture",[],{"id":12352,"title":2751,"titles":12353,"content":2753,"level":136},"/v0.1.3/learn/architecture#pipeline-overview",[1237],{"id":12355,"title":2756,"titles":12356,"content":99,"level":136},"/v0.1.3/learn/architecture#validation-layer",[1237],{"id":12358,"title":1215,"titles":12359,"content":2761,"level":155},"/v0.1.3/learn/architecture#schema-validation",[1237,2756],{"id":12361,"title":2764,"titles":12362,"content":2766,"level":155},"/v0.1.3/learn/architecture#identifier-validation",[1237,2756],{"id":12364,"title":2769,"titles":12365,"content":2771,"level":155},"/v0.1.3/learn/architecture#alias-restrictions",[1237,2756],{"id":12367,"title":2774,"titles":12368,"content":5107,"level":136},"/v0.1.3/learn/architecture#ast-structure",[1237],{"id":12370,"title":2779,"titles":12371,"content":2781,"level":155},"/v0.1.3/learn/architecture#internal-types",[1237,2774],{"id":12373,"title":2784,"titles":12374,"content":2786,"level":155},"/v0.1.3/learn/architecture#condition-types",[1237,2774],{"id":12376,"title":2789,"titles":12377,"content":2791,"level":136},"/v0.1.3/learn/architecture#render-engine",[1237],{"id":12379,"title":2794,"titles":12380,"content":2796,"level":155},"/v0.1.3/learn/architecture#identifier-quoting",[1237,2789],{"id":12382,"title":2799,"titles":12383,"content":2801,"level":155},"/v0.1.3/learn/architecture#parameter-placeholders",[1237,2789],{"id":12385,"title":2804,"titles":12386,"content":2806,"level":155},"/v0.1.3/learn/architecture#parameter-namespacing",[1237,2789],{"id":12388,"title":5128,"titles":12389,"content":12390,"level":136},"/v0.1.3/learn/architecture#provider-architecture",[1237],"Rendering is handled by dialect-specific providers that implement the Renderer interface: type Renderer interface {\n    Render(ast *types.AST) (*types.QueryResult, error)\n    RenderCompound(query *types.CompoundQuery) (*types.QueryResult, error)\n    Capabilities() render.Capabilities\n} The Capabilities() method allows external services to query what features a dialect supports before execution. See the API Reference for details.",{"id":12392,"title":5133,"titles":12393,"content":11362,"level":155},"/v0.1.3/learn/architecture#available-providers",[1237,5128],{"id":12395,"title":3341,"titles":12396,"content":6168,"level":155},"/v0.1.3/learn/architecture#usage",[1237,5128],{"id":12398,"title":5142,"titles":12399,"content":11369,"level":155},"/v0.1.3/learn/architecture#dialect-differences",[1237,5128],{"id":12401,"title":2809,"titles":12402,"content":11373,"level":136},"/v0.1.3/learn/architecture#file-structure",[1237],{"id":12404,"title":2814,"titles":12405,"content":2816,"level":136},"/v0.1.3/learn/architecture#security-layers",[1237],{"id":12407,"title":2819,"titles":12408,"content":99,"level":136},"/v0.1.3/learn/architecture#extension-points",[1237],{"id":12410,"title":2823,"titles":12411,"content":2825,"level":155},"/v0.1.3/learn/architecture#custom-expressions",[1237,2819],{"id":12413,"title":2828,"titles":12414,"content":2830,"level":155},"/v0.1.3/learn/architecture#compound-queries",[1237,2819],{"id":12416,"title":2833,"titles":12417,"content":6191,"level":155},"/v0.1.3/learn/architecture#direct-ast-access",[1237,2819],{"id":12419,"title":1215,"titles":12420,"content":2839,"level":107},"/v0.1.3/guides/schema-validation",[],{"id":12422,"title":1215,"titles":12423,"content":2843,"level":107},"/v0.1.3/guides/schema-validation#schema-validation",[],{"id":12425,"title":2846,"titles":12426,"content":2848,"level":136},"/v0.1.3/guides/schema-validation#defining-a-schema",[1215],{"id":12428,"title":2851,"titles":12429,"content":2853,"level":136},"/v0.1.3/guides/schema-validation#creating-an-instance",[1215],{"id":12431,"title":2856,"titles":12432,"content":99,"level":136},"/v0.1.3/guides/schema-validation#validation-behavior",[1215],{"id":12434,"title":2860,"titles":12435,"content":2862,"level":155},"/v0.1.3/guides/schema-validation#table-validation",[1215,2856],{"id":12437,"title":2670,"titles":12438,"content":2866,"level":155},"/v0.1.3/guides/schema-validation#field-validation",[1215,2856],{"id":12440,"title":2680,"titles":12441,"content":2870,"level":155},"/v0.1.3/guides/schema-validation#parameter-validation",[1215,2856],{"id":12443,"title":2873,"titles":12444,"content":2875,"level":136},"/v0.1.3/guides/schema-validation#panic-vs-error",[1215],{"id":12446,"title":2733,"titles":12447,"content":2879,"level":155},"/v0.1.3/guides/schema-validation#try-variants",[1215,2873],{"id":12449,"title":2882,"titles":12450,"content":2884,"level":155},"/v0.1.3/guides/schema-validation#when-to-use-each",[1215,2873],{"id":12452,"title":2887,"titles":12453,"content":2889,"level":136},"/v0.1.3/guides/schema-validation#table-aliases",[1215],{"id":12455,"title":2769,"titles":12456,"content":2893,"level":155},"/v0.1.3/guides/schema-validation#alias-restrictions",[1215,2887],{"id":12458,"title":2896,"titles":12459,"content":2898,"level":155},"/v0.1.3/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":12461,"title":2901,"titles":12462,"content":99,"level":136},"/v0.1.3/guides/schema-validation#schema-organization",[1215],{"id":12464,"title":2905,"titles":12465,"content":6240,"level":155},"/v0.1.3/guides/schema-validation#single-schema-instance",[1215,2901],{"id":12467,"title":2910,"titles":12468,"content":2912,"level":155},"/v0.1.3/guides/schema-validation#multiple-schemas",[1215,2901],{"id":12470,"title":2915,"titles":12471,"content":99,"level":136},"/v0.1.3/guides/schema-validation#dynamic-queries",[1215],{"id":12473,"title":2919,"titles":12474,"content":6250,"level":155},"/v0.1.3/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":12476,"title":2924,"titles":12477,"content":2926,"level":155},"/v0.1.3/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":12479,"title":2929,"titles":12480,"content":99,"level":136},"/v0.1.3/guides/schema-validation#validation-errors",[1215],{"id":12482,"title":2933,"titles":12483,"content":2935,"level":155},"/v0.1.3/guides/schema-validation#error-types",[1215,2929],{"id":12485,"title":2938,"titles":12486,"content":6263,"level":155},"/v0.1.3/guides/schema-validation#handling-errors",[1215,2929],{"id":12488,"title":1251,"titles":12489,"content":2944,"level":107},"/v0.1.3/guides/conditions",[],{"id":12491,"title":1251,"titles":12492,"content":2948,"level":107},"/v0.1.3/guides/conditions#conditions",[],{"id":12494,"title":2951,"titles":12495,"content":2953,"level":136},"/v0.1.3/guides/conditions#basic-conditions",[1251],{"id":12497,"title":1727,"titles":12498,"content":99,"level":136},"/v0.1.3/guides/conditions#operators",[1251],{"id":12500,"title":2959,"titles":12501,"content":2961,"level":155},"/v0.1.3/guides/conditions#comparison-operators",[1251,1727],{"id":12503,"title":2964,"titles":12504,"content":2966,"level":155},"/v0.1.3/guides/conditions#pattern-matching",[1251,1727],{"id":12506,"title":2969,"titles":12507,"content":2971,"level":155},"/v0.1.3/guides/conditions#null-checks",[1251,1727],{"id":12509,"title":2974,"titles":12510,"content":2976,"level":155},"/v0.1.3/guides/conditions#array-operators",[1251,1727],{"id":12512,"title":2693,"titles":12513,"content":99,"level":136},"/v0.1.3/guides/conditions#combining-conditions",[1251],{"id":12515,"title":2982,"titles":12516,"content":2984,"level":155},"/v0.1.3/guides/conditions#and",[1251,2693],{"id":12518,"title":2987,"titles":12519,"content":2989,"level":155},"/v0.1.3/guides/conditions#or",[1251,2693],{"id":12521,"title":2992,"titles":12522,"content":2994,"level":155},"/v0.1.3/guides/conditions#nested-logic",[1251,2693],{"id":12524,"title":2997,"titles":12525,"content":2999,"level":136},"/v0.1.3/guides/conditions#between",[1251],{"id":12527,"title":2708,"titles":12528,"content":3003,"level":136},"/v0.1.3/guides/conditions#field-comparisons",[1251],{"id":12530,"title":3006,"titles":12531,"content":99,"level":136},"/v0.1.3/guides/conditions#subqueries",[1251],{"id":12533,"title":3010,"titles":12534,"content":3012,"level":155},"/v0.1.3/guides/conditions#in-subquery",[1251,3006],{"id":12536,"title":3015,"titles":12537,"content":3017,"level":155},"/v0.1.3/guides/conditions#not-in-subquery",[1251,3006],{"id":12539,"title":3020,"titles":12540,"content":3022,"level":155},"/v0.1.3/guides/conditions#exists",[1251,3006],{"id":12542,"title":3025,"titles":12543,"content":3027,"level":155},"/v0.1.3/guides/conditions#not-exists",[1251,3006],{"id":12545,"title":2804,"titles":12546,"content":3031,"level":155},"/v0.1.3/guides/conditions#parameter-namespacing",[1251,3006],{"id":12548,"title":3034,"titles":12549,"content":3036,"level":136},"/v0.1.3/guides/conditions#multiple-where-clauses",[1251],{"id":12551,"title":3039,"titles":12552,"content":3041,"level":136},"/v0.1.3/guides/conditions#wherefield-shorthand",[1251],{"id":12554,"title":3044,"titles":12555,"content":3046,"level":136},"/v0.1.3/guides/conditions#building-conditions-dynamically",[1251],{"id":12557,"title":1265,"titles":12558,"content":3050,"level":107},"/v0.1.3/guides/joins",[],{"id":12560,"title":1265,"titles":12561,"content":3054,"level":107},"/v0.1.3/guides/joins#joins",[],{"id":12563,"title":3057,"titles":12564,"content":3059,"level":136},"/v0.1.3/guides/joins#join-types",[1265],{"id":12566,"title":3062,"titles":12567,"content":3064,"level":136},"/v0.1.3/guides/joins#basic-join",[1265],{"id":12569,"title":2887,"titles":12570,"content":3068,"level":136},"/v0.1.3/guides/joins#table-aliases",[1265],{"id":12572,"title":3071,"titles":12573,"content":3073,"level":136},"/v0.1.3/guides/joins#left-join",[1265],{"id":12575,"title":3076,"titles":12576,"content":3078,"level":136},"/v0.1.3/guides/joins#right-join",[1265],{"id":12578,"title":3081,"titles":12579,"content":3083,"level":136},"/v0.1.3/guides/joins#full-outer-join",[1265],{"id":12581,"title":3086,"titles":12582,"content":3088,"level":136},"/v0.1.3/guides/joins#cross-join",[1265],{"id":12584,"title":3091,"titles":12585,"content":3093,"level":136},"/v0.1.3/guides/joins#multiple-joins",[1265],{"id":12587,"title":3096,"titles":12588,"content":3098,"level":136},"/v0.1.3/guides/joins#complex-on-conditions",[1265],{"id":12590,"title":3101,"titles":12591,"content":3103,"level":136},"/v0.1.3/guides/joins#self-joins",[1265],{"id":12593,"title":3106,"titles":12594,"content":3108,"level":136},"/v0.1.3/guides/joins#joins-with-count",[1265],{"id":12596,"title":3111,"titles":12597,"content":3113,"level":136},"/v0.1.3/guides/joins#join-validation",[1265],{"id":12599,"title":1668,"titles":12600,"content":3117,"level":107},"/v0.1.3/guides/aggregates",[],{"id":12602,"title":1668,"titles":12603,"content":3121,"level":107},"/v0.1.3/guides/aggregates#aggregates",[],{"id":12605,"title":3124,"titles":12606,"content":99,"level":136},"/v0.1.3/guides/aggregates#aggregate-functions",[1668],{"id":12608,"title":3128,"titles":12609,"content":3130,"level":155},"/v0.1.3/guides/aggregates#basic-aggregates",[1668,3124],{"id":12611,"title":3133,"titles":12612,"content":3135,"level":155},"/v0.1.3/guides/aggregates#using-aggregates",[1668,3124],{"id":12614,"title":3138,"titles":12615,"content":3140,"level":155},"/v0.1.3/guides/aggregates#aliases",[1668,3124],{"id":12617,"title":3143,"titles":12618,"content":3145,"level":136},"/v0.1.3/guides/aggregates#group-by",[1668],{"id":12620,"title":3148,"titles":12621,"content":3150,"level":136},"/v0.1.3/guides/aggregates#having",[1668],{"id":12623,"title":3153,"titles":12624,"content":3155,"level":155},"/v0.1.3/guides/aggregates#simple-having",[1668,3148],{"id":12626,"title":3158,"titles":12627,"content":3160,"level":155},"/v0.1.3/guides/aggregates#aggregate-having",[1668,3148],{"id":12629,"title":3163,"titles":12630,"content":3165,"level":155},"/v0.1.3/guides/aggregates#having-helpers",[1668,3148],{"id":12632,"title":3168,"titles":12633,"content":3170,"level":136},"/v0.1.3/guides/aggregates#filter-clause",[1668],{"id":12635,"title":3173,"titles":12636,"content":3175,"level":136},"/v0.1.3/guides/aggregates#window-functions",[1668],{"id":12638,"title":3178,"titles":12639,"content":3180,"level":155},"/v0.1.3/guides/aggregates#basic-window-functions",[1668,3173],{"id":12641,"title":3183,"titles":12642,"content":3185,"level":155},"/v0.1.3/guides/aggregates#window-function-types",[1668,3173],{"id":12644,"title":3188,"titles":12645,"content":3190,"level":155},"/v0.1.3/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":12647,"title":3193,"titles":12648,"content":3195,"level":155},"/v0.1.3/guides/aggregates#window-specification",[1668,3173],{"id":12650,"title":3198,"titles":12651,"content":3200,"level":155},"/v0.1.3/guides/aggregates#frame-bounds",[1668,3173],{"id":12653,"title":3203,"titles":12654,"content":99,"level":136},"/v0.1.3/guides/aggregates#math-functions",[1668],{"id":12656,"title":3207,"titles":12657,"content":3209,"level":155},"/v0.1.3/guides/aggregates#available-functions",[1668,3203],{"id":12659,"title":3212,"titles":12660,"content":3214,"level":155},"/v0.1.3/guides/aggregates#example",[1668,3203],{"id":12662,"title":1270,"titles":12663,"content":3218,"level":136},"/v0.1.3/guides/aggregates#case-expressions",[1668],{"id":12665,"title":3221,"titles":12666,"content":3223,"level":136},"/v0.1.3/guides/aggregates#type-casting",[1668],{"id":12668,"title":3226,"titles":12669,"content":3228,"level":136},"/v0.1.3/guides/aggregates#coalesce-and-nullif",[1668],{"id":12671,"title":1675,"titles":12672,"content":3232,"level":107},"/v0.1.3/guides/testing",[],{"id":12674,"title":1675,"titles":12675,"content":3236,"level":107},"/v0.1.3/guides/testing#testing",[],{"id":12677,"title":3239,"titles":12678,"content":99,"level":136},"/v0.1.3/guides/testing#testing-query-output",[1675],{"id":12680,"title":3243,"titles":12681,"content":6459,"level":155},"/v0.1.3/guides/testing#basic-output-testing",[1675,3239],{"id":12683,"title":3248,"titles":12684,"content":3250,"level":155},"/v0.1.3/guides/testing#test-instance-setup",[1675,3239],{"id":12686,"title":3253,"titles":12687,"content":99,"level":136},"/v0.1.3/guides/testing#table-driven-tests",[1675],{"id":12689,"title":3257,"titles":12690,"content":6469,"level":155},"/v0.1.3/guides/testing#testing-multiple-queries",[1675,3253],{"id":12692,"title":3262,"titles":12693,"content":99,"level":136},"/v0.1.3/guides/testing#testing-validation",[1675],{"id":12695,"title":3266,"titles":12696,"content":3268,"level":155},"/v0.1.3/guides/testing#testing-invalid-input",[1675,3262],{"id":12698,"title":3271,"titles":12699,"content":3273,"level":155},"/v0.1.3/guides/testing#testing-try-variants",[1675,3262],{"id":12701,"title":3276,"titles":12702,"content":99,"level":136},"/v0.1.3/guides/testing#testing-error-cases",[1675],{"id":12704,"title":3280,"titles":12705,"content":6485,"level":155},"/v0.1.3/guides/testing#builder-errors",[1675,3276],{"id":12707,"title":3285,"titles":12708,"content":99,"level":136},"/v0.1.3/guides/testing#testing-complex-queries",[1675],{"id":12710,"title":3289,"titles":12711,"content":6492,"level":155},"/v0.1.3/guides/testing#join-tests",[1675,3285],{"id":12713,"title":3294,"titles":12714,"content":6496,"level":155},"/v0.1.3/guides/testing#subquery-tests",[1675,3285],{"id":12716,"title":3299,"titles":12717,"content":3301,"level":136},"/v0.1.3/guides/testing#snapshot-testing",[1675],{"id":12719,"title":3304,"titles":12720,"content":99,"level":136},"/v0.1.3/guides/testing#best-practices",[1675],{"id":12722,"title":3308,"titles":12723,"content":3310,"level":155},"/v0.1.3/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":12725,"title":3313,"titles":12726,"content":3315,"level":155},"/v0.1.3/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":12728,"title":3318,"titles":12729,"content":3320,"level":155},"/v0.1.3/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":12731,"title":3323,"titles":12732,"content":6515,"level":155},"/v0.1.3/guides/testing#_4-test-edge-cases",[1675,3304],{"id":12734,"title":1688,"titles":12735,"content":3329,"level":107},"/v0.1.3/cookbook/pagination",[],{"id":12737,"title":1688,"titles":12738,"content":3333,"level":107},"/v0.1.3/cookbook/pagination#pagination",[],{"id":12740,"title":3336,"titles":12741,"content":6525,"level":136},"/v0.1.3/cookbook/pagination#offset-pagination",[1688],{"id":12743,"title":3341,"titles":12744,"content":3343,"level":155},"/v0.1.3/cookbook/pagination#usage",[1688,3336],{"id":12746,"title":3346,"titles":12747,"content":6532,"level":155},"/v0.1.3/cookbook/pagination#with-total-count",[1688,3336],{"id":12749,"title":3351,"titles":12750,"content":3353,"level":155},"/v0.1.3/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":12752,"title":3356,"titles":12753,"content":6539,"level":136},"/v0.1.3/cookbook/pagination#cursor-pagination",[1688],{"id":12755,"title":3341,"titles":12756,"content":3362,"level":155},"/v0.1.3/cookbook/pagination#usage-1",[1688,3356],{"id":12758,"title":3365,"titles":12759,"content":6546,"level":155},"/v0.1.3/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":12761,"title":3370,"titles":12762,"content":6550,"level":155},"/v0.1.3/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":12764,"title":3375,"titles":12765,"content":6554,"level":136},"/v0.1.3/cookbook/pagination#filtering-with-pagination",[1688],{"id":12767,"title":3380,"titles":12768,"content":6558,"level":136},"/v0.1.3/cookbook/pagination#pagination-with-joins",[1688],{"id":12770,"title":3304,"titles":12771,"content":99,"level":136},"/v0.1.3/cookbook/pagination#best-practices",[1688],{"id":12773,"title":3388,"titles":12774,"content":6565,"level":155},"/v0.1.3/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":12776,"title":3393,"titles":12777,"content":3395,"level":155},"/v0.1.3/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":12779,"title":3398,"titles":12780,"content":3400,"level":155},"/v0.1.3/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":12782,"title":3403,"titles":12783,"content":3405,"level":155},"/v0.1.3/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":12785,"title":1695,"titles":12786,"content":3409,"level":107},"/v0.1.3/cookbook/vector-search",[],{"id":12788,"title":1695,"titles":12789,"content":3413,"level":107},"/v0.1.3/cookbook/vector-search#vector-search",[],{"id":12791,"title":3416,"titles":12792,"content":3418,"level":136},"/v0.1.3/cookbook/vector-search#schema-setup",[1695],{"id":12794,"title":3421,"titles":12795,"content":3423,"level":136},"/v0.1.3/cookbook/vector-search#distance-operators",[1695],{"id":12797,"title":3426,"titles":12798,"content":3428,"level":136},"/v0.1.3/cookbook/vector-search#basic-similarity-search",[1695],{"id":12800,"title":3431,"titles":12801,"content":3433,"level":155},"/v0.1.3/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":12803,"title":3436,"titles":12804,"content":3438,"level":136},"/v0.1.3/cookbook/vector-search#cosine-similarity",[1695],{"id":12806,"title":3441,"titles":12807,"content":3443,"level":136},"/v0.1.3/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":12809,"title":3446,"titles":12810,"content":3448,"level":136},"/v0.1.3/cookbook/vector-search#filtered-vector-search",[1695],{"id":12812,"title":3451,"titles":12813,"content":3453,"level":136},"/v0.1.3/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":12815,"title":3456,"titles":12816,"content":3458,"level":136},"/v0.1.3/cookbook/vector-search#hybrid-search",[1695],{"id":12818,"title":3461,"titles":12819,"content":3463,"level":136},"/v0.1.3/cookbook/vector-search#multi-vector-search",[1695],{"id":12821,"title":3466,"titles":12822,"content":3468,"level":136},"/v0.1.3/cookbook/vector-search#indexing-recommendations",[1695],{"id":12824,"title":3304,"titles":12825,"content":99,"level":136},"/v0.1.3/cookbook/vector-search#best-practices",[1695],{"id":12827,"title":3474,"titles":12828,"content":3476,"level":155},"/v0.1.3/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":12830,"title":3479,"titles":12831,"content":3481,"level":155},"/v0.1.3/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":12833,"title":3484,"titles":12834,"content":3486,"level":155},"/v0.1.3/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":12836,"title":1702,"titles":12837,"content":3490,"level":107},"/v0.1.3/cookbook/upserts",[],{"id":12839,"title":1702,"titles":12840,"content":3494,"level":107},"/v0.1.3/cookbook/upserts#upserts",[],{"id":12842,"title":3497,"titles":12843,"content":6635,"level":136},"/v0.1.3/cookbook/upserts#basic-upsert",[1702],{"id":12845,"title":3502,"titles":12846,"content":6639,"level":136},"/v0.1.3/cookbook/upserts#do-nothing",[1702],{"id":12848,"title":3507,"titles":12849,"content":6643,"level":136},"/v0.1.3/cookbook/upserts#multi-column-conflict",[1702],{"id":12851,"title":3512,"titles":12852,"content":6647,"level":136},"/v0.1.3/cookbook/upserts#returning-with-upsert",[1702],{"id":12854,"title":3517,"titles":12855,"content":6651,"level":136},"/v0.1.3/cookbook/upserts#batch-upsert",[1702],{"id":12857,"title":3522,"titles":12858,"content":6655,"level":136},"/v0.1.3/cookbook/upserts#conditional-upsert",[1702],{"id":12860,"title":3527,"titles":12861,"content":6659,"level":136},"/v0.1.3/cookbook/upserts#sync-pattern",[1702],{"id":12863,"title":3532,"titles":12864,"content":6663,"level":136},"/v0.1.3/cookbook/upserts#upsert-with-timestamps",[1702],{"id":12866,"title":3304,"titles":12867,"content":99,"level":136},"/v0.1.3/cookbook/upserts#best-practices",[1702],{"id":12869,"title":3540,"titles":12870,"content":3542,"level":155},"/v0.1.3/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":12872,"title":3545,"titles":12873,"content":3547,"level":155},"/v0.1.3/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":12875,"title":3550,"titles":12876,"content":3552,"level":155},"/v0.1.3/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":12878,"title":3555,"titles":12879,"content":3557,"level":155},"/v0.1.3/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":12881,"title":1709,"titles":12882,"content":6682,"level":107},"/v0.1.3/cookbook/orm-foundation",[],{"id":12884,"title":1709,"titles":12885,"content":6686,"level":107},"/v0.1.3/cookbook/orm-foundation#orm-foundation",[],{"id":12887,"title":6689,"titles":12888,"content":6691,"level":136},"/v0.1.3/cookbook/orm-foundation#the-result",[1709],{"id":12890,"title":6694,"titles":12891,"content":6696,"level":136},"/v0.1.3/cookbook/orm-foundation#the-architecture",[1709],{"id":12893,"title":6699,"titles":12894,"content":6701,"level":136},"/v0.1.3/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":12896,"title":6704,"titles":12897,"content":6706,"level":155},"/v0.1.3/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":12899,"title":6709,"titles":12900,"content":6711,"level":155},"/v0.1.3/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":12902,"title":6714,"titles":12903,"content":6716,"level":155},"/v0.1.3/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":12905,"title":6719,"titles":12906,"content":6721,"level":155},"/v0.1.3/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":12908,"title":6724,"titles":12909,"content":6726,"level":136},"/v0.1.3/cookbook/orm-foundation#the-security-model",[1709],{"id":12911,"title":6729,"titles":12912,"content":6731,"level":136},"/v0.1.3/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":12914,"title":6734,"titles":12915,"content":6736,"level":136},"/v0.1.3/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":12917,"title":6739,"titles":12918,"content":6741,"level":155},"/v0.1.3/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":12920,"title":6744,"titles":12921,"content":6746,"level":155},"/v0.1.3/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":12923,"title":6749,"titles":12924,"content":6751,"level":155},"/v0.1.3/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":12926,"title":6754,"titles":12927,"content":6756,"level":155},"/v0.1.3/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":12929,"title":6759,"titles":12930,"content":6761,"level":136},"/v0.1.3/cookbook/orm-foundation#see-also",[1709],{"id":12932,"title":3560,"titles":12933,"content":3562,"level":107},"/v0.1.3/reference/api",[],{"id":12935,"title":3560,"titles":12936,"content":3566,"level":107},"/v0.1.3/reference/api#api-reference",[],{"id":12938,"title":3569,"titles":12939,"content":99,"level":136},"/v0.1.3/reference/api#instance-creation",[3560],{"id":12941,"title":856,"titles":12942,"content":3574,"level":155},"/v0.1.3/reference/api#newfromdbml",[3560,3569],{"id":12944,"title":3577,"titles":12945,"content":99,"level":136},"/v0.1.3/reference/api#instance-methods",[3560],{"id":12947,"title":119,"titles":12948,"content":3582,"level":155},"/v0.1.3/reference/api#t",[3560,3577],{"id":12950,"title":3585,"titles":12951,"content":3587,"level":155},"/v0.1.3/reference/api#tryt",[3560,3577],{"id":12953,"title":169,"titles":12954,"content":3591,"level":155},"/v0.1.3/reference/api#f",[3560,3577],{"id":12956,"title":3594,"titles":12957,"content":3596,"level":155},"/v0.1.3/reference/api#tryf",[3560,3577],{"id":12959,"title":316,"titles":12960,"content":3600,"level":155},"/v0.1.3/reference/api#p",[3560,3577],{"id":12962,"title":3603,"titles":12963,"content":3605,"level":155},"/v0.1.3/reference/api#tryp",[3560,3577],{"id":12965,"title":284,"titles":12966,"content":3609,"level":155},"/v0.1.3/reference/api#c",[3560,3577],{"id":12968,"title":3612,"titles":12969,"content":3614,"level":155},"/v0.1.3/reference/api#tryc",[3560,3577],{"id":12971,"title":3617,"titles":12972,"content":3619,"level":155},"/v0.1.3/reference/api#and",[3560,3577],{"id":12974,"title":3622,"titles":12975,"content":3624,"level":155},"/v0.1.3/reference/api#or",[3560,3577],{"id":12977,"title":3627,"titles":12978,"content":3629,"level":155},"/v0.1.3/reference/api#null",[3560,3577],{"id":12980,"title":3632,"titles":12981,"content":3634,"level":155},"/v0.1.3/reference/api#notnull",[3560,3577],{"id":12983,"title":3637,"titles":12984,"content":3639,"level":155},"/v0.1.3/reference/api#withtable",[3560,3577],{"id":12986,"title":3642,"titles":12987,"content":3644,"level":155},"/v0.1.3/reference/api#trywithtable",[3560,3577],{"id":12989,"title":3647,"titles":12990,"content":3649,"level":155},"/v0.1.3/reference/api#aggc",[3560,3577],{"id":12992,"title":3652,"titles":12993,"content":3654,"level":155},"/v0.1.3/reference/api#tryaggc",[3560,3577],{"id":12995,"title":3657,"titles":12996,"content":3659,"level":155},"/v0.1.3/reference/api#valuemap",[3560,3577],{"id":12998,"title":3662,"titles":12999,"content":99,"level":136},"/v0.1.3/reference/api#query-builders",[3560],{"id":13001,"title":219,"titles":13002,"content":3667,"level":155},"/v0.1.3/reference/api#select",[3560,3662],{"id":13004,"title":3670,"titles":13005,"content":3672,"level":155},"/v0.1.3/reference/api#insert",[3560,3662],{"id":13007,"title":3675,"titles":13008,"content":3677,"level":155},"/v0.1.3/reference/api#update",[3560,3662],{"id":13010,"title":3680,"titles":13011,"content":3682,"level":155},"/v0.1.3/reference/api#delete",[3560,3662],{"id":13013,"title":3685,"titles":13014,"content":3687,"level":155},"/v0.1.3/reference/api#count",[3560,3662],{"id":13016,"title":3690,"titles":13017,"content":99,"level":136},"/v0.1.3/reference/api#builder-methods",[3560],{"id":13019,"title":2665,"titles":13020,"content":3695,"level":155},"/v0.1.3/reference/api#fields",[3560,3690],{"id":13022,"title":3698,"titles":13023,"content":3700,"level":155},"/v0.1.3/reference/api#where",[3560,3690],{"id":13025,"title":3703,"titles":13026,"content":3705,"level":155},"/v0.1.3/reference/api#wherefield",[3560,3690],{"id":13028,"title":3708,"titles":13029,"content":3710,"level":155},"/v0.1.3/reference/api#orderby",[3560,3690],{"id":13031,"title":3713,"titles":13032,"content":3715,"level":155},"/v0.1.3/reference/api#orderbynulls",[3560,3690],{"id":13034,"title":3718,"titles":13035,"content":3720,"level":155},"/v0.1.3/reference/api#orderbyexpr",[3560,3690],{"id":13037,"title":3723,"titles":13038,"content":5734,"level":155},"/v0.1.3/reference/api#limit",[3560,3690],{"id":13040,"title":5737,"titles":13041,"content":5739,"level":155},"/v0.1.3/reference/api#limitparam",[3560,3690],{"id":13043,"title":3728,"titles":13044,"content":5743,"level":155},"/v0.1.3/reference/api#offset",[3560,3690],{"id":13046,"title":5746,"titles":13047,"content":5748,"level":155},"/v0.1.3/reference/api#offsetparam",[3560,3690],{"id":13049,"title":3733,"titles":13050,"content":3735,"level":155},"/v0.1.3/reference/api#set",[3560,3690],{"id":13052,"title":3738,"titles":13053,"content":3740,"level":155},"/v0.1.3/reference/api#values",[3560,3690],{"id":13055,"title":3743,"titles":13056,"content":3745,"level":155},"/v0.1.3/reference/api#returning",[3560,3690],{"id":13058,"title":3748,"titles":13059,"content":3750,"level":155},"/v0.1.3/reference/api#distinct",[3560,3690],{"id":13061,"title":3753,"titles":13062,"content":3755,"level":155},"/v0.1.3/reference/api#distincton",[3560,3690],{"id":13064,"title":3758,"titles":13065,"content":3760,"level":155},"/v0.1.3/reference/api#groupby",[3560,3690],{"id":13067,"title":3763,"titles":13068,"content":3765,"level":155},"/v0.1.3/reference/api#having",[3560,3690],{"id":13070,"title":3768,"titles":13071,"content":3770,"level":155},"/v0.1.3/reference/api#havingagg",[3560,3690],{"id":13073,"title":3773,"titles":13074,"content":3775,"level":155},"/v0.1.3/reference/api#selectexpr",[3560,3690],{"id":13076,"title":3778,"titles":13077,"content":3780,"level":155},"/v0.1.3/reference/api#onconflict",[3560,3690],{"id":13079,"title":3783,"titles":13080,"content":3785,"level":155},"/v0.1.3/reference/api#join-methods",[3560,3690],{"id":13082,"title":3788,"titles":13083,"content":3790,"level":155},"/v0.1.3/reference/api#row-locking",[3560,3690],{"id":13085,"title":3793,"titles":13086,"content":3795,"level":155},"/v0.1.3/reference/api#build",[3560,3690],{"id":13088,"title":3798,"titles":13089,"content":3800,"level":155},"/v0.1.3/reference/api#mustbuild",[3560,3690],{"id":13091,"title":350,"titles":13092,"content":6924,"level":155},"/v0.1.3/reference/api#render",[3560,3690],{"id":13094,"title":3807,"titles":13095,"content":6928,"level":155},"/v0.1.3/reference/api#mustrender",[3560,3690],{"id":13097,"title":3812,"titles":13098,"content":99,"level":136},"/v0.1.3/reference/api#set-operations",[3560],{"id":13100,"title":3816,"titles":13101,"content":3818,"level":155},"/v0.1.3/reference/api#union-unionall",[3560,3812],{"id":13103,"title":3821,"titles":13104,"content":3823,"level":155},"/v0.1.3/reference/api#intersect-intersectall",[3560,3812],{"id":13106,"title":3826,"titles":13107,"content":3828,"level":155},"/v0.1.3/reference/api#except-exceptall",[3560,3812],{"id":13109,"title":3831,"titles":13110,"content":6944,"level":136},"/v0.1.3/reference/api#rendering",[3560],{"id":13112,"title":3844,"titles":13113,"content":99,"level":136},"/v0.1.3/reference/api#expression-functions",[3560],{"id":13115,"title":1668,"titles":13116,"content":3849,"level":155},"/v0.1.3/reference/api#aggregates",[3560,3844],{"id":13118,"title":3852,"titles":13119,"content":3854,"level":155},"/v0.1.3/reference/api#filter-aggregates",[3560,3844],{"id":13121,"title":1251,"titles":13122,"content":3858,"level":155},"/v0.1.3/reference/api#conditions",[3560,3844],{"id":13124,"title":3006,"titles":13125,"content":3862,"level":155},"/v0.1.3/reference/api#subqueries",[3560,3844],{"id":13127,"title":3865,"titles":13128,"content":3867,"level":155},"/v0.1.3/reference/api#case-expression",[3560,3844],{"id":13130,"title":3870,"titles":13131,"content":3872,"level":155},"/v0.1.3/reference/api#null-handling",[3560,3844],{"id":13133,"title":3203,"titles":13134,"content":3876,"level":155},"/v0.1.3/reference/api#math-functions",[3560,3844],{"id":13136,"title":5855,"titles":13137,"content":5857,"level":155},"/v0.1.3/reference/api#string-functions",[3560,3844],{"id":13139,"title":5860,"titles":13140,"content":5862,"level":155},"/v0.1.3/reference/api#date-functions",[3560,3844],{"id":13142,"title":3221,"titles":13143,"content":3880,"level":155},"/v0.1.3/reference/api#type-casting",[3560,3844],{"id":13145,"title":3173,"titles":13146,"content":3884,"level":155},"/v0.1.3/reference/api#window-functions",[3560,3844],{"id":13148,"title":3193,"titles":13149,"content":3888,"level":155},"/v0.1.3/reference/api#window-specification",[3560,3844],{"id":13151,"title":3891,"titles":13152,"content":3893,"level":155},"/v0.1.3/reference/api#windowbuilder-methods",[3560,3844],{"id":13154,"title":3896,"titles":13155,"content":3898,"level":155},"/v0.1.3/reference/api#expression-alias",[3560,3844],{"id":13157,"title":3163,"titles":13158,"content":3902,"level":155},"/v0.1.3/reference/api#having-helpers",[3560,3844],{"id":13160,"title":3905,"titles":13161,"content":99,"level":136},"/v0.1.3/reference/api#types",[3560],{"id":13163,"title":3909,"titles":13164,"content":3911,"level":155},"/v0.1.3/reference/api#queryresult",[3560,3905],{"id":13166,"title":3914,"titles":13167,"content":3916,"level":155},"/v0.1.3/reference/api#direction",[3560,3905],{"id":13169,"title":3919,"titles":13170,"content":3921,"level":155},"/v0.1.3/reference/api#nullsordering",[3560,3905],{"id":13172,"title":3924,"titles":13173,"content":5896,"level":155},"/v0.1.3/reference/api#operation",[3560,3905],{"id":13175,"title":5899,"titles":13176,"content":99,"level":136},"/v0.1.3/reference/api#providers",[3560],{"id":13178,"title":5903,"titles":13179,"content":13180,"level":155},"/v0.1.3/reference/api#renderer-interface",[3560,5899],"type Renderer interface {\n    Render(ast *types.AST) (*types.QueryResult, error)\n    RenderCompound(query *types.CompoundQuery) (*types.QueryResult, error)\n    Capabilities() render.Capabilities\n}",{"id":13182,"title":1187,"titles":13183,"content":13184,"level":155},"/v0.1.3/reference/api#capabilities",[3560,5899],"Query dialect capabilities before execution: type Capabilities struct {\n    DistinctOn          bool            // DISTINCT ON (field, ...)\n    Upsert              bool            // ON CONFLICT / ON DUPLICATE KEY\n    Returning           bool            // RETURNING clause\n    CaseInsensitiveLike bool            // ILIKE operator\n    RegexOperators      bool            // ~, ~*, !~, !~*\n    ArrayOperators      bool            // @>, \u003C@, &&\n    InArray             bool            // IN (:array_param)\n    RowLocking          RowLockingLevel // FOR UPDATE/SHARE support\n}\n\ntype RowLockingLevel int\n\nconst (\n    RowLockingNone  RowLockingLevel = iota // No row locking\n    RowLockingBasic                        // FOR UPDATE, FOR SHARE\n    RowLockingFull                         // + FOR NO KEY UPDATE, FOR KEY SHARE\n) Example usage: renderer := postgres.New()\ncaps := renderer.Capabilities()\n\nif caps.Upsert {\n    // Safe to use ON CONFLICT\n}",{"id":13186,"title":5908,"titles":13187,"content":7017,"level":155},"/v0.1.3/reference/api#postgresql-provider",[3560,5899],{"id":13189,"title":5913,"titles":13190,"content":7021,"level":155},"/v0.1.3/reference/api#sqlite-provider",[3560,5899],{"id":13192,"title":12159,"titles":13193,"content":12161,"level":155},"/v0.1.3/reference/api#mariadb-provider",[3560,5899],{"id":13195,"title":5923,"titles":13196,"content":7029,"level":155},"/v0.1.3/reference/api#sql-server-provider",[3560,5899],{"id":13198,"title":3929,"titles":13199,"content":3931,"level":107},"/v0.1.3/reference/operators",[],{"id":13201,"title":3929,"titles":13202,"content":3935,"level":107},"/v0.1.3/reference/operators#operators-reference",[],{"id":13204,"title":2959,"titles":13205,"content":3939,"level":136},"/v0.1.3/reference/operators#comparison-operators",[3929],{"id":13207,"title":3341,"titles":13208,"content":3943,"level":155},"/v0.1.3/reference/operators#usage",[3929,2959],{"id":13210,"title":2964,"titles":13211,"content":3947,"level":136},"/v0.1.3/reference/operators#pattern-matching",[3929],{"id":13213,"title":3341,"titles":13214,"content":3951,"level":155},"/v0.1.3/reference/operators#usage-1",[3929,2964],{"id":13216,"title":3954,"titles":13217,"content":3956,"level":136},"/v0.1.3/reference/operators#null-operators",[3929],{"id":13219,"title":3341,"titles":13220,"content":3960,"level":155},"/v0.1.3/reference/operators#usage-2",[3929,3954],{"id":13222,"title":2974,"titles":13223,"content":3964,"level":136},"/v0.1.3/reference/operators#array-operators",[3929],{"id":13225,"title":3341,"titles":13226,"content":3968,"level":155},"/v0.1.3/reference/operators#usage-3",[3929,2974],{"id":13228,"title":3971,"titles":13229,"content":3973,"level":155},"/v0.1.3/reference/operators#with-sqlx",[3929,2974],{"id":13231,"title":3976,"titles":13232,"content":3978,"level":136},"/v0.1.3/reference/operators#subquery-operators",[3929],{"id":13234,"title":3341,"titles":13235,"content":3982,"level":155},"/v0.1.3/reference/operators#usage-4",[3929,3976],{"id":13237,"title":3985,"titles":13238,"content":3987,"level":136},"/v0.1.3/reference/operators#regex-operators",[3929],{"id":13240,"title":3341,"titles":13241,"content":3991,"level":155},"/v0.1.3/reference/operators#usage-5",[3929,3985],{"id":13243,"title":3994,"titles":13244,"content":3996,"level":136},"/v0.1.3/reference/operators#postgresql-array-operators",[3929],{"id":13246,"title":3341,"titles":13247,"content":4000,"level":155},"/v0.1.3/reference/operators#usage-6",[3929,3994],{"id":13249,"title":4003,"titles":13250,"content":4005,"level":136},"/v0.1.3/reference/operators#vector-operators-pgvector",[3929],{"id":13252,"title":3341,"titles":13253,"content":4009,"level":155},"/v0.1.3/reference/operators#usage-7",[3929,4003],{"id":13255,"title":4012,"titles":13256,"content":4014,"level":155},"/v0.1.3/reference/operators#with-pgvector",[3929,4003],{"id":13258,"title":4017,"titles":13259,"content":4019,"level":136},"/v0.1.3/reference/operators#operator-selection-guide",[3929],{"id":13261,"title":3124,"titles":13262,"content":4023,"level":136},"/v0.1.3/reference/operators#aggregate-functions",[3929],{"id":13264,"title":3173,"titles":13265,"content":4027,"level":136},"/v0.1.3/reference/operators#window-functions",[3929],{"id":13267,"title":3198,"titles":13268,"content":4031,"level":136},"/v0.1.3/reference/operators#frame-bounds",[3929],{"id":13270,"title":4034,"titles":13271,"content":4036,"level":136},"/v0.1.3/reference/operators#cast-types",[3929],{"id":13273,"title":1614,"titles":13274,"content":2581,"level":107},"/v0.1.4/overview",[],{"id":13276,"title":1614,"titles":13277,"content":6007,"level":107},"/v0.1.4/overview#overview",[],{"id":13279,"title":1237,"titles":13280,"content":2589,"level":136},"/v0.1.4/overview#architecture",[1614],{"id":13282,"title":2592,"titles":13283,"content":2594,"level":136},"/v0.1.4/overview#philosophy",[1614],{"id":13285,"title":1187,"titles":13286,"content":2598,"level":136},"/v0.1.4/overview#capabilities",[1614],{"id":13288,"title":2601,"titles":13289,"content":99,"level":136},"/v0.1.4/overview#priorities",[1614],{"id":13291,"title":1782,"titles":13292,"content":2606,"level":155},"/v0.1.4/overview#security",[1614,2601],{"id":13294,"title":2609,"titles":13295,"content":6026,"level":155},"/v0.1.4/overview#ergonomics",[1614,2601],{"id":13297,"title":5002,"titles":13298,"content":6030,"level":155},"/v0.1.4/overview#multi-provider-architecture",[1614,2601],{"id":13300,"title":1628,"titles":13301,"content":2620,"level":107},"/v0.1.4/learn/quickstart",[],{"id":13303,"title":1628,"titles":13304,"content":99,"level":107},"/v0.1.4/learn/quickstart#quickstart",[],{"id":13306,"title":2626,"titles":13307,"content":6040,"level":136},"/v0.1.4/learn/quickstart#requirements",[1628],{"id":13309,"title":2631,"titles":13310,"content":2633,"level":136},"/v0.1.4/learn/quickstart#installation",[1628],{"id":13312,"title":2636,"titles":13313,"content":6047,"level":136},"/v0.1.4/learn/quickstart#basic-usage",[1628],{"id":13315,"title":2641,"titles":13316,"content":6051,"level":136},"/v0.1.4/learn/quickstart#whats-happening",[1628],{"id":13318,"title":2646,"titles":13319,"content":6055,"level":136},"/v0.1.4/learn/quickstart#using-with-sqlx",[1628],{"id":13321,"title":2651,"titles":13322,"content":2653,"level":107},"/v0.1.4/learn/concepts",[],{"id":13324,"title":2651,"titles":13325,"content":2657,"level":107},"/v0.1.4/learn/concepts#core-concepts",[],{"id":13327,"title":2660,"titles":13328,"content":2662,"level":136},"/v0.1.4/learn/concepts#tables",[2651],{"id":13330,"title":2665,"titles":13331,"content":2667,"level":136},"/v0.1.4/learn/concepts#fields",[2651],{"id":13333,"title":2670,"titles":13334,"content":2672,"level":155},"/v0.1.4/learn/concepts#field-validation",[2651,2665],{"id":13336,"title":2675,"titles":13337,"content":2677,"level":136},"/v0.1.4/learn/concepts#params",[2651],{"id":13339,"title":2680,"titles":13340,"content":2682,"level":155},"/v0.1.4/learn/concepts#parameter-validation",[2651,2675],{"id":13342,"title":1251,"titles":13343,"content":2686,"level":136},"/v0.1.4/learn/concepts#conditions",[2651],{"id":13345,"title":1727,"titles":13346,"content":2690,"level":155},"/v0.1.4/learn/concepts#operators",[2651,1251],{"id":13348,"title":2693,"titles":13349,"content":2695,"level":155},"/v0.1.4/learn/concepts#combining-conditions",[2651,1251],{"id":13351,"title":2698,"titles":13352,"content":2700,"level":155},"/v0.1.4/learn/concepts#nested-conditions",[2651,1251],{"id":13354,"title":2703,"titles":13355,"content":2705,"level":155},"/v0.1.4/learn/concepts#null-conditions",[2651,1251],{"id":13357,"title":2708,"titles":13358,"content":2710,"level":155},"/v0.1.4/learn/concepts#field-comparisons",[2651,1251],{"id":13360,"title":2713,"titles":13361,"content":2715,"level":136},"/v0.1.4/learn/concepts#builders",[2651],{"id":13363,"title":2718,"titles":13364,"content":6101,"level":155},"/v0.1.4/learn/concepts#fluent-api",[2651,2713],{"id":13366,"title":2723,"titles":13367,"content":6105,"level":155},"/v0.1.4/learn/concepts#build-vs-render",[2651,2713],{"id":13369,"title":2728,"titles":13370,"content":6109,"level":155},"/v0.1.4/learn/concepts#must-variants",[2651,2713],{"id":13372,"title":2733,"titles":13373,"content":2735,"level":136},"/v0.1.4/learn/concepts#try-variants",[2651],{"id":13375,"title":2738,"titles":13376,"content":2740,"level":136},"/v0.1.4/learn/concepts#query-result",[2651],{"id":13378,"title":1237,"titles":13379,"content":2744,"level":107},"/v0.1.4/learn/architecture",[],{"id":13381,"title":1237,"titles":13382,"content":2748,"level":107},"/v0.1.4/learn/architecture#architecture",[],{"id":13384,"title":2751,"titles":13385,"content":2753,"level":136},"/v0.1.4/learn/architecture#pipeline-overview",[1237],{"id":13387,"title":2756,"titles":13388,"content":99,"level":136},"/v0.1.4/learn/architecture#validation-layer",[1237],{"id":13390,"title":1215,"titles":13391,"content":2761,"level":155},"/v0.1.4/learn/architecture#schema-validation",[1237,2756],{"id":13393,"title":2764,"titles":13394,"content":2766,"level":155},"/v0.1.4/learn/architecture#identifier-validation",[1237,2756],{"id":13396,"title":2769,"titles":13397,"content":2771,"level":155},"/v0.1.4/learn/architecture#alias-restrictions",[1237,2756],{"id":13399,"title":2774,"titles":13400,"content":5107,"level":136},"/v0.1.4/learn/architecture#ast-structure",[1237],{"id":13402,"title":2779,"titles":13403,"content":2781,"level":155},"/v0.1.4/learn/architecture#internal-types",[1237,2774],{"id":13405,"title":2784,"titles":13406,"content":2786,"level":155},"/v0.1.4/learn/architecture#condition-types",[1237,2774],{"id":13408,"title":2789,"titles":13409,"content":2791,"level":136},"/v0.1.4/learn/architecture#render-engine",[1237],{"id":13411,"title":2794,"titles":13412,"content":2796,"level":155},"/v0.1.4/learn/architecture#identifier-quoting",[1237,2789],{"id":13414,"title":2799,"titles":13415,"content":2801,"level":155},"/v0.1.4/learn/architecture#parameter-placeholders",[1237,2789],{"id":13417,"title":2804,"titles":13418,"content":2806,"level":155},"/v0.1.4/learn/architecture#parameter-namespacing",[1237,2789],{"id":13420,"title":5128,"titles":13421,"content":12390,"level":136},"/v0.1.4/learn/architecture#provider-architecture",[1237],{"id":13423,"title":5133,"titles":13424,"content":11362,"level":155},"/v0.1.4/learn/architecture#available-providers",[1237,5128],{"id":13426,"title":3341,"titles":13427,"content":6168,"level":155},"/v0.1.4/learn/architecture#usage",[1237,5128],{"id":13429,"title":5142,"titles":13430,"content":11369,"level":155},"/v0.1.4/learn/architecture#dialect-differences",[1237,5128],{"id":13432,"title":2809,"titles":13433,"content":11373,"level":136},"/v0.1.4/learn/architecture#file-structure",[1237],{"id":13435,"title":2814,"titles":13436,"content":2816,"level":136},"/v0.1.4/learn/architecture#security-layers",[1237],{"id":13438,"title":2819,"titles":13439,"content":99,"level":136},"/v0.1.4/learn/architecture#extension-points",[1237],{"id":13441,"title":2823,"titles":13442,"content":2825,"level":155},"/v0.1.4/learn/architecture#custom-expressions",[1237,2819],{"id":13444,"title":2828,"titles":13445,"content":2830,"level":155},"/v0.1.4/learn/architecture#compound-queries",[1237,2819],{"id":13447,"title":2833,"titles":13448,"content":6191,"level":155},"/v0.1.4/learn/architecture#direct-ast-access",[1237,2819],{"id":13450,"title":1215,"titles":13451,"content":2839,"level":107},"/v0.1.4/guides/schema-validation",[],{"id":13453,"title":1215,"titles":13454,"content":2843,"level":107},"/v0.1.4/guides/schema-validation#schema-validation",[],{"id":13456,"title":2846,"titles":13457,"content":2848,"level":136},"/v0.1.4/guides/schema-validation#defining-a-schema",[1215],{"id":13459,"title":2851,"titles":13460,"content":2853,"level":136},"/v0.1.4/guides/schema-validation#creating-an-instance",[1215],{"id":13462,"title":2856,"titles":13463,"content":99,"level":136},"/v0.1.4/guides/schema-validation#validation-behavior",[1215],{"id":13465,"title":2860,"titles":13466,"content":2862,"level":155},"/v0.1.4/guides/schema-validation#table-validation",[1215,2856],{"id":13468,"title":2670,"titles":13469,"content":2866,"level":155},"/v0.1.4/guides/schema-validation#field-validation",[1215,2856],{"id":13471,"title":2680,"titles":13472,"content":2870,"level":155},"/v0.1.4/guides/schema-validation#parameter-validation",[1215,2856],{"id":13474,"title":2873,"titles":13475,"content":2875,"level":136},"/v0.1.4/guides/schema-validation#panic-vs-error",[1215],{"id":13477,"title":2733,"titles":13478,"content":2879,"level":155},"/v0.1.4/guides/schema-validation#try-variants",[1215,2873],{"id":13480,"title":2882,"titles":13481,"content":2884,"level":155},"/v0.1.4/guides/schema-validation#when-to-use-each",[1215,2873],{"id":13483,"title":2887,"titles":13484,"content":2889,"level":136},"/v0.1.4/guides/schema-validation#table-aliases",[1215],{"id":13486,"title":2769,"titles":13487,"content":2893,"level":155},"/v0.1.4/guides/schema-validation#alias-restrictions",[1215,2887],{"id":13489,"title":2896,"titles":13490,"content":2898,"level":155},"/v0.1.4/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":13492,"title":2901,"titles":13493,"content":99,"level":136},"/v0.1.4/guides/schema-validation#schema-organization",[1215],{"id":13495,"title":2905,"titles":13496,"content":6240,"level":155},"/v0.1.4/guides/schema-validation#single-schema-instance",[1215,2901],{"id":13498,"title":2910,"titles":13499,"content":2912,"level":155},"/v0.1.4/guides/schema-validation#multiple-schemas",[1215,2901],{"id":13501,"title":2915,"titles":13502,"content":99,"level":136},"/v0.1.4/guides/schema-validation#dynamic-queries",[1215],{"id":13504,"title":2919,"titles":13505,"content":6250,"level":155},"/v0.1.4/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":13507,"title":2924,"titles":13508,"content":2926,"level":155},"/v0.1.4/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":13510,"title":2929,"titles":13511,"content":99,"level":136},"/v0.1.4/guides/schema-validation#validation-errors",[1215],{"id":13513,"title":2933,"titles":13514,"content":2935,"level":155},"/v0.1.4/guides/schema-validation#error-types",[1215,2929],{"id":13516,"title":2938,"titles":13517,"content":6263,"level":155},"/v0.1.4/guides/schema-validation#handling-errors",[1215,2929],{"id":13519,"title":1251,"titles":13520,"content":2944,"level":107},"/v0.1.4/guides/conditions",[],{"id":13522,"title":1251,"titles":13523,"content":2948,"level":107},"/v0.1.4/guides/conditions#conditions",[],{"id":13525,"title":2951,"titles":13526,"content":2953,"level":136},"/v0.1.4/guides/conditions#basic-conditions",[1251],{"id":13528,"title":1727,"titles":13529,"content":99,"level":136},"/v0.1.4/guides/conditions#operators",[1251],{"id":13531,"title":2959,"titles":13532,"content":2961,"level":155},"/v0.1.4/guides/conditions#comparison-operators",[1251,1727],{"id":13534,"title":2964,"titles":13535,"content":2966,"level":155},"/v0.1.4/guides/conditions#pattern-matching",[1251,1727],{"id":13537,"title":2969,"titles":13538,"content":2971,"level":155},"/v0.1.4/guides/conditions#null-checks",[1251,1727],{"id":13540,"title":2974,"titles":13541,"content":2976,"level":155},"/v0.1.4/guides/conditions#array-operators",[1251,1727],{"id":13543,"title":2693,"titles":13544,"content":99,"level":136},"/v0.1.4/guides/conditions#combining-conditions",[1251],{"id":13546,"title":2982,"titles":13547,"content":2984,"level":155},"/v0.1.4/guides/conditions#and",[1251,2693],{"id":13549,"title":2987,"titles":13550,"content":2989,"level":155},"/v0.1.4/guides/conditions#or",[1251,2693],{"id":13552,"title":2992,"titles":13553,"content":2994,"level":155},"/v0.1.4/guides/conditions#nested-logic",[1251,2693],{"id":13555,"title":2997,"titles":13556,"content":2999,"level":136},"/v0.1.4/guides/conditions#between",[1251],{"id":13558,"title":2708,"titles":13559,"content":3003,"level":136},"/v0.1.4/guides/conditions#field-comparisons",[1251],{"id":13561,"title":3006,"titles":13562,"content":99,"level":136},"/v0.1.4/guides/conditions#subqueries",[1251],{"id":13564,"title":3010,"titles":13565,"content":3012,"level":155},"/v0.1.4/guides/conditions#in-subquery",[1251,3006],{"id":13567,"title":3015,"titles":13568,"content":3017,"level":155},"/v0.1.4/guides/conditions#not-in-subquery",[1251,3006],{"id":13570,"title":3020,"titles":13571,"content":3022,"level":155},"/v0.1.4/guides/conditions#exists",[1251,3006],{"id":13573,"title":3025,"titles":13574,"content":3027,"level":155},"/v0.1.4/guides/conditions#not-exists",[1251,3006],{"id":13576,"title":2804,"titles":13577,"content":3031,"level":155},"/v0.1.4/guides/conditions#parameter-namespacing",[1251,3006],{"id":13579,"title":3034,"titles":13580,"content":3036,"level":136},"/v0.1.4/guides/conditions#multiple-where-clauses",[1251],{"id":13582,"title":3039,"titles":13583,"content":3041,"level":136},"/v0.1.4/guides/conditions#wherefield-shorthand",[1251],{"id":13585,"title":3044,"titles":13586,"content":3046,"level":136},"/v0.1.4/guides/conditions#building-conditions-dynamically",[1251],{"id":13588,"title":1265,"titles":13589,"content":3050,"level":107},"/v0.1.4/guides/joins",[],{"id":13591,"title":1265,"titles":13592,"content":3054,"level":107},"/v0.1.4/guides/joins#joins",[],{"id":13594,"title":3057,"titles":13595,"content":3059,"level":136},"/v0.1.4/guides/joins#join-types",[1265],{"id":13597,"title":3062,"titles":13598,"content":3064,"level":136},"/v0.1.4/guides/joins#basic-join",[1265],{"id":13600,"title":2887,"titles":13601,"content":3068,"level":136},"/v0.1.4/guides/joins#table-aliases",[1265],{"id":13603,"title":3071,"titles":13604,"content":3073,"level":136},"/v0.1.4/guides/joins#left-join",[1265],{"id":13606,"title":3076,"titles":13607,"content":3078,"level":136},"/v0.1.4/guides/joins#right-join",[1265],{"id":13609,"title":3081,"titles":13610,"content":3083,"level":136},"/v0.1.4/guides/joins#full-outer-join",[1265],{"id":13612,"title":3086,"titles":13613,"content":3088,"level":136},"/v0.1.4/guides/joins#cross-join",[1265],{"id":13615,"title":3091,"titles":13616,"content":3093,"level":136},"/v0.1.4/guides/joins#multiple-joins",[1265],{"id":13618,"title":3096,"titles":13619,"content":3098,"level":136},"/v0.1.4/guides/joins#complex-on-conditions",[1265],{"id":13621,"title":3101,"titles":13622,"content":3103,"level":136},"/v0.1.4/guides/joins#self-joins",[1265],{"id":13624,"title":3106,"titles":13625,"content":3108,"level":136},"/v0.1.4/guides/joins#joins-with-count",[1265],{"id":13627,"title":3111,"titles":13628,"content":3113,"level":136},"/v0.1.4/guides/joins#join-validation",[1265],{"id":13630,"title":1668,"titles":13631,"content":3117,"level":107},"/v0.1.4/guides/aggregates",[],{"id":13633,"title":1668,"titles":13634,"content":3121,"level":107},"/v0.1.4/guides/aggregates#aggregates",[],{"id":13636,"title":3124,"titles":13637,"content":99,"level":136},"/v0.1.4/guides/aggregates#aggregate-functions",[1668],{"id":13639,"title":3128,"titles":13640,"content":3130,"level":155},"/v0.1.4/guides/aggregates#basic-aggregates",[1668,3124],{"id":13642,"title":3133,"titles":13643,"content":3135,"level":155},"/v0.1.4/guides/aggregates#using-aggregates",[1668,3124],{"id":13645,"title":3138,"titles":13646,"content":3140,"level":155},"/v0.1.4/guides/aggregates#aliases",[1668,3124],{"id":13648,"title":3143,"titles":13649,"content":3145,"level":136},"/v0.1.4/guides/aggregates#group-by",[1668],{"id":13651,"title":3148,"titles":13652,"content":3150,"level":136},"/v0.1.4/guides/aggregates#having",[1668],{"id":13654,"title":3153,"titles":13655,"content":3155,"level":155},"/v0.1.4/guides/aggregates#simple-having",[1668,3148],{"id":13657,"title":3158,"titles":13658,"content":3160,"level":155},"/v0.1.4/guides/aggregates#aggregate-having",[1668,3148],{"id":13660,"title":3163,"titles":13661,"content":3165,"level":155},"/v0.1.4/guides/aggregates#having-helpers",[1668,3148],{"id":13663,"title":3168,"titles":13664,"content":3170,"level":136},"/v0.1.4/guides/aggregates#filter-clause",[1668],{"id":13666,"title":3173,"titles":13667,"content":3175,"level":136},"/v0.1.4/guides/aggregates#window-functions",[1668],{"id":13669,"title":3178,"titles":13670,"content":3180,"level":155},"/v0.1.4/guides/aggregates#basic-window-functions",[1668,3173],{"id":13672,"title":3183,"titles":13673,"content":3185,"level":155},"/v0.1.4/guides/aggregates#window-function-types",[1668,3173],{"id":13675,"title":3188,"titles":13676,"content":3190,"level":155},"/v0.1.4/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":13678,"title":3193,"titles":13679,"content":3195,"level":155},"/v0.1.4/guides/aggregates#window-specification",[1668,3173],{"id":13681,"title":3198,"titles":13682,"content":3200,"level":155},"/v0.1.4/guides/aggregates#frame-bounds",[1668,3173],{"id":13684,"title":3203,"titles":13685,"content":99,"level":136},"/v0.1.4/guides/aggregates#math-functions",[1668],{"id":13687,"title":3207,"titles":13688,"content":3209,"level":155},"/v0.1.4/guides/aggregates#available-functions",[1668,3203],{"id":13690,"title":3212,"titles":13691,"content":3214,"level":155},"/v0.1.4/guides/aggregates#example",[1668,3203],{"id":13693,"title":1270,"titles":13694,"content":3218,"level":136},"/v0.1.4/guides/aggregates#case-expressions",[1668],{"id":13696,"title":3221,"titles":13697,"content":3223,"level":136},"/v0.1.4/guides/aggregates#type-casting",[1668],{"id":13699,"title":3226,"titles":13700,"content":3228,"level":136},"/v0.1.4/guides/aggregates#coalesce-and-nullif",[1668],{"id":13702,"title":1675,"titles":13703,"content":3232,"level":107},"/v0.1.4/guides/testing",[],{"id":13705,"title":1675,"titles":13706,"content":3236,"level":107},"/v0.1.4/guides/testing#testing",[],{"id":13708,"title":3239,"titles":13709,"content":99,"level":136},"/v0.1.4/guides/testing#testing-query-output",[1675],{"id":13711,"title":3243,"titles":13712,"content":6459,"level":155},"/v0.1.4/guides/testing#basic-output-testing",[1675,3239],{"id":13714,"title":3248,"titles":13715,"content":3250,"level":155},"/v0.1.4/guides/testing#test-instance-setup",[1675,3239],{"id":13717,"title":3253,"titles":13718,"content":99,"level":136},"/v0.1.4/guides/testing#table-driven-tests",[1675],{"id":13720,"title":3257,"titles":13721,"content":6469,"level":155},"/v0.1.4/guides/testing#testing-multiple-queries",[1675,3253],{"id":13723,"title":3262,"titles":13724,"content":99,"level":136},"/v0.1.4/guides/testing#testing-validation",[1675],{"id":13726,"title":3266,"titles":13727,"content":3268,"level":155},"/v0.1.4/guides/testing#testing-invalid-input",[1675,3262],{"id":13729,"title":3271,"titles":13730,"content":3273,"level":155},"/v0.1.4/guides/testing#testing-try-variants",[1675,3262],{"id":13732,"title":3276,"titles":13733,"content":99,"level":136},"/v0.1.4/guides/testing#testing-error-cases",[1675],{"id":13735,"title":3280,"titles":13736,"content":6485,"level":155},"/v0.1.4/guides/testing#builder-errors",[1675,3276],{"id":13738,"title":3285,"titles":13739,"content":99,"level":136},"/v0.1.4/guides/testing#testing-complex-queries",[1675],{"id":13741,"title":3289,"titles":13742,"content":6492,"level":155},"/v0.1.4/guides/testing#join-tests",[1675,3285],{"id":13744,"title":3294,"titles":13745,"content":6496,"level":155},"/v0.1.4/guides/testing#subquery-tests",[1675,3285],{"id":13747,"title":3299,"titles":13748,"content":3301,"level":136},"/v0.1.4/guides/testing#snapshot-testing",[1675],{"id":13750,"title":3304,"titles":13751,"content":99,"level":136},"/v0.1.4/guides/testing#best-practices",[1675],{"id":13753,"title":3308,"titles":13754,"content":3310,"level":155},"/v0.1.4/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":13756,"title":3313,"titles":13757,"content":3315,"level":155},"/v0.1.4/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":13759,"title":3318,"titles":13760,"content":3320,"level":155},"/v0.1.4/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":13762,"title":3323,"titles":13763,"content":6515,"level":155},"/v0.1.4/guides/testing#_4-test-edge-cases",[1675,3304],{"id":13765,"title":1688,"titles":13766,"content":3329,"level":107},"/v0.1.4/cookbook/pagination",[],{"id":13768,"title":1688,"titles":13769,"content":3333,"level":107},"/v0.1.4/cookbook/pagination#pagination",[],{"id":13771,"title":3336,"titles":13772,"content":6525,"level":136},"/v0.1.4/cookbook/pagination#offset-pagination",[1688],{"id":13774,"title":3341,"titles":13775,"content":3343,"level":155},"/v0.1.4/cookbook/pagination#usage",[1688,3336],{"id":13777,"title":3346,"titles":13778,"content":6532,"level":155},"/v0.1.4/cookbook/pagination#with-total-count",[1688,3336],{"id":13780,"title":3351,"titles":13781,"content":3353,"level":155},"/v0.1.4/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":13783,"title":3356,"titles":13784,"content":6539,"level":136},"/v0.1.4/cookbook/pagination#cursor-pagination",[1688],{"id":13786,"title":3341,"titles":13787,"content":3362,"level":155},"/v0.1.4/cookbook/pagination#usage-1",[1688,3356],{"id":13789,"title":3365,"titles":13790,"content":6546,"level":155},"/v0.1.4/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":13792,"title":3370,"titles":13793,"content":6550,"level":155},"/v0.1.4/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":13795,"title":3375,"titles":13796,"content":6554,"level":136},"/v0.1.4/cookbook/pagination#filtering-with-pagination",[1688],{"id":13798,"title":3380,"titles":13799,"content":6558,"level":136},"/v0.1.4/cookbook/pagination#pagination-with-joins",[1688],{"id":13801,"title":3304,"titles":13802,"content":99,"level":136},"/v0.1.4/cookbook/pagination#best-practices",[1688],{"id":13804,"title":3388,"titles":13805,"content":6565,"level":155},"/v0.1.4/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":13807,"title":3393,"titles":13808,"content":3395,"level":155},"/v0.1.4/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":13810,"title":3398,"titles":13811,"content":3400,"level":155},"/v0.1.4/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":13813,"title":3403,"titles":13814,"content":3405,"level":155},"/v0.1.4/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":13816,"title":1695,"titles":13817,"content":3409,"level":107},"/v0.1.4/cookbook/vector-search",[],{"id":13819,"title":1695,"titles":13820,"content":3413,"level":107},"/v0.1.4/cookbook/vector-search#vector-search",[],{"id":13822,"title":3416,"titles":13823,"content":3418,"level":136},"/v0.1.4/cookbook/vector-search#schema-setup",[1695],{"id":13825,"title":3421,"titles":13826,"content":3423,"level":136},"/v0.1.4/cookbook/vector-search#distance-operators",[1695],{"id":13828,"title":3426,"titles":13829,"content":3428,"level":136},"/v0.1.4/cookbook/vector-search#basic-similarity-search",[1695],{"id":13831,"title":3431,"titles":13832,"content":3433,"level":155},"/v0.1.4/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":13834,"title":3436,"titles":13835,"content":3438,"level":136},"/v0.1.4/cookbook/vector-search#cosine-similarity",[1695],{"id":13837,"title":3441,"titles":13838,"content":3443,"level":136},"/v0.1.4/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":13840,"title":3446,"titles":13841,"content":3448,"level":136},"/v0.1.4/cookbook/vector-search#filtered-vector-search",[1695],{"id":13843,"title":3451,"titles":13844,"content":3453,"level":136},"/v0.1.4/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":13846,"title":3456,"titles":13847,"content":3458,"level":136},"/v0.1.4/cookbook/vector-search#hybrid-search",[1695],{"id":13849,"title":3461,"titles":13850,"content":3463,"level":136},"/v0.1.4/cookbook/vector-search#multi-vector-search",[1695],{"id":13852,"title":3466,"titles":13853,"content":3468,"level":136},"/v0.1.4/cookbook/vector-search#indexing-recommendations",[1695],{"id":13855,"title":3304,"titles":13856,"content":99,"level":136},"/v0.1.4/cookbook/vector-search#best-practices",[1695],{"id":13858,"title":3474,"titles":13859,"content":3476,"level":155},"/v0.1.4/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":13861,"title":3479,"titles":13862,"content":3481,"level":155},"/v0.1.4/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":13864,"title":3484,"titles":13865,"content":3486,"level":155},"/v0.1.4/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":13867,"title":1702,"titles":13868,"content":3490,"level":107},"/v0.1.4/cookbook/upserts",[],{"id":13870,"title":1702,"titles":13871,"content":3494,"level":107},"/v0.1.4/cookbook/upserts#upserts",[],{"id":13873,"title":3497,"titles":13874,"content":6635,"level":136},"/v0.1.4/cookbook/upserts#basic-upsert",[1702],{"id":13876,"title":3502,"titles":13877,"content":6639,"level":136},"/v0.1.4/cookbook/upserts#do-nothing",[1702],{"id":13879,"title":3507,"titles":13880,"content":6643,"level":136},"/v0.1.4/cookbook/upserts#multi-column-conflict",[1702],{"id":13882,"title":3512,"titles":13883,"content":6647,"level":136},"/v0.1.4/cookbook/upserts#returning-with-upsert",[1702],{"id":13885,"title":3517,"titles":13886,"content":6651,"level":136},"/v0.1.4/cookbook/upserts#batch-upsert",[1702],{"id":13888,"title":3522,"titles":13889,"content":6655,"level":136},"/v0.1.4/cookbook/upserts#conditional-upsert",[1702],{"id":13891,"title":3527,"titles":13892,"content":6659,"level":136},"/v0.1.4/cookbook/upserts#sync-pattern",[1702],{"id":13894,"title":3532,"titles":13895,"content":6663,"level":136},"/v0.1.4/cookbook/upserts#upsert-with-timestamps",[1702],{"id":13897,"title":3304,"titles":13898,"content":99,"level":136},"/v0.1.4/cookbook/upserts#best-practices",[1702],{"id":13900,"title":3540,"titles":13901,"content":3542,"level":155},"/v0.1.4/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":13903,"title":3545,"titles":13904,"content":3547,"level":155},"/v0.1.4/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":13906,"title":3550,"titles":13907,"content":3552,"level":155},"/v0.1.4/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":13909,"title":3555,"titles":13910,"content":3557,"level":155},"/v0.1.4/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":13912,"title":1709,"titles":13913,"content":6682,"level":107},"/v0.1.4/cookbook/orm-foundation",[],{"id":13915,"title":1709,"titles":13916,"content":6686,"level":107},"/v0.1.4/cookbook/orm-foundation#orm-foundation",[],{"id":13918,"title":6689,"titles":13919,"content":6691,"level":136},"/v0.1.4/cookbook/orm-foundation#the-result",[1709],{"id":13921,"title":6694,"titles":13922,"content":6696,"level":136},"/v0.1.4/cookbook/orm-foundation#the-architecture",[1709],{"id":13924,"title":6699,"titles":13925,"content":6701,"level":136},"/v0.1.4/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":13927,"title":6704,"titles":13928,"content":6706,"level":155},"/v0.1.4/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":13930,"title":6709,"titles":13931,"content":6711,"level":155},"/v0.1.4/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":13933,"title":6714,"titles":13934,"content":6716,"level":155},"/v0.1.4/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":13936,"title":6719,"titles":13937,"content":6721,"level":155},"/v0.1.4/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":13939,"title":6724,"titles":13940,"content":6726,"level":136},"/v0.1.4/cookbook/orm-foundation#the-security-model",[1709],{"id":13942,"title":6729,"titles":13943,"content":6731,"level":136},"/v0.1.4/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":13945,"title":6734,"titles":13946,"content":6736,"level":136},"/v0.1.4/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":13948,"title":6739,"titles":13949,"content":6741,"level":155},"/v0.1.4/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":13951,"title":6744,"titles":13952,"content":6746,"level":155},"/v0.1.4/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":13954,"title":6749,"titles":13955,"content":6751,"level":155},"/v0.1.4/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":13957,"title":6754,"titles":13958,"content":6756,"level":155},"/v0.1.4/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":13960,"title":6759,"titles":13961,"content":6761,"level":136},"/v0.1.4/cookbook/orm-foundation#see-also",[1709],{"id":13963,"title":3560,"titles":13964,"content":3562,"level":107},"/v0.1.4/reference/api",[],{"id":13966,"title":3560,"titles":13967,"content":3566,"level":107},"/v0.1.4/reference/api#api-reference",[],{"id":13969,"title":3569,"titles":13970,"content":99,"level":136},"/v0.1.4/reference/api#instance-creation",[3560],{"id":13972,"title":856,"titles":13973,"content":3574,"level":155},"/v0.1.4/reference/api#newfromdbml",[3560,3569],{"id":13975,"title":3577,"titles":13976,"content":99,"level":136},"/v0.1.4/reference/api#instance-methods",[3560],{"id":13978,"title":119,"titles":13979,"content":3582,"level":155},"/v0.1.4/reference/api#t",[3560,3577],{"id":13981,"title":3585,"titles":13982,"content":3587,"level":155},"/v0.1.4/reference/api#tryt",[3560,3577],{"id":13984,"title":169,"titles":13985,"content":3591,"level":155},"/v0.1.4/reference/api#f",[3560,3577],{"id":13987,"title":3594,"titles":13988,"content":3596,"level":155},"/v0.1.4/reference/api#tryf",[3560,3577],{"id":13990,"title":316,"titles":13991,"content":3600,"level":155},"/v0.1.4/reference/api#p",[3560,3577],{"id":13993,"title":3603,"titles":13994,"content":3605,"level":155},"/v0.1.4/reference/api#tryp",[3560,3577],{"id":13996,"title":284,"titles":13997,"content":3609,"level":155},"/v0.1.4/reference/api#c",[3560,3577],{"id":13999,"title":3612,"titles":14000,"content":3614,"level":155},"/v0.1.4/reference/api#tryc",[3560,3577],{"id":14002,"title":3617,"titles":14003,"content":3619,"level":155},"/v0.1.4/reference/api#and",[3560,3577],{"id":14005,"title":3622,"titles":14006,"content":3624,"level":155},"/v0.1.4/reference/api#or",[3560,3577],{"id":14008,"title":3627,"titles":14009,"content":3629,"level":155},"/v0.1.4/reference/api#null",[3560,3577],{"id":14011,"title":3632,"titles":14012,"content":3634,"level":155},"/v0.1.4/reference/api#notnull",[3560,3577],{"id":14014,"title":3637,"titles":14015,"content":3639,"level":155},"/v0.1.4/reference/api#withtable",[3560,3577],{"id":14017,"title":3642,"titles":14018,"content":3644,"level":155},"/v0.1.4/reference/api#trywithtable",[3560,3577],{"id":14020,"title":3647,"titles":14021,"content":3649,"level":155},"/v0.1.4/reference/api#aggc",[3560,3577],{"id":14023,"title":3652,"titles":14024,"content":3654,"level":155},"/v0.1.4/reference/api#tryaggc",[3560,3577],{"id":14026,"title":3657,"titles":14027,"content":3659,"level":155},"/v0.1.4/reference/api#valuemap",[3560,3577],{"id":14029,"title":3662,"titles":14030,"content":99,"level":136},"/v0.1.4/reference/api#query-builders",[3560],{"id":14032,"title":219,"titles":14033,"content":3667,"level":155},"/v0.1.4/reference/api#select",[3560,3662],{"id":14035,"title":3670,"titles":14036,"content":3672,"level":155},"/v0.1.4/reference/api#insert",[3560,3662],{"id":14038,"title":3675,"titles":14039,"content":3677,"level":155},"/v0.1.4/reference/api#update",[3560,3662],{"id":14041,"title":3680,"titles":14042,"content":3682,"level":155},"/v0.1.4/reference/api#delete",[3560,3662],{"id":14044,"title":3685,"titles":14045,"content":3687,"level":155},"/v0.1.4/reference/api#count",[3560,3662],{"id":14047,"title":3690,"titles":14048,"content":99,"level":136},"/v0.1.4/reference/api#builder-methods",[3560],{"id":14050,"title":2665,"titles":14051,"content":3695,"level":155},"/v0.1.4/reference/api#fields",[3560,3690],{"id":14053,"title":3698,"titles":14054,"content":3700,"level":155},"/v0.1.4/reference/api#where",[3560,3690],{"id":14056,"title":3703,"titles":14057,"content":3705,"level":155},"/v0.1.4/reference/api#wherefield",[3560,3690],{"id":14059,"title":3708,"titles":14060,"content":3710,"level":155},"/v0.1.4/reference/api#orderby",[3560,3690],{"id":14062,"title":3713,"titles":14063,"content":3715,"level":155},"/v0.1.4/reference/api#orderbynulls",[3560,3690],{"id":14065,"title":3718,"titles":14066,"content":3720,"level":155},"/v0.1.4/reference/api#orderbyexpr",[3560,3690],{"id":14068,"title":3723,"titles":14069,"content":5734,"level":155},"/v0.1.4/reference/api#limit",[3560,3690],{"id":14071,"title":5737,"titles":14072,"content":5739,"level":155},"/v0.1.4/reference/api#limitparam",[3560,3690],{"id":14074,"title":3728,"titles":14075,"content":5743,"level":155},"/v0.1.4/reference/api#offset",[3560,3690],{"id":14077,"title":5746,"titles":14078,"content":5748,"level":155},"/v0.1.4/reference/api#offsetparam",[3560,3690],{"id":14080,"title":3733,"titles":14081,"content":3735,"level":155},"/v0.1.4/reference/api#set",[3560,3690],{"id":14083,"title":3738,"titles":14084,"content":3740,"level":155},"/v0.1.4/reference/api#values",[3560,3690],{"id":14086,"title":3743,"titles":14087,"content":3745,"level":155},"/v0.1.4/reference/api#returning",[3560,3690],{"id":14089,"title":3748,"titles":14090,"content":3750,"level":155},"/v0.1.4/reference/api#distinct",[3560,3690],{"id":14092,"title":3753,"titles":14093,"content":3755,"level":155},"/v0.1.4/reference/api#distincton",[3560,3690],{"id":14095,"title":3758,"titles":14096,"content":3760,"level":155},"/v0.1.4/reference/api#groupby",[3560,3690],{"id":14098,"title":3763,"titles":14099,"content":3765,"level":155},"/v0.1.4/reference/api#having",[3560,3690],{"id":14101,"title":3768,"titles":14102,"content":3770,"level":155},"/v0.1.4/reference/api#havingagg",[3560,3690],{"id":14104,"title":3773,"titles":14105,"content":3775,"level":155},"/v0.1.4/reference/api#selectexpr",[3560,3690],{"id":14107,"title":3778,"titles":14108,"content":3780,"level":155},"/v0.1.4/reference/api#onconflict",[3560,3690],{"id":14110,"title":3783,"titles":14111,"content":3785,"level":155},"/v0.1.4/reference/api#join-methods",[3560,3690],{"id":14113,"title":3788,"titles":14114,"content":3790,"level":155},"/v0.1.4/reference/api#row-locking",[3560,3690],{"id":14116,"title":3793,"titles":14117,"content":3795,"level":155},"/v0.1.4/reference/api#build",[3560,3690],{"id":14119,"title":3798,"titles":14120,"content":3800,"level":155},"/v0.1.4/reference/api#mustbuild",[3560,3690],{"id":14122,"title":350,"titles":14123,"content":6924,"level":155},"/v0.1.4/reference/api#render",[3560,3690],{"id":14125,"title":3807,"titles":14126,"content":6928,"level":155},"/v0.1.4/reference/api#mustrender",[3560,3690],{"id":14128,"title":3812,"titles":14129,"content":99,"level":136},"/v0.1.4/reference/api#set-operations",[3560],{"id":14131,"title":3816,"titles":14132,"content":3818,"level":155},"/v0.1.4/reference/api#union-unionall",[3560,3812],{"id":14134,"title":3821,"titles":14135,"content":3823,"level":155},"/v0.1.4/reference/api#intersect-intersectall",[3560,3812],{"id":14137,"title":3826,"titles":14138,"content":3828,"level":155},"/v0.1.4/reference/api#except-exceptall",[3560,3812],{"id":14140,"title":3831,"titles":14141,"content":6944,"level":136},"/v0.1.4/reference/api#rendering",[3560],{"id":14143,"title":3844,"titles":14144,"content":99,"level":136},"/v0.1.4/reference/api#expression-functions",[3560],{"id":14146,"title":1668,"titles":14147,"content":3849,"level":155},"/v0.1.4/reference/api#aggregates",[3560,3844],{"id":14149,"title":3852,"titles":14150,"content":3854,"level":155},"/v0.1.4/reference/api#filter-aggregates",[3560,3844],{"id":14152,"title":1251,"titles":14153,"content":3858,"level":155},"/v0.1.4/reference/api#conditions",[3560,3844],{"id":14155,"title":3006,"titles":14156,"content":3862,"level":155},"/v0.1.4/reference/api#subqueries",[3560,3844],{"id":14158,"title":3865,"titles":14159,"content":3867,"level":155},"/v0.1.4/reference/api#case-expression",[3560,3844],{"id":14161,"title":3870,"titles":14162,"content":3872,"level":155},"/v0.1.4/reference/api#null-handling",[3560,3844],{"id":14164,"title":3203,"titles":14165,"content":3876,"level":155},"/v0.1.4/reference/api#math-functions",[3560,3844],{"id":14167,"title":5855,"titles":14168,"content":5857,"level":155},"/v0.1.4/reference/api#string-functions",[3560,3844],{"id":14170,"title":5860,"titles":14171,"content":5862,"level":155},"/v0.1.4/reference/api#date-functions",[3560,3844],{"id":14173,"title":3221,"titles":14174,"content":3880,"level":155},"/v0.1.4/reference/api#type-casting",[3560,3844],{"id":14176,"title":3173,"titles":14177,"content":3884,"level":155},"/v0.1.4/reference/api#window-functions",[3560,3844],{"id":14179,"title":3193,"titles":14180,"content":3888,"level":155},"/v0.1.4/reference/api#window-specification",[3560,3844],{"id":14182,"title":3891,"titles":14183,"content":3893,"level":155},"/v0.1.4/reference/api#windowbuilder-methods",[3560,3844],{"id":14185,"title":3896,"titles":14186,"content":3898,"level":155},"/v0.1.4/reference/api#expression-alias",[3560,3844],{"id":14188,"title":3163,"titles":14189,"content":3902,"level":155},"/v0.1.4/reference/api#having-helpers",[3560,3844],{"id":14191,"title":3905,"titles":14192,"content":99,"level":136},"/v0.1.4/reference/api#types",[3560],{"id":14194,"title":3909,"titles":14195,"content":3911,"level":155},"/v0.1.4/reference/api#queryresult",[3560,3905],{"id":14197,"title":3914,"titles":14198,"content":3916,"level":155},"/v0.1.4/reference/api#direction",[3560,3905],{"id":14200,"title":3919,"titles":14201,"content":3921,"level":155},"/v0.1.4/reference/api#nullsordering",[3560,3905],{"id":14203,"title":3924,"titles":14204,"content":5896,"level":155},"/v0.1.4/reference/api#operation",[3560,3905],{"id":14206,"title":5899,"titles":14207,"content":99,"level":136},"/v0.1.4/reference/api#providers",[3560],{"id":14209,"title":5903,"titles":14210,"content":13180,"level":155},"/v0.1.4/reference/api#renderer-interface",[3560,5899],{"id":14212,"title":1187,"titles":14213,"content":14214,"level":155},"/v0.1.4/reference/api#capabilities",[3560,5899],"Query dialect capabilities before execution: type Capabilities struct {\n    DistinctOn          bool            // DISTINCT ON (field, ...)\n    Upsert              bool            // ON CONFLICT / ON DUPLICATE KEY\n    ReturningOnInsert   bool            // RETURNING after INSERT\n    ReturningOnUpdate   bool            // RETURNING after UPDATE\n    ReturningOnDelete   bool            // RETURNING after DELETE\n    CaseInsensitiveLike bool            // ILIKE operator\n    RegexOperators      bool            // ~, ~*, !~, !~*\n    ArrayOperators      bool            // @>, \u003C@, &&\n    InArray             bool            // IN (:array_param)\n    RowLocking          RowLockingLevel // FOR UPDATE/SHARE support\n}\n\ntype RowLockingLevel int\n\nconst (\n    RowLockingNone  RowLockingLevel = iota // No row locking\n    RowLockingBasic                        // FOR UPDATE, FOR SHARE\n    RowLockingFull                         // + FOR NO KEY UPDATE, FOR KEY SHARE\n) Example usage: renderer := postgres.New()\ncaps := renderer.Capabilities()\n\nif caps.Upsert {\n    // Safe to use ON CONFLICT\n}",{"id":14216,"title":5908,"titles":14217,"content":7017,"level":155},"/v0.1.4/reference/api#postgresql-provider",[3560,5899],{"id":14219,"title":5913,"titles":14220,"content":7021,"level":155},"/v0.1.4/reference/api#sqlite-provider",[3560,5899],{"id":14222,"title":12159,"titles":14223,"content":14224,"level":155},"/v0.1.4/reference/api#mariadb-provider",[3560,5899],"import \"github.com/zoobzio/astql/pkg/mariadb\"\n\nrenderer := mariadb.New()\nresult, err := query.Render(renderer) MariaDB-specific behavior: Uses backtick quoting for identifiers: `name`Uses :name parameter placeholders (sqlx compatible)ON CONFLICT DO UPDATE → ON DUPLICATE KEY UPDATEON CONFLICT DO NOTHING → ON DUPLICATE KEY UPDATE field = field (no-op)ILIKE maps to LIKE (MariaDB LIKE is case-insensitive by default)Standard IN (...) syntax instead of = ANY(:array)RETURNING clause support for INSERT/DELETE (MariaDB 10.5+, UPDATE not supported) Returns UnsupportedFeatureError for: DISTINCT ONFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)FOR NO KEY UPDATE / FOR KEY SHARE (use FOR UPDATE or FOR SHARE instead)",{"id":14226,"title":5923,"titles":14227,"content":7029,"level":155},"/v0.1.4/reference/api#sql-server-provider",[3560,5899],{"id":14229,"title":3929,"titles":14230,"content":3931,"level":107},"/v0.1.4/reference/operators",[],{"id":14232,"title":3929,"titles":14233,"content":3935,"level":107},"/v0.1.4/reference/operators#operators-reference",[],{"id":14235,"title":2959,"titles":14236,"content":3939,"level":136},"/v0.1.4/reference/operators#comparison-operators",[3929],{"id":14238,"title":3341,"titles":14239,"content":3943,"level":155},"/v0.1.4/reference/operators#usage",[3929,2959],{"id":14241,"title":2964,"titles":14242,"content":3947,"level":136},"/v0.1.4/reference/operators#pattern-matching",[3929],{"id":14244,"title":3341,"titles":14245,"content":3951,"level":155},"/v0.1.4/reference/operators#usage-1",[3929,2964],{"id":14247,"title":3954,"titles":14248,"content":3956,"level":136},"/v0.1.4/reference/operators#null-operators",[3929],{"id":14250,"title":3341,"titles":14251,"content":3960,"level":155},"/v0.1.4/reference/operators#usage-2",[3929,3954],{"id":14253,"title":2974,"titles":14254,"content":3964,"level":136},"/v0.1.4/reference/operators#array-operators",[3929],{"id":14256,"title":3341,"titles":14257,"content":3968,"level":155},"/v0.1.4/reference/operators#usage-3",[3929,2974],{"id":14259,"title":3971,"titles":14260,"content":3973,"level":155},"/v0.1.4/reference/operators#with-sqlx",[3929,2974],{"id":14262,"title":3976,"titles":14263,"content":3978,"level":136},"/v0.1.4/reference/operators#subquery-operators",[3929],{"id":14265,"title":3341,"titles":14266,"content":3982,"level":155},"/v0.1.4/reference/operators#usage-4",[3929,3976],{"id":14268,"title":3985,"titles":14269,"content":3987,"level":136},"/v0.1.4/reference/operators#regex-operators",[3929],{"id":14271,"title":3341,"titles":14272,"content":3991,"level":155},"/v0.1.4/reference/operators#usage-5",[3929,3985],{"id":14274,"title":3994,"titles":14275,"content":3996,"level":136},"/v0.1.4/reference/operators#postgresql-array-operators",[3929],{"id":14277,"title":3341,"titles":14278,"content":4000,"level":155},"/v0.1.4/reference/operators#usage-6",[3929,3994],{"id":14280,"title":4003,"titles":14281,"content":4005,"level":136},"/v0.1.4/reference/operators#vector-operators-pgvector",[3929],{"id":14283,"title":3341,"titles":14284,"content":4009,"level":155},"/v0.1.4/reference/operators#usage-7",[3929,4003],{"id":14286,"title":4012,"titles":14287,"content":4014,"level":155},"/v0.1.4/reference/operators#with-pgvector",[3929,4003],{"id":14289,"title":4017,"titles":14290,"content":4019,"level":136},"/v0.1.4/reference/operators#operator-selection-guide",[3929],{"id":14292,"title":3124,"titles":14293,"content":4023,"level":136},"/v0.1.4/reference/operators#aggregate-functions",[3929],{"id":14295,"title":3173,"titles":14296,"content":4027,"level":136},"/v0.1.4/reference/operators#window-functions",[3929],{"id":14298,"title":3198,"titles":14299,"content":4031,"level":136},"/v0.1.4/reference/operators#frame-bounds",[3929],{"id":14301,"title":4034,"titles":14302,"content":4036,"level":136},"/v0.1.4/reference/operators#cast-types",[3929],{"id":14304,"title":1614,"titles":14305,"content":2581,"level":107},"/v1.0.1/overview",[],{"id":14307,"title":1614,"titles":14308,"content":14309,"level":107},"/v1.0.1/overview#overview",[],"SQL query builders in Go typically trust developers to provide valid identifiers. ASTQL takes a different approach: validate everything against a schema before rendering. import \"github.com/zoobzio/astql/postgres\"\n\n// Define your schema\nproject := dbml.NewProject(\"myapp\")\nusers := dbml.NewTable(\"users\")\nusers.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\nusers.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\nusers.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\nproject.AddTable(users)\n\n// Create a validated instance\ninstance, _ := astql.NewFromDBML(project)\n\n// Build queries - tables and fields validated against schema\nresult, _ := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"id\"), astql.EQ, instance.P(\"user_id\"))).\n    Render(postgres.New())\n\n// result.SQL: SELECT \"username\", \"email\" FROM \"users\" WHERE \"id\" = :user_id\n// result.RequiredParams: []string{\"user_id\"} Type-safe, schema-validated, injection-resistant.",{"id":14311,"title":1237,"titles":14312,"content":2589,"level":136},"/v1.0.1/overview#architecture",[1614],{"id":14314,"title":2592,"titles":14315,"content":2594,"level":136},"/v1.0.1/overview#philosophy",[1614],{"id":14317,"title":1187,"titles":14318,"content":2598,"level":136},"/v1.0.1/overview#capabilities",[1614],{"id":14320,"title":2601,"titles":14321,"content":99,"level":136},"/v1.0.1/overview#priorities",[1614],{"id":14323,"title":1782,"titles":14324,"content":2606,"level":155},"/v1.0.1/overview#security",[1614,2601],{"id":14326,"title":2609,"titles":14327,"content":6026,"level":155},"/v1.0.1/overview#ergonomics",[1614,2601],{"id":14329,"title":5002,"titles":14330,"content":14331,"level":155},"/v1.0.1/overview#multi-provider-architecture",[1614,2601],"ASTQL supports multiple SQL dialects through providers: import (\n    \"github.com/zoobzio/astql/postgres\"\n    \"github.com/zoobzio/astql/sqlite\"\n)\n\n// PostgreSQL\nresult, _ := query.Render(postgres.New())\n\n// SQLite\nresult, _ := query.Render(sqlite.New()) Each provider handles dialect-specific syntax: identifier quoting, date functions, string concatenation, and unsupported feature rejection. PostgreSQL supports RETURNING, ON CONFLICT, DISTINCT ON, and pgvector operators. SQLite gracefully rejects unsupported features with clear error messages. html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}",{"id":14333,"title":1628,"titles":14334,"content":2620,"level":107},"/v1.0.1/learn/quickstart",[],{"id":14336,"title":1628,"titles":14337,"content":99,"level":107},"/v1.0.1/learn/quickstart#quickstart",[],{"id":14339,"title":2626,"titles":14340,"content":6040,"level":136},"/v1.0.1/learn/quickstart#requirements",[1628],{"id":14342,"title":2631,"titles":14343,"content":2633,"level":136},"/v1.0.1/learn/quickstart#installation",[1628],{"id":14345,"title":2636,"titles":14346,"content":14347,"level":136},"/v1.0.1/learn/quickstart#basic-usage",[1628],"package main\n\nimport (\n    \"fmt\"\n    \"github.com/zoobzio/astql\"\n    \"github.com/zoobzio/astql/postgres\"\n    \"github.com/zoobzio/dbml\"\n)\n\nfunc main() {\n    // 1. Define your schema\n    project := dbml.NewProject(\"myapp\")\n\n    users := dbml.NewTable(\"users\")\n    users.AddColumn(dbml.NewColumn(\"id\", \"bigint\"))\n    users.AddColumn(dbml.NewColumn(\"username\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"email\", \"varchar\"))\n    users.AddColumn(dbml.NewColumn(\"active\", \"boolean\"))\n    project.AddTable(users)\n\n    // 2. Create an ASTQL instance\n    instance, err := astql.NewFromDBML(project)\n    if err != nil {\n        panic(err)\n    }\n\n    // 3. Build a query\n    result, err := astql.Select(instance.T(\"users\")).\n        Fields(instance.F(\"username\"), instance.F(\"email\")).\n        Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n        OrderBy(instance.F(\"username\"), astql.ASC).\n        Limit(10).\n        Render(postgres.New())\n\n    if err != nil {\n        panic(err)\n    }\n\n    fmt.Println(result.SQL)\n    // SELECT \"username\", \"email\" FROM \"users\" WHERE \"active\" = :is_active ORDER BY \"username\" ASC LIMIT 10\n\n    fmt.Println(result.RequiredParams)\n    // [is_active]\n}",{"id":14349,"title":2641,"titles":14350,"content":6051,"level":136},"/v1.0.1/learn/quickstart#whats-happening",[1628],{"id":14352,"title":2646,"titles":14353,"content":6055,"level":136},"/v1.0.1/learn/quickstart#using-with-sqlx",[1628],{"id":14355,"title":2651,"titles":14356,"content":2653,"level":107},"/v1.0.1/learn/concepts",[],{"id":14358,"title":2651,"titles":14359,"content":2657,"level":107},"/v1.0.1/learn/concepts#core-concepts",[],{"id":14361,"title":2660,"titles":14362,"content":2662,"level":136},"/v1.0.1/learn/concepts#tables",[2651],{"id":14364,"title":2665,"titles":14365,"content":2667,"level":136},"/v1.0.1/learn/concepts#fields",[2651],{"id":14367,"title":2670,"titles":14368,"content":2672,"level":155},"/v1.0.1/learn/concepts#field-validation",[2651,2665],{"id":14370,"title":2675,"titles":14371,"content":2677,"level":136},"/v1.0.1/learn/concepts#params",[2651],{"id":14373,"title":2680,"titles":14374,"content":2682,"level":155},"/v1.0.1/learn/concepts#parameter-validation",[2651,2675],{"id":14376,"title":1251,"titles":14377,"content":2686,"level":136},"/v1.0.1/learn/concepts#conditions",[2651],{"id":14379,"title":1727,"titles":14380,"content":2690,"level":155},"/v1.0.1/learn/concepts#operators",[2651,1251],{"id":14382,"title":2693,"titles":14383,"content":2695,"level":155},"/v1.0.1/learn/concepts#combining-conditions",[2651,1251],{"id":14385,"title":2698,"titles":14386,"content":2700,"level":155},"/v1.0.1/learn/concepts#nested-conditions",[2651,1251],{"id":14388,"title":2703,"titles":14389,"content":2705,"level":155},"/v1.0.1/learn/concepts#null-conditions",[2651,1251],{"id":14391,"title":2708,"titles":14392,"content":2710,"level":155},"/v1.0.1/learn/concepts#field-comparisons",[2651,1251],{"id":14394,"title":2713,"titles":14395,"content":2715,"level":136},"/v1.0.1/learn/concepts#builders",[2651],{"id":14397,"title":2718,"titles":14398,"content":6101,"level":155},"/v1.0.1/learn/concepts#fluent-api",[2651,2713],{"id":14400,"title":2723,"titles":14401,"content":6105,"level":155},"/v1.0.1/learn/concepts#build-vs-render",[2651,2713],{"id":14403,"title":2728,"titles":14404,"content":6109,"level":155},"/v1.0.1/learn/concepts#must-variants",[2651,2713],{"id":14406,"title":2733,"titles":14407,"content":2735,"level":136},"/v1.0.1/learn/concepts#try-variants",[2651],{"id":14409,"title":2738,"titles":14410,"content":2740,"level":136},"/v1.0.1/learn/concepts#query-result",[2651],{"id":14412,"title":1237,"titles":14413,"content":2744,"level":107},"/v1.0.1/learn/architecture",[],{"id":14415,"title":1237,"titles":14416,"content":2748,"level":107},"/v1.0.1/learn/architecture#architecture",[],{"id":14418,"title":2751,"titles":14419,"content":2753,"level":136},"/v1.0.1/learn/architecture#pipeline-overview",[1237],{"id":14421,"title":2756,"titles":14422,"content":99,"level":136},"/v1.0.1/learn/architecture#validation-layer",[1237],{"id":14424,"title":1215,"titles":14425,"content":2761,"level":155},"/v1.0.1/learn/architecture#schema-validation",[1237,2756],{"id":14427,"title":2764,"titles":14428,"content":2766,"level":155},"/v1.0.1/learn/architecture#identifier-validation",[1237,2756],{"id":14430,"title":2769,"titles":14431,"content":2771,"level":155},"/v1.0.1/learn/architecture#alias-restrictions",[1237,2756],{"id":14433,"title":2774,"titles":14434,"content":5107,"level":136},"/v1.0.1/learn/architecture#ast-structure",[1237],{"id":14436,"title":2779,"titles":14437,"content":2781,"level":155},"/v1.0.1/learn/architecture#internal-types",[1237,2774],{"id":14439,"title":2784,"titles":14440,"content":2786,"level":155},"/v1.0.1/learn/architecture#condition-types",[1237,2774],{"id":14442,"title":2789,"titles":14443,"content":2791,"level":136},"/v1.0.1/learn/architecture#render-engine",[1237],{"id":14445,"title":2794,"titles":14446,"content":2796,"level":155},"/v1.0.1/learn/architecture#identifier-quoting",[1237,2789],{"id":14448,"title":2799,"titles":14449,"content":2801,"level":155},"/v1.0.1/learn/architecture#parameter-placeholders",[1237,2789],{"id":14451,"title":2804,"titles":14452,"content":2806,"level":155},"/v1.0.1/learn/architecture#parameter-namespacing",[1237,2789],{"id":14454,"title":5128,"titles":14455,"content":12390,"level":136},"/v1.0.1/learn/architecture#provider-architecture",[1237],{"id":14457,"title":5133,"titles":14458,"content":14459,"level":155},"/v1.0.1/learn/architecture#available-providers",[1237,5128],"ProviderImportNotesPostgreSQLgithub.com/zoobzio/astql/postgresFull feature supportSQLitegithub.com/zoobzio/astql/sqliteRejects unsupported featuresMariaDBgithub.com/zoobzio/astql/mariadbON DUPLICATE KEY UPDATE, RETURNING (10.5+)SQL Servergithub.com/zoobzio/astql/mssqlOUTPUT clause, OFFSET/FETCH syntax",{"id":14461,"title":3341,"titles":14462,"content":14463,"level":155},"/v1.0.1/learn/architecture#usage",[1237,5128],"import \"github.com/zoobzio/astql/sqlite\"\n\n// Use specific provider\nresult, err := query.Render(sqlite.New())",{"id":14465,"title":5142,"titles":14466,"content":11369,"level":155},"/v1.0.1/learn/architecture#dialect-differences",[1237,5128],{"id":14468,"title":2809,"titles":14469,"content":11373,"level":136},"/v1.0.1/learn/architecture#file-structure",[1237],{"id":14471,"title":2814,"titles":14472,"content":2816,"level":136},"/v1.0.1/learn/architecture#security-layers",[1237],{"id":14474,"title":2819,"titles":14475,"content":99,"level":136},"/v1.0.1/learn/architecture#extension-points",[1237],{"id":14477,"title":2823,"titles":14478,"content":2825,"level":155},"/v1.0.1/learn/architecture#custom-expressions",[1237,2819],{"id":14480,"title":2828,"titles":14481,"content":2830,"level":155},"/v1.0.1/learn/architecture#compound-queries",[1237,2819],{"id":14483,"title":2833,"titles":14484,"content":6191,"level":155},"/v1.0.1/learn/architecture#direct-ast-access",[1237,2819],{"id":14486,"title":1215,"titles":14487,"content":2839,"level":107},"/v1.0.1/guides/schema-validation",[],{"id":14489,"title":1215,"titles":14490,"content":2843,"level":107},"/v1.0.1/guides/schema-validation#schema-validation",[],{"id":14492,"title":2846,"titles":14493,"content":2848,"level":136},"/v1.0.1/guides/schema-validation#defining-a-schema",[1215],{"id":14495,"title":2851,"titles":14496,"content":2853,"level":136},"/v1.0.1/guides/schema-validation#creating-an-instance",[1215],{"id":14498,"title":2856,"titles":14499,"content":99,"level":136},"/v1.0.1/guides/schema-validation#validation-behavior",[1215],{"id":14501,"title":2860,"titles":14502,"content":2862,"level":155},"/v1.0.1/guides/schema-validation#table-validation",[1215,2856],{"id":14504,"title":2670,"titles":14505,"content":2866,"level":155},"/v1.0.1/guides/schema-validation#field-validation",[1215,2856],{"id":14507,"title":2680,"titles":14508,"content":2870,"level":155},"/v1.0.1/guides/schema-validation#parameter-validation",[1215,2856],{"id":14510,"title":2873,"titles":14511,"content":2875,"level":136},"/v1.0.1/guides/schema-validation#panic-vs-error",[1215],{"id":14513,"title":2733,"titles":14514,"content":2879,"level":155},"/v1.0.1/guides/schema-validation#try-variants",[1215,2873],{"id":14516,"title":2882,"titles":14517,"content":2884,"level":155},"/v1.0.1/guides/schema-validation#when-to-use-each",[1215,2873],{"id":14519,"title":2887,"titles":14520,"content":2889,"level":136},"/v1.0.1/guides/schema-validation#table-aliases",[1215],{"id":14522,"title":2769,"titles":14523,"content":2893,"level":155},"/v1.0.1/guides/schema-validation#alias-restrictions",[1215,2887],{"id":14525,"title":2896,"titles":14526,"content":2898,"level":155},"/v1.0.1/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":14528,"title":2901,"titles":14529,"content":99,"level":136},"/v1.0.1/guides/schema-validation#schema-organization",[1215],{"id":14531,"title":2905,"titles":14532,"content":6240,"level":155},"/v1.0.1/guides/schema-validation#single-schema-instance",[1215,2901],{"id":14534,"title":2910,"titles":14535,"content":2912,"level":155},"/v1.0.1/guides/schema-validation#multiple-schemas",[1215,2901],{"id":14537,"title":2915,"titles":14538,"content":99,"level":136},"/v1.0.1/guides/schema-validation#dynamic-queries",[1215],{"id":14540,"title":2919,"titles":14541,"content":6250,"level":155},"/v1.0.1/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":14543,"title":2924,"titles":14544,"content":2926,"level":155},"/v1.0.1/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":14546,"title":2929,"titles":14547,"content":99,"level":136},"/v1.0.1/guides/schema-validation#validation-errors",[1215],{"id":14549,"title":2933,"titles":14550,"content":2935,"level":155},"/v1.0.1/guides/schema-validation#error-types",[1215,2929],{"id":14552,"title":2938,"titles":14553,"content":6263,"level":155},"/v1.0.1/guides/schema-validation#handling-errors",[1215,2929],{"id":14555,"title":1251,"titles":14556,"content":2944,"level":107},"/v1.0.1/guides/conditions",[],{"id":14558,"title":1251,"titles":14559,"content":2948,"level":107},"/v1.0.1/guides/conditions#conditions",[],{"id":14561,"title":2951,"titles":14562,"content":2953,"level":136},"/v1.0.1/guides/conditions#basic-conditions",[1251],{"id":14564,"title":1727,"titles":14565,"content":99,"level":136},"/v1.0.1/guides/conditions#operators",[1251],{"id":14567,"title":2959,"titles":14568,"content":2961,"level":155},"/v1.0.1/guides/conditions#comparison-operators",[1251,1727],{"id":14570,"title":2964,"titles":14571,"content":2966,"level":155},"/v1.0.1/guides/conditions#pattern-matching",[1251,1727],{"id":14573,"title":2969,"titles":14574,"content":2971,"level":155},"/v1.0.1/guides/conditions#null-checks",[1251,1727],{"id":14576,"title":2974,"titles":14577,"content":2976,"level":155},"/v1.0.1/guides/conditions#array-operators",[1251,1727],{"id":14579,"title":2693,"titles":14580,"content":99,"level":136},"/v1.0.1/guides/conditions#combining-conditions",[1251],{"id":14582,"title":2982,"titles":14583,"content":2984,"level":155},"/v1.0.1/guides/conditions#and",[1251,2693],{"id":14585,"title":2987,"titles":14586,"content":2989,"level":155},"/v1.0.1/guides/conditions#or",[1251,2693],{"id":14588,"title":2992,"titles":14589,"content":2994,"level":155},"/v1.0.1/guides/conditions#nested-logic",[1251,2693],{"id":14591,"title":2997,"titles":14592,"content":2999,"level":136},"/v1.0.1/guides/conditions#between",[1251],{"id":14594,"title":2708,"titles":14595,"content":3003,"level":136},"/v1.0.1/guides/conditions#field-comparisons",[1251],{"id":14597,"title":3006,"titles":14598,"content":99,"level":136},"/v1.0.1/guides/conditions#subqueries",[1251],{"id":14600,"title":3010,"titles":14601,"content":3012,"level":155},"/v1.0.1/guides/conditions#in-subquery",[1251,3006],{"id":14603,"title":3015,"titles":14604,"content":3017,"level":155},"/v1.0.1/guides/conditions#not-in-subquery",[1251,3006],{"id":14606,"title":3020,"titles":14607,"content":3022,"level":155},"/v1.0.1/guides/conditions#exists",[1251,3006],{"id":14609,"title":3025,"titles":14610,"content":3027,"level":155},"/v1.0.1/guides/conditions#not-exists",[1251,3006],{"id":14612,"title":2804,"titles":14613,"content":3031,"level":155},"/v1.0.1/guides/conditions#parameter-namespacing",[1251,3006],{"id":14615,"title":3034,"titles":14616,"content":3036,"level":136},"/v1.0.1/guides/conditions#multiple-where-clauses",[1251],{"id":14618,"title":3039,"titles":14619,"content":3041,"level":136},"/v1.0.1/guides/conditions#wherefield-shorthand",[1251],{"id":14621,"title":3044,"titles":14622,"content":3046,"level":136},"/v1.0.1/guides/conditions#building-conditions-dynamically",[1251],{"id":14624,"title":1265,"titles":14625,"content":3050,"level":107},"/v1.0.1/guides/joins",[],{"id":14627,"title":1265,"titles":14628,"content":3054,"level":107},"/v1.0.1/guides/joins#joins",[],{"id":14630,"title":3057,"titles":14631,"content":3059,"level":136},"/v1.0.1/guides/joins#join-types",[1265],{"id":14633,"title":3062,"titles":14634,"content":3064,"level":136},"/v1.0.1/guides/joins#basic-join",[1265],{"id":14636,"title":2887,"titles":14637,"content":3068,"level":136},"/v1.0.1/guides/joins#table-aliases",[1265],{"id":14639,"title":3071,"titles":14640,"content":3073,"level":136},"/v1.0.1/guides/joins#left-join",[1265],{"id":14642,"title":3076,"titles":14643,"content":3078,"level":136},"/v1.0.1/guides/joins#right-join",[1265],{"id":14645,"title":3081,"titles":14646,"content":3083,"level":136},"/v1.0.1/guides/joins#full-outer-join",[1265],{"id":14648,"title":3086,"titles":14649,"content":3088,"level":136},"/v1.0.1/guides/joins#cross-join",[1265],{"id":14651,"title":3091,"titles":14652,"content":3093,"level":136},"/v1.0.1/guides/joins#multiple-joins",[1265],{"id":14654,"title":3096,"titles":14655,"content":3098,"level":136},"/v1.0.1/guides/joins#complex-on-conditions",[1265],{"id":14657,"title":3101,"titles":14658,"content":3103,"level":136},"/v1.0.1/guides/joins#self-joins",[1265],{"id":14660,"title":3106,"titles":14661,"content":3108,"level":136},"/v1.0.1/guides/joins#joins-with-count",[1265],{"id":14663,"title":3111,"titles":14664,"content":3113,"level":136},"/v1.0.1/guides/joins#join-validation",[1265],{"id":14666,"title":1668,"titles":14667,"content":3117,"level":107},"/v1.0.1/guides/aggregates",[],{"id":14669,"title":1668,"titles":14670,"content":3121,"level":107},"/v1.0.1/guides/aggregates#aggregates",[],{"id":14672,"title":3124,"titles":14673,"content":99,"level":136},"/v1.0.1/guides/aggregates#aggregate-functions",[1668],{"id":14675,"title":3128,"titles":14676,"content":3130,"level":155},"/v1.0.1/guides/aggregates#basic-aggregates",[1668,3124],{"id":14678,"title":3133,"titles":14679,"content":3135,"level":155},"/v1.0.1/guides/aggregates#using-aggregates",[1668,3124],{"id":14681,"title":3138,"titles":14682,"content":3140,"level":155},"/v1.0.1/guides/aggregates#aliases",[1668,3124],{"id":14684,"title":3143,"titles":14685,"content":3145,"level":136},"/v1.0.1/guides/aggregates#group-by",[1668],{"id":14687,"title":3148,"titles":14688,"content":3150,"level":136},"/v1.0.1/guides/aggregates#having",[1668],{"id":14690,"title":3153,"titles":14691,"content":3155,"level":155},"/v1.0.1/guides/aggregates#simple-having",[1668,3148],{"id":14693,"title":3158,"titles":14694,"content":3160,"level":155},"/v1.0.1/guides/aggregates#aggregate-having",[1668,3148],{"id":14696,"title":3163,"titles":14697,"content":3165,"level":155},"/v1.0.1/guides/aggregates#having-helpers",[1668,3148],{"id":14699,"title":3168,"titles":14700,"content":3170,"level":136},"/v1.0.1/guides/aggregates#filter-clause",[1668],{"id":14702,"title":3173,"titles":14703,"content":3175,"level":136},"/v1.0.1/guides/aggregates#window-functions",[1668],{"id":14705,"title":3178,"titles":14706,"content":3180,"level":155},"/v1.0.1/guides/aggregates#basic-window-functions",[1668,3173],{"id":14708,"title":3183,"titles":14709,"content":3185,"level":155},"/v1.0.1/guides/aggregates#window-function-types",[1668,3173],{"id":14711,"title":3188,"titles":14712,"content":3190,"level":155},"/v1.0.1/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":14714,"title":3193,"titles":14715,"content":3195,"level":155},"/v1.0.1/guides/aggregates#window-specification",[1668,3173],{"id":14717,"title":3198,"titles":14718,"content":3200,"level":155},"/v1.0.1/guides/aggregates#frame-bounds",[1668,3173],{"id":14720,"title":3203,"titles":14721,"content":99,"level":136},"/v1.0.1/guides/aggregates#math-functions",[1668],{"id":14723,"title":3207,"titles":14724,"content":3209,"level":155},"/v1.0.1/guides/aggregates#available-functions",[1668,3203],{"id":14726,"title":3212,"titles":14727,"content":3214,"level":155},"/v1.0.1/guides/aggregates#example",[1668,3203],{"id":14729,"title":1270,"titles":14730,"content":3218,"level":136},"/v1.0.1/guides/aggregates#case-expressions",[1668],{"id":14732,"title":3221,"titles":14733,"content":3223,"level":136},"/v1.0.1/guides/aggregates#type-casting",[1668],{"id":14735,"title":3226,"titles":14736,"content":3228,"level":136},"/v1.0.1/guides/aggregates#coalesce-and-nullif",[1668],{"id":14738,"title":1675,"titles":14739,"content":3232,"level":107},"/v1.0.1/guides/testing",[],{"id":14741,"title":1675,"titles":14742,"content":3236,"level":107},"/v1.0.1/guides/testing#testing",[],{"id":14744,"title":3239,"titles":14745,"content":99,"level":136},"/v1.0.1/guides/testing#testing-query-output",[1675],{"id":14747,"title":3243,"titles":14748,"content":6459,"level":155},"/v1.0.1/guides/testing#basic-output-testing",[1675,3239],{"id":14750,"title":3248,"titles":14751,"content":3250,"level":155},"/v1.0.1/guides/testing#test-instance-setup",[1675,3239],{"id":14753,"title":3253,"titles":14754,"content":99,"level":136},"/v1.0.1/guides/testing#table-driven-tests",[1675],{"id":14756,"title":3257,"titles":14757,"content":6469,"level":155},"/v1.0.1/guides/testing#testing-multiple-queries",[1675,3253],{"id":14759,"title":3262,"titles":14760,"content":99,"level":136},"/v1.0.1/guides/testing#testing-validation",[1675],{"id":14762,"title":3266,"titles":14763,"content":3268,"level":155},"/v1.0.1/guides/testing#testing-invalid-input",[1675,3262],{"id":14765,"title":3271,"titles":14766,"content":3273,"level":155},"/v1.0.1/guides/testing#testing-try-variants",[1675,3262],{"id":14768,"title":3276,"titles":14769,"content":99,"level":136},"/v1.0.1/guides/testing#testing-error-cases",[1675],{"id":14771,"title":3280,"titles":14772,"content":6485,"level":155},"/v1.0.1/guides/testing#builder-errors",[1675,3276],{"id":14774,"title":3285,"titles":14775,"content":99,"level":136},"/v1.0.1/guides/testing#testing-complex-queries",[1675],{"id":14777,"title":3289,"titles":14778,"content":6492,"level":155},"/v1.0.1/guides/testing#join-tests",[1675,3285],{"id":14780,"title":3294,"titles":14781,"content":6496,"level":155},"/v1.0.1/guides/testing#subquery-tests",[1675,3285],{"id":14783,"title":3299,"titles":14784,"content":3301,"level":136},"/v1.0.1/guides/testing#snapshot-testing",[1675],{"id":14786,"title":3304,"titles":14787,"content":99,"level":136},"/v1.0.1/guides/testing#best-practices",[1675],{"id":14789,"title":3308,"titles":14790,"content":3310,"level":155},"/v1.0.1/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":14792,"title":3313,"titles":14793,"content":3315,"level":155},"/v1.0.1/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":14795,"title":3318,"titles":14796,"content":3320,"level":155},"/v1.0.1/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":14798,"title":3323,"titles":14799,"content":6515,"level":155},"/v1.0.1/guides/testing#_4-test-edge-cases",[1675,3304],{"id":14801,"title":1688,"titles":14802,"content":3329,"level":107},"/v1.0.1/cookbook/pagination",[],{"id":14804,"title":1688,"titles":14805,"content":3333,"level":107},"/v1.0.1/cookbook/pagination#pagination",[],{"id":14807,"title":3336,"titles":14808,"content":6525,"level":136},"/v1.0.1/cookbook/pagination#offset-pagination",[1688],{"id":14810,"title":3341,"titles":14811,"content":3343,"level":155},"/v1.0.1/cookbook/pagination#usage",[1688,3336],{"id":14813,"title":3346,"titles":14814,"content":6532,"level":155},"/v1.0.1/cookbook/pagination#with-total-count",[1688,3336],{"id":14816,"title":3351,"titles":14817,"content":3353,"level":155},"/v1.0.1/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":14819,"title":3356,"titles":14820,"content":6539,"level":136},"/v1.0.1/cookbook/pagination#cursor-pagination",[1688],{"id":14822,"title":3341,"titles":14823,"content":3362,"level":155},"/v1.0.1/cookbook/pagination#usage-1",[1688,3356],{"id":14825,"title":3365,"titles":14826,"content":6546,"level":155},"/v1.0.1/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":14828,"title":3370,"titles":14829,"content":6550,"level":155},"/v1.0.1/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":14831,"title":3375,"titles":14832,"content":6554,"level":136},"/v1.0.1/cookbook/pagination#filtering-with-pagination",[1688],{"id":14834,"title":3380,"titles":14835,"content":6558,"level":136},"/v1.0.1/cookbook/pagination#pagination-with-joins",[1688],{"id":14837,"title":3304,"titles":14838,"content":99,"level":136},"/v1.0.1/cookbook/pagination#best-practices",[1688],{"id":14840,"title":3388,"titles":14841,"content":6565,"level":155},"/v1.0.1/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":14843,"title":3393,"titles":14844,"content":3395,"level":155},"/v1.0.1/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":14846,"title":3398,"titles":14847,"content":3400,"level":155},"/v1.0.1/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":14849,"title":3403,"titles":14850,"content":3405,"level":155},"/v1.0.1/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":14852,"title":1695,"titles":14853,"content":3409,"level":107},"/v1.0.1/cookbook/vector-search",[],{"id":14855,"title":1695,"titles":14856,"content":3413,"level":107},"/v1.0.1/cookbook/vector-search#vector-search",[],{"id":14858,"title":3416,"titles":14859,"content":3418,"level":136},"/v1.0.1/cookbook/vector-search#schema-setup",[1695],{"id":14861,"title":3421,"titles":14862,"content":3423,"level":136},"/v1.0.1/cookbook/vector-search#distance-operators",[1695],{"id":14864,"title":3426,"titles":14865,"content":3428,"level":136},"/v1.0.1/cookbook/vector-search#basic-similarity-search",[1695],{"id":14867,"title":3431,"titles":14868,"content":3433,"level":155},"/v1.0.1/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":14870,"title":3436,"titles":14871,"content":3438,"level":136},"/v1.0.1/cookbook/vector-search#cosine-similarity",[1695],{"id":14873,"title":3441,"titles":14874,"content":3443,"level":136},"/v1.0.1/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":14876,"title":3446,"titles":14877,"content":3448,"level":136},"/v1.0.1/cookbook/vector-search#filtered-vector-search",[1695],{"id":14879,"title":3451,"titles":14880,"content":3453,"level":136},"/v1.0.1/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":14882,"title":3456,"titles":14883,"content":3458,"level":136},"/v1.0.1/cookbook/vector-search#hybrid-search",[1695],{"id":14885,"title":3461,"titles":14886,"content":3463,"level":136},"/v1.0.1/cookbook/vector-search#multi-vector-search",[1695],{"id":14888,"title":3466,"titles":14889,"content":3468,"level":136},"/v1.0.1/cookbook/vector-search#indexing-recommendations",[1695],{"id":14891,"title":3304,"titles":14892,"content":99,"level":136},"/v1.0.1/cookbook/vector-search#best-practices",[1695],{"id":14894,"title":3474,"titles":14895,"content":3476,"level":155},"/v1.0.1/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":14897,"title":3479,"titles":14898,"content":3481,"level":155},"/v1.0.1/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":14900,"title":3484,"titles":14901,"content":3486,"level":155},"/v1.0.1/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":14903,"title":1702,"titles":14904,"content":3490,"level":107},"/v1.0.1/cookbook/upserts",[],{"id":14906,"title":1702,"titles":14907,"content":3494,"level":107},"/v1.0.1/cookbook/upserts#upserts",[],{"id":14909,"title":3497,"titles":14910,"content":6635,"level":136},"/v1.0.1/cookbook/upserts#basic-upsert",[1702],{"id":14912,"title":3502,"titles":14913,"content":6639,"level":136},"/v1.0.1/cookbook/upserts#do-nothing",[1702],{"id":14915,"title":3507,"titles":14916,"content":6643,"level":136},"/v1.0.1/cookbook/upserts#multi-column-conflict",[1702],{"id":14918,"title":3512,"titles":14919,"content":6647,"level":136},"/v1.0.1/cookbook/upserts#returning-with-upsert",[1702],{"id":14921,"title":3517,"titles":14922,"content":6651,"level":136},"/v1.0.1/cookbook/upserts#batch-upsert",[1702],{"id":14924,"title":3522,"titles":14925,"content":6655,"level":136},"/v1.0.1/cookbook/upserts#conditional-upsert",[1702],{"id":14927,"title":3527,"titles":14928,"content":6659,"level":136},"/v1.0.1/cookbook/upserts#sync-pattern",[1702],{"id":14930,"title":3532,"titles":14931,"content":6663,"level":136},"/v1.0.1/cookbook/upserts#upsert-with-timestamps",[1702],{"id":14933,"title":3304,"titles":14934,"content":99,"level":136},"/v1.0.1/cookbook/upserts#best-practices",[1702],{"id":14936,"title":3540,"titles":14937,"content":3542,"level":155},"/v1.0.1/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":14939,"title":3545,"titles":14940,"content":3547,"level":155},"/v1.0.1/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":14942,"title":3550,"titles":14943,"content":3552,"level":155},"/v1.0.1/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":14945,"title":3555,"titles":14946,"content":3557,"level":155},"/v1.0.1/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":14948,"title":1709,"titles":14949,"content":6682,"level":107},"/v1.0.1/cookbook/orm-foundation",[],{"id":14951,"title":1709,"titles":14952,"content":6686,"level":107},"/v1.0.1/cookbook/orm-foundation#orm-foundation",[],{"id":14954,"title":6689,"titles":14955,"content":6691,"level":136},"/v1.0.1/cookbook/orm-foundation#the-result",[1709],{"id":14957,"title":6694,"titles":14958,"content":6696,"level":136},"/v1.0.1/cookbook/orm-foundation#the-architecture",[1709],{"id":14960,"title":6699,"titles":14961,"content":6701,"level":136},"/v1.0.1/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":14963,"title":6704,"titles":14964,"content":6706,"level":155},"/v1.0.1/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":14966,"title":6709,"titles":14967,"content":6711,"level":155},"/v1.0.1/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":14969,"title":6714,"titles":14970,"content":6716,"level":155},"/v1.0.1/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":14972,"title":6719,"titles":14973,"content":6721,"level":155},"/v1.0.1/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":14975,"title":6724,"titles":14976,"content":6726,"level":136},"/v1.0.1/cookbook/orm-foundation#the-security-model",[1709],{"id":14978,"title":6729,"titles":14979,"content":6731,"level":136},"/v1.0.1/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":14981,"title":6734,"titles":14982,"content":6736,"level":136},"/v1.0.1/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":14984,"title":6739,"titles":14985,"content":6741,"level":155},"/v1.0.1/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":14987,"title":6744,"titles":14988,"content":6746,"level":155},"/v1.0.1/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":14990,"title":6749,"titles":14991,"content":6751,"level":155},"/v1.0.1/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":14993,"title":6754,"titles":14994,"content":6756,"level":155},"/v1.0.1/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":14996,"title":6759,"titles":14997,"content":6761,"level":136},"/v1.0.1/cookbook/orm-foundation#see-also",[1709],{"id":14999,"title":3560,"titles":15000,"content":3562,"level":107},"/v1.0.1/reference/api",[],{"id":15002,"title":3560,"titles":15003,"content":3566,"level":107},"/v1.0.1/reference/api#api-reference",[],{"id":15005,"title":3569,"titles":15006,"content":99,"level":136},"/v1.0.1/reference/api#instance-creation",[3560],{"id":15008,"title":856,"titles":15009,"content":3574,"level":155},"/v1.0.1/reference/api#newfromdbml",[3560,3569],{"id":15011,"title":3577,"titles":15012,"content":99,"level":136},"/v1.0.1/reference/api#instance-methods",[3560],{"id":15014,"title":119,"titles":15015,"content":3582,"level":155},"/v1.0.1/reference/api#t",[3560,3577],{"id":15017,"title":3585,"titles":15018,"content":3587,"level":155},"/v1.0.1/reference/api#tryt",[3560,3577],{"id":15020,"title":169,"titles":15021,"content":3591,"level":155},"/v1.0.1/reference/api#f",[3560,3577],{"id":15023,"title":3594,"titles":15024,"content":3596,"level":155},"/v1.0.1/reference/api#tryf",[3560,3577],{"id":15026,"title":316,"titles":15027,"content":3600,"level":155},"/v1.0.1/reference/api#p",[3560,3577],{"id":15029,"title":3603,"titles":15030,"content":3605,"level":155},"/v1.0.1/reference/api#tryp",[3560,3577],{"id":15032,"title":284,"titles":15033,"content":3609,"level":155},"/v1.0.1/reference/api#c",[3560,3577],{"id":15035,"title":3612,"titles":15036,"content":3614,"level":155},"/v1.0.1/reference/api#tryc",[3560,3577],{"id":15038,"title":3617,"titles":15039,"content":3619,"level":155},"/v1.0.1/reference/api#and",[3560,3577],{"id":15041,"title":3622,"titles":15042,"content":3624,"level":155},"/v1.0.1/reference/api#or",[3560,3577],{"id":15044,"title":3627,"titles":15045,"content":3629,"level":155},"/v1.0.1/reference/api#null",[3560,3577],{"id":15047,"title":3632,"titles":15048,"content":3634,"level":155},"/v1.0.1/reference/api#notnull",[3560,3577],{"id":15050,"title":3637,"titles":15051,"content":3639,"level":155},"/v1.0.1/reference/api#withtable",[3560,3577],{"id":15053,"title":3642,"titles":15054,"content":3644,"level":155},"/v1.0.1/reference/api#trywithtable",[3560,3577],{"id":15056,"title":3647,"titles":15057,"content":3649,"level":155},"/v1.0.1/reference/api#aggc",[3560,3577],{"id":15059,"title":3652,"titles":15060,"content":3654,"level":155},"/v1.0.1/reference/api#tryaggc",[3560,3577],{"id":15062,"title":3657,"titles":15063,"content":3659,"level":155},"/v1.0.1/reference/api#valuemap",[3560,3577],{"id":15065,"title":3662,"titles":15066,"content":99,"level":136},"/v1.0.1/reference/api#query-builders",[3560],{"id":15068,"title":219,"titles":15069,"content":3667,"level":155},"/v1.0.1/reference/api#select",[3560,3662],{"id":15071,"title":3670,"titles":15072,"content":3672,"level":155},"/v1.0.1/reference/api#insert",[3560,3662],{"id":15074,"title":3675,"titles":15075,"content":3677,"level":155},"/v1.0.1/reference/api#update",[3560,3662],{"id":15077,"title":3680,"titles":15078,"content":3682,"level":155},"/v1.0.1/reference/api#delete",[3560,3662],{"id":15080,"title":3685,"titles":15081,"content":3687,"level":155},"/v1.0.1/reference/api#count",[3560,3662],{"id":15083,"title":3690,"titles":15084,"content":99,"level":136},"/v1.0.1/reference/api#builder-methods",[3560],{"id":15086,"title":2665,"titles":15087,"content":3695,"level":155},"/v1.0.1/reference/api#fields",[3560,3690],{"id":15089,"title":3698,"titles":15090,"content":3700,"level":155},"/v1.0.1/reference/api#where",[3560,3690],{"id":15092,"title":3703,"titles":15093,"content":3705,"level":155},"/v1.0.1/reference/api#wherefield",[3560,3690],{"id":15095,"title":3708,"titles":15096,"content":3710,"level":155},"/v1.0.1/reference/api#orderby",[3560,3690],{"id":15098,"title":3713,"titles":15099,"content":3715,"level":155},"/v1.0.1/reference/api#orderbynulls",[3560,3690],{"id":15101,"title":3718,"titles":15102,"content":3720,"level":155},"/v1.0.1/reference/api#orderbyexpr",[3560,3690],{"id":15104,"title":3723,"titles":15105,"content":5734,"level":155},"/v1.0.1/reference/api#limit",[3560,3690],{"id":15107,"title":5737,"titles":15108,"content":5739,"level":155},"/v1.0.1/reference/api#limitparam",[3560,3690],{"id":15110,"title":3728,"titles":15111,"content":5743,"level":155},"/v1.0.1/reference/api#offset",[3560,3690],{"id":15113,"title":5746,"titles":15114,"content":5748,"level":155},"/v1.0.1/reference/api#offsetparam",[3560,3690],{"id":15116,"title":3733,"titles":15117,"content":3735,"level":155},"/v1.0.1/reference/api#set",[3560,3690],{"id":15119,"title":3738,"titles":15120,"content":3740,"level":155},"/v1.0.1/reference/api#values",[3560,3690],{"id":15122,"title":3743,"titles":15123,"content":3745,"level":155},"/v1.0.1/reference/api#returning",[3560,3690],{"id":15125,"title":3748,"titles":15126,"content":3750,"level":155},"/v1.0.1/reference/api#distinct",[3560,3690],{"id":15128,"title":3753,"titles":15129,"content":3755,"level":155},"/v1.0.1/reference/api#distincton",[3560,3690],{"id":15131,"title":3758,"titles":15132,"content":3760,"level":155},"/v1.0.1/reference/api#groupby",[3560,3690],{"id":15134,"title":3763,"titles":15135,"content":3765,"level":155},"/v1.0.1/reference/api#having",[3560,3690],{"id":15137,"title":3768,"titles":15138,"content":3770,"level":155},"/v1.0.1/reference/api#havingagg",[3560,3690],{"id":15140,"title":3773,"titles":15141,"content":3775,"level":155},"/v1.0.1/reference/api#selectexpr",[3560,3690],{"id":15143,"title":3778,"titles":15144,"content":3780,"level":155},"/v1.0.1/reference/api#onconflict",[3560,3690],{"id":15146,"title":3783,"titles":15147,"content":3785,"level":155},"/v1.0.1/reference/api#join-methods",[3560,3690],{"id":15149,"title":3788,"titles":15150,"content":3790,"level":155},"/v1.0.1/reference/api#row-locking",[3560,3690],{"id":15152,"title":3793,"titles":15153,"content":3795,"level":155},"/v1.0.1/reference/api#build",[3560,3690],{"id":15155,"title":3798,"titles":15156,"content":3800,"level":155},"/v1.0.1/reference/api#mustbuild",[3560,3690],{"id":15158,"title":350,"titles":15159,"content":6924,"level":155},"/v1.0.1/reference/api#render",[3560,3690],{"id":15161,"title":3807,"titles":15162,"content":6928,"level":155},"/v1.0.1/reference/api#mustrender",[3560,3690],{"id":15164,"title":3812,"titles":15165,"content":99,"level":136},"/v1.0.1/reference/api#set-operations",[3560],{"id":15167,"title":3816,"titles":15168,"content":3818,"level":155},"/v1.0.1/reference/api#union-unionall",[3560,3812],{"id":15170,"title":3821,"titles":15171,"content":3823,"level":155},"/v1.0.1/reference/api#intersect-intersectall",[3560,3812],{"id":15173,"title":3826,"titles":15174,"content":3828,"level":155},"/v1.0.1/reference/api#except-exceptall",[3560,3812],{"id":15176,"title":3831,"titles":15177,"content":6944,"level":136},"/v1.0.1/reference/api#rendering",[3560],{"id":15179,"title":3844,"titles":15180,"content":99,"level":136},"/v1.0.1/reference/api#expression-functions",[3560],{"id":15182,"title":1668,"titles":15183,"content":3849,"level":155},"/v1.0.1/reference/api#aggregates",[3560,3844],{"id":15185,"title":3852,"titles":15186,"content":3854,"level":155},"/v1.0.1/reference/api#filter-aggregates",[3560,3844],{"id":15188,"title":1251,"titles":15189,"content":3858,"level":155},"/v1.0.1/reference/api#conditions",[3560,3844],{"id":15191,"title":3006,"titles":15192,"content":3862,"level":155},"/v1.0.1/reference/api#subqueries",[3560,3844],{"id":15194,"title":3865,"titles":15195,"content":3867,"level":155},"/v1.0.1/reference/api#case-expression",[3560,3844],{"id":15197,"title":3870,"titles":15198,"content":3872,"level":155},"/v1.0.1/reference/api#null-handling",[3560,3844],{"id":15200,"title":3203,"titles":15201,"content":3876,"level":155},"/v1.0.1/reference/api#math-functions",[3560,3844],{"id":15203,"title":5855,"titles":15204,"content":5857,"level":155},"/v1.0.1/reference/api#string-functions",[3560,3844],{"id":15206,"title":5860,"titles":15207,"content":5862,"level":155},"/v1.0.1/reference/api#date-functions",[3560,3844],{"id":15209,"title":3221,"titles":15210,"content":3880,"level":155},"/v1.0.1/reference/api#type-casting",[3560,3844],{"id":15212,"title":3173,"titles":15213,"content":3884,"level":155},"/v1.0.1/reference/api#window-functions",[3560,3844],{"id":15215,"title":3193,"titles":15216,"content":3888,"level":155},"/v1.0.1/reference/api#window-specification",[3560,3844],{"id":15218,"title":3891,"titles":15219,"content":3893,"level":155},"/v1.0.1/reference/api#windowbuilder-methods",[3560,3844],{"id":15221,"title":3896,"titles":15222,"content":3898,"level":155},"/v1.0.1/reference/api#expression-alias",[3560,3844],{"id":15224,"title":3163,"titles":15225,"content":3902,"level":155},"/v1.0.1/reference/api#having-helpers",[3560,3844],{"id":15227,"title":3905,"titles":15228,"content":99,"level":136},"/v1.0.1/reference/api#types",[3560],{"id":15230,"title":3909,"titles":15231,"content":3911,"level":155},"/v1.0.1/reference/api#queryresult",[3560,3905],{"id":15233,"title":3914,"titles":15234,"content":3916,"level":155},"/v1.0.1/reference/api#direction",[3560,3905],{"id":15236,"title":3919,"titles":15237,"content":3921,"level":155},"/v1.0.1/reference/api#nullsordering",[3560,3905],{"id":15239,"title":3924,"titles":15240,"content":5896,"level":155},"/v1.0.1/reference/api#operation",[3560,3905],{"id":15242,"title":5899,"titles":15243,"content":99,"level":136},"/v1.0.1/reference/api#providers",[3560],{"id":15245,"title":5903,"titles":15246,"content":13180,"level":155},"/v1.0.1/reference/api#renderer-interface",[3560,5899],{"id":15248,"title":1187,"titles":15249,"content":14214,"level":155},"/v1.0.1/reference/api#capabilities",[3560,5899],{"id":15251,"title":5908,"titles":15252,"content":15253,"level":155},"/v1.0.1/reference/api#postgresql-provider",[3560,5899],"import \"github.com/zoobzio/astql/postgres\"\n\nrenderer := postgres.New()\nresult, err := query.Render(renderer) Full feature support.",{"id":15255,"title":5913,"titles":15256,"content":15257,"level":155},"/v1.0.1/reference/api#sqlite-provider",[3560,5899],"import \"github.com/zoobzio/astql/sqlite\"\n\nrenderer := sqlite.New()\nresult, err := query.Render(renderer) Returns UnsupportedFeatureError for features not available in SQLite: DISTINCT ONILIKE / NOT ILIKERegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)IN / NOT IN with array parametersRow-level locking (FOR UPDATE, FOR SHARE)POWER and SQRT math functions",{"id":15259,"title":12159,"titles":15260,"content":15261,"level":155},"/v1.0.1/reference/api#mariadb-provider",[3560,5899],"import \"github.com/zoobzio/astql/mariadb\"\n\nrenderer := mariadb.New()\nresult, err := query.Render(renderer) MariaDB-specific behavior: Uses backtick quoting for identifiers: `name`Uses :name parameter placeholders (sqlx compatible)ON CONFLICT DO UPDATE → ON DUPLICATE KEY UPDATEON CONFLICT DO NOTHING → ON DUPLICATE KEY UPDATE field = field (no-op)ILIKE maps to LIKE (MariaDB LIKE is case-insensitive by default)Standard IN (...) syntax instead of = ANY(:array)RETURNING clause support for INSERT/DELETE (MariaDB 10.5+, UPDATE not supported) Returns UnsupportedFeatureError for: DISTINCT ONFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)FOR NO KEY UPDATE / FOR KEY SHARE (use FOR UPDATE or FOR SHARE instead)",{"id":15263,"title":5923,"titles":15264,"content":15265,"level":155},"/v1.0.1/reference/api#sql-server-provider",[3560,5899],"import \"github.com/zoobzio/astql/mssql\"\n\nrenderer := mssql.New()\nresult, err := query.Render(renderer) SQL Server-specific behavior: Uses square bracket quoting for identifiers: [name]Uses @name parameter placeholdersLIMIT/OFFSET → OFFSET n ROWS FETCH NEXT m ROWS ONLY (requires ORDER BY)RETURNING → OUTPUT INSERTED.* / OUTPUT DELETED.*LENGTH() → LEN()NOW() → GETDATE()EXTRACT() → DATEPART()!= → \u003C> (preferred SQL Server syntax) Returns UnsupportedFeatureError for: ON CONFLICT / upsert (MERGE is too complex)DISTINCT ONILIKE / NOT ILIKEFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)Row-level locking (FOR UPDATE, FOR SHARE)LIMIT without ORDER BY (returns error) html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}",{"id":15267,"title":3929,"titles":15268,"content":3931,"level":107},"/v1.0.1/reference/operators",[],{"id":15270,"title":3929,"titles":15271,"content":3935,"level":107},"/v1.0.1/reference/operators#operators-reference",[],{"id":15273,"title":2959,"titles":15274,"content":3939,"level":136},"/v1.0.1/reference/operators#comparison-operators",[3929],{"id":15276,"title":3341,"titles":15277,"content":3943,"level":155},"/v1.0.1/reference/operators#usage",[3929,2959],{"id":15279,"title":2964,"titles":15280,"content":3947,"level":136},"/v1.0.1/reference/operators#pattern-matching",[3929],{"id":15282,"title":3341,"titles":15283,"content":3951,"level":155},"/v1.0.1/reference/operators#usage-1",[3929,2964],{"id":15285,"title":3954,"titles":15286,"content":3956,"level":136},"/v1.0.1/reference/operators#null-operators",[3929],{"id":15288,"title":3341,"titles":15289,"content":3960,"level":155},"/v1.0.1/reference/operators#usage-2",[3929,3954],{"id":15291,"title":2974,"titles":15292,"content":3964,"level":136},"/v1.0.1/reference/operators#array-operators",[3929],{"id":15294,"title":3341,"titles":15295,"content":3968,"level":155},"/v1.0.1/reference/operators#usage-3",[3929,2974],{"id":15297,"title":3971,"titles":15298,"content":3973,"level":155},"/v1.0.1/reference/operators#with-sqlx",[3929,2974],{"id":15300,"title":3976,"titles":15301,"content":3978,"level":136},"/v1.0.1/reference/operators#subquery-operators",[3929],{"id":15303,"title":3341,"titles":15304,"content":3982,"level":155},"/v1.0.1/reference/operators#usage-4",[3929,3976],{"id":15306,"title":3985,"titles":15307,"content":3987,"level":136},"/v1.0.1/reference/operators#regex-operators",[3929],{"id":15309,"title":3341,"titles":15310,"content":3991,"level":155},"/v1.0.1/reference/operators#usage-5",[3929,3985],{"id":15312,"title":3994,"titles":15313,"content":3996,"level":136},"/v1.0.1/reference/operators#postgresql-array-operators",[3929],{"id":15315,"title":3341,"titles":15316,"content":4000,"level":155},"/v1.0.1/reference/operators#usage-6",[3929,3994],{"id":15318,"title":4003,"titles":15319,"content":4005,"level":136},"/v1.0.1/reference/operators#vector-operators-pgvector",[3929],{"id":15321,"title":3341,"titles":15322,"content":4009,"level":155},"/v1.0.1/reference/operators#usage-7",[3929,4003],{"id":15324,"title":4012,"titles":15325,"content":4014,"level":155},"/v1.0.1/reference/operators#with-pgvector",[3929,4003],{"id":15327,"title":4017,"titles":15328,"content":4019,"level":136},"/v1.0.1/reference/operators#operator-selection-guide",[3929],{"id":15330,"title":3124,"titles":15331,"content":4023,"level":136},"/v1.0.1/reference/operators#aggregate-functions",[3929],{"id":15333,"title":3173,"titles":15334,"content":4027,"level":136},"/v1.0.1/reference/operators#window-functions",[3929],{"id":15336,"title":3198,"titles":15337,"content":4031,"level":136},"/v1.0.1/reference/operators#frame-bounds",[3929],{"id":15339,"title":4034,"titles":15340,"content":4036,"level":136},"/v1.0.1/reference/operators#cast-types",[3929],{"id":15342,"title":1614,"titles":15343,"content":2581,"level":107},"/v1.0.2/overview",[],{"id":15345,"title":1614,"titles":15346,"content":14309,"level":107},"/v1.0.2/overview#overview",[],{"id":15348,"title":1237,"titles":15349,"content":2589,"level":136},"/v1.0.2/overview#architecture",[1614],{"id":15351,"title":2592,"titles":15352,"content":2594,"level":136},"/v1.0.2/overview#philosophy",[1614],{"id":15354,"title":1187,"titles":15355,"content":2598,"level":136},"/v1.0.2/overview#capabilities",[1614],{"id":15357,"title":2601,"titles":15358,"content":99,"level":136},"/v1.0.2/overview#priorities",[1614],{"id":15360,"title":1782,"titles":15361,"content":2606,"level":155},"/v1.0.2/overview#security",[1614,2601],{"id":15363,"title":2609,"titles":15364,"content":6026,"level":155},"/v1.0.2/overview#ergonomics",[1614,2601],{"id":15366,"title":5002,"titles":15367,"content":14331,"level":155},"/v1.0.2/overview#multi-provider-architecture",[1614,2601],{"id":15369,"title":1628,"titles":15370,"content":2620,"level":107},"/v1.0.2/learn/quickstart",[],{"id":15372,"title":1628,"titles":15373,"content":99,"level":107},"/v1.0.2/learn/quickstart#quickstart",[],{"id":15375,"title":2626,"titles":15376,"content":6040,"level":136},"/v1.0.2/learn/quickstart#requirements",[1628],{"id":15378,"title":2631,"titles":15379,"content":2633,"level":136},"/v1.0.2/learn/quickstart#installation",[1628],{"id":15381,"title":2636,"titles":15382,"content":14347,"level":136},"/v1.0.2/learn/quickstart#basic-usage",[1628],{"id":15384,"title":2641,"titles":15385,"content":6051,"level":136},"/v1.0.2/learn/quickstart#whats-happening",[1628],{"id":15387,"title":2646,"titles":15388,"content":6055,"level":136},"/v1.0.2/learn/quickstart#using-with-sqlx",[1628],{"id":15390,"title":2651,"titles":15391,"content":2653,"level":107},"/v1.0.2/learn/concepts",[],{"id":15393,"title":2651,"titles":15394,"content":2657,"level":107},"/v1.0.2/learn/concepts#core-concepts",[],{"id":15396,"title":2660,"titles":15397,"content":2662,"level":136},"/v1.0.2/learn/concepts#tables",[2651],{"id":15399,"title":2665,"titles":15400,"content":2667,"level":136},"/v1.0.2/learn/concepts#fields",[2651],{"id":15402,"title":2670,"titles":15403,"content":2672,"level":155},"/v1.0.2/learn/concepts#field-validation",[2651,2665],{"id":15405,"title":2675,"titles":15406,"content":2677,"level":136},"/v1.0.2/learn/concepts#params",[2651],{"id":15408,"title":2680,"titles":15409,"content":2682,"level":155},"/v1.0.2/learn/concepts#parameter-validation",[2651,2675],{"id":15411,"title":1251,"titles":15412,"content":2686,"level":136},"/v1.0.2/learn/concepts#conditions",[2651],{"id":15414,"title":1727,"titles":15415,"content":2690,"level":155},"/v1.0.2/learn/concepts#operators",[2651,1251],{"id":15417,"title":2693,"titles":15418,"content":2695,"level":155},"/v1.0.2/learn/concepts#combining-conditions",[2651,1251],{"id":15420,"title":2698,"titles":15421,"content":2700,"level":155},"/v1.0.2/learn/concepts#nested-conditions",[2651,1251],{"id":15423,"title":2703,"titles":15424,"content":2705,"level":155},"/v1.0.2/learn/concepts#null-conditions",[2651,1251],{"id":15426,"title":2708,"titles":15427,"content":2710,"level":155},"/v1.0.2/learn/concepts#field-comparisons",[2651,1251],{"id":15429,"title":2713,"titles":15430,"content":2715,"level":136},"/v1.0.2/learn/concepts#builders",[2651],{"id":15432,"title":2718,"titles":15433,"content":6101,"level":155},"/v1.0.2/learn/concepts#fluent-api",[2651,2713],{"id":15435,"title":2723,"titles":15436,"content":6105,"level":155},"/v1.0.2/learn/concepts#build-vs-render",[2651,2713],{"id":15438,"title":2728,"titles":15439,"content":6109,"level":155},"/v1.0.2/learn/concepts#must-variants",[2651,2713],{"id":15441,"title":2733,"titles":15442,"content":2735,"level":136},"/v1.0.2/learn/concepts#try-variants",[2651],{"id":15444,"title":2738,"titles":15445,"content":2740,"level":136},"/v1.0.2/learn/concepts#query-result",[2651],{"id":15447,"title":1237,"titles":15448,"content":2744,"level":107},"/v1.0.2/learn/architecture",[],{"id":15450,"title":1237,"titles":15451,"content":2748,"level":107},"/v1.0.2/learn/architecture#architecture",[],{"id":15453,"title":2751,"titles":15454,"content":2753,"level":136},"/v1.0.2/learn/architecture#pipeline-overview",[1237],{"id":15456,"title":2756,"titles":15457,"content":99,"level":136},"/v1.0.2/learn/architecture#validation-layer",[1237],{"id":15459,"title":1215,"titles":15460,"content":2761,"level":155},"/v1.0.2/learn/architecture#schema-validation",[1237,2756],{"id":15462,"title":2764,"titles":15463,"content":2766,"level":155},"/v1.0.2/learn/architecture#identifier-validation",[1237,2756],{"id":15465,"title":2769,"titles":15466,"content":2771,"level":155},"/v1.0.2/learn/architecture#alias-restrictions",[1237,2756],{"id":15468,"title":2774,"titles":15469,"content":5107,"level":136},"/v1.0.2/learn/architecture#ast-structure",[1237],{"id":15471,"title":2779,"titles":15472,"content":2781,"level":155},"/v1.0.2/learn/architecture#internal-types",[1237,2774],{"id":15474,"title":2784,"titles":15475,"content":2786,"level":155},"/v1.0.2/learn/architecture#condition-types",[1237,2774],{"id":15477,"title":2789,"titles":15478,"content":2791,"level":136},"/v1.0.2/learn/architecture#render-engine",[1237],{"id":15480,"title":2794,"titles":15481,"content":2796,"level":155},"/v1.0.2/learn/architecture#identifier-quoting",[1237,2789],{"id":15483,"title":2799,"titles":15484,"content":2801,"level":155},"/v1.0.2/learn/architecture#parameter-placeholders",[1237,2789],{"id":15486,"title":2804,"titles":15487,"content":2806,"level":155},"/v1.0.2/learn/architecture#parameter-namespacing",[1237,2789],{"id":15489,"title":5128,"titles":15490,"content":12390,"level":136},"/v1.0.2/learn/architecture#provider-architecture",[1237],{"id":15492,"title":5133,"titles":15493,"content":14459,"level":155},"/v1.0.2/learn/architecture#available-providers",[1237,5128],{"id":15495,"title":3341,"titles":15496,"content":14463,"level":155},"/v1.0.2/learn/architecture#usage",[1237,5128],{"id":15498,"title":5142,"titles":15499,"content":11369,"level":155},"/v1.0.2/learn/architecture#dialect-differences",[1237,5128],{"id":15501,"title":2809,"titles":15502,"content":11373,"level":136},"/v1.0.2/learn/architecture#file-structure",[1237],{"id":15504,"title":2814,"titles":15505,"content":2816,"level":136},"/v1.0.2/learn/architecture#security-layers",[1237],{"id":15507,"title":2819,"titles":15508,"content":99,"level":136},"/v1.0.2/learn/architecture#extension-points",[1237],{"id":15510,"title":2823,"titles":15511,"content":2825,"level":155},"/v1.0.2/learn/architecture#custom-expressions",[1237,2819],{"id":15513,"title":2828,"titles":15514,"content":2830,"level":155},"/v1.0.2/learn/architecture#compound-queries",[1237,2819],{"id":15516,"title":2833,"titles":15517,"content":6191,"level":155},"/v1.0.2/learn/architecture#direct-ast-access",[1237,2819],{"id":15519,"title":1215,"titles":15520,"content":2839,"level":107},"/v1.0.2/guides/schema-validation",[],{"id":15522,"title":1215,"titles":15523,"content":2843,"level":107},"/v1.0.2/guides/schema-validation#schema-validation",[],{"id":15525,"title":2846,"titles":15526,"content":2848,"level":136},"/v1.0.2/guides/schema-validation#defining-a-schema",[1215],{"id":15528,"title":2851,"titles":15529,"content":2853,"level":136},"/v1.0.2/guides/schema-validation#creating-an-instance",[1215],{"id":15531,"title":2856,"titles":15532,"content":99,"level":136},"/v1.0.2/guides/schema-validation#validation-behavior",[1215],{"id":15534,"title":2860,"titles":15535,"content":2862,"level":155},"/v1.0.2/guides/schema-validation#table-validation",[1215,2856],{"id":15537,"title":2670,"titles":15538,"content":2866,"level":155},"/v1.0.2/guides/schema-validation#field-validation",[1215,2856],{"id":15540,"title":2680,"titles":15541,"content":2870,"level":155},"/v1.0.2/guides/schema-validation#parameter-validation",[1215,2856],{"id":15543,"title":2873,"titles":15544,"content":2875,"level":136},"/v1.0.2/guides/schema-validation#panic-vs-error",[1215],{"id":15546,"title":2733,"titles":15547,"content":2879,"level":155},"/v1.0.2/guides/schema-validation#try-variants",[1215,2873],{"id":15549,"title":2882,"titles":15550,"content":2884,"level":155},"/v1.0.2/guides/schema-validation#when-to-use-each",[1215,2873],{"id":15552,"title":2887,"titles":15553,"content":2889,"level":136},"/v1.0.2/guides/schema-validation#table-aliases",[1215],{"id":15555,"title":2769,"titles":15556,"content":2893,"level":155},"/v1.0.2/guides/schema-validation#alias-restrictions",[1215,2887],{"id":15558,"title":2896,"titles":15559,"content":2898,"level":155},"/v1.0.2/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":15561,"title":2901,"titles":15562,"content":99,"level":136},"/v1.0.2/guides/schema-validation#schema-organization",[1215],{"id":15564,"title":2905,"titles":15565,"content":6240,"level":155},"/v1.0.2/guides/schema-validation#single-schema-instance",[1215,2901],{"id":15567,"title":2910,"titles":15568,"content":2912,"level":155},"/v1.0.2/guides/schema-validation#multiple-schemas",[1215,2901],{"id":15570,"title":2915,"titles":15571,"content":99,"level":136},"/v1.0.2/guides/schema-validation#dynamic-queries",[1215],{"id":15573,"title":2919,"titles":15574,"content":6250,"level":155},"/v1.0.2/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":15576,"title":2924,"titles":15577,"content":2926,"level":155},"/v1.0.2/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":15579,"title":2929,"titles":15580,"content":99,"level":136},"/v1.0.2/guides/schema-validation#validation-errors",[1215],{"id":15582,"title":2933,"titles":15583,"content":2935,"level":155},"/v1.0.2/guides/schema-validation#error-types",[1215,2929],{"id":15585,"title":2938,"titles":15586,"content":6263,"level":155},"/v1.0.2/guides/schema-validation#handling-errors",[1215,2929],{"id":15588,"title":1251,"titles":15589,"content":2944,"level":107},"/v1.0.2/guides/conditions",[],{"id":15591,"title":1251,"titles":15592,"content":2948,"level":107},"/v1.0.2/guides/conditions#conditions",[],{"id":15594,"title":2951,"titles":15595,"content":2953,"level":136},"/v1.0.2/guides/conditions#basic-conditions",[1251],{"id":15597,"title":1727,"titles":15598,"content":99,"level":136},"/v1.0.2/guides/conditions#operators",[1251],{"id":15600,"title":2959,"titles":15601,"content":2961,"level":155},"/v1.0.2/guides/conditions#comparison-operators",[1251,1727],{"id":15603,"title":2964,"titles":15604,"content":2966,"level":155},"/v1.0.2/guides/conditions#pattern-matching",[1251,1727],{"id":15606,"title":2969,"titles":15607,"content":2971,"level":155},"/v1.0.2/guides/conditions#null-checks",[1251,1727],{"id":15609,"title":2974,"titles":15610,"content":2976,"level":155},"/v1.0.2/guides/conditions#array-operators",[1251,1727],{"id":15612,"title":2693,"titles":15613,"content":99,"level":136},"/v1.0.2/guides/conditions#combining-conditions",[1251],{"id":15615,"title":2982,"titles":15616,"content":2984,"level":155},"/v1.0.2/guides/conditions#and",[1251,2693],{"id":15618,"title":2987,"titles":15619,"content":2989,"level":155},"/v1.0.2/guides/conditions#or",[1251,2693],{"id":15621,"title":2992,"titles":15622,"content":2994,"level":155},"/v1.0.2/guides/conditions#nested-logic",[1251,2693],{"id":15624,"title":2997,"titles":15625,"content":2999,"level":136},"/v1.0.2/guides/conditions#between",[1251],{"id":15627,"title":2708,"titles":15628,"content":3003,"level":136},"/v1.0.2/guides/conditions#field-comparisons",[1251],{"id":15630,"title":3006,"titles":15631,"content":99,"level":136},"/v1.0.2/guides/conditions#subqueries",[1251],{"id":15633,"title":3010,"titles":15634,"content":3012,"level":155},"/v1.0.2/guides/conditions#in-subquery",[1251,3006],{"id":15636,"title":3015,"titles":15637,"content":3017,"level":155},"/v1.0.2/guides/conditions#not-in-subquery",[1251,3006],{"id":15639,"title":3020,"titles":15640,"content":3022,"level":155},"/v1.0.2/guides/conditions#exists",[1251,3006],{"id":15642,"title":3025,"titles":15643,"content":3027,"level":155},"/v1.0.2/guides/conditions#not-exists",[1251,3006],{"id":15645,"title":2804,"titles":15646,"content":3031,"level":155},"/v1.0.2/guides/conditions#parameter-namespacing",[1251,3006],{"id":15648,"title":3034,"titles":15649,"content":3036,"level":136},"/v1.0.2/guides/conditions#multiple-where-clauses",[1251],{"id":15651,"title":3039,"titles":15652,"content":3041,"level":136},"/v1.0.2/guides/conditions#wherefield-shorthand",[1251],{"id":15654,"title":3044,"titles":15655,"content":3046,"level":136},"/v1.0.2/guides/conditions#building-conditions-dynamically",[1251],{"id":15657,"title":1265,"titles":15658,"content":3050,"level":107},"/v1.0.2/guides/joins",[],{"id":15660,"title":1265,"titles":15661,"content":3054,"level":107},"/v1.0.2/guides/joins#joins",[],{"id":15663,"title":3057,"titles":15664,"content":3059,"level":136},"/v1.0.2/guides/joins#join-types",[1265],{"id":15666,"title":3062,"titles":15667,"content":3064,"level":136},"/v1.0.2/guides/joins#basic-join",[1265],{"id":15669,"title":2887,"titles":15670,"content":3068,"level":136},"/v1.0.2/guides/joins#table-aliases",[1265],{"id":15672,"title":3071,"titles":15673,"content":3073,"level":136},"/v1.0.2/guides/joins#left-join",[1265],{"id":15675,"title":3076,"titles":15676,"content":3078,"level":136},"/v1.0.2/guides/joins#right-join",[1265],{"id":15678,"title":3081,"titles":15679,"content":3083,"level":136},"/v1.0.2/guides/joins#full-outer-join",[1265],{"id":15681,"title":3086,"titles":15682,"content":3088,"level":136},"/v1.0.2/guides/joins#cross-join",[1265],{"id":15684,"title":3091,"titles":15685,"content":3093,"level":136},"/v1.0.2/guides/joins#multiple-joins",[1265],{"id":15687,"title":3096,"titles":15688,"content":3098,"level":136},"/v1.0.2/guides/joins#complex-on-conditions",[1265],{"id":15690,"title":3101,"titles":15691,"content":3103,"level":136},"/v1.0.2/guides/joins#self-joins",[1265],{"id":15693,"title":3106,"titles":15694,"content":3108,"level":136},"/v1.0.2/guides/joins#joins-with-count",[1265],{"id":15696,"title":3111,"titles":15697,"content":3113,"level":136},"/v1.0.2/guides/joins#join-validation",[1265],{"id":15699,"title":1668,"titles":15700,"content":3117,"level":107},"/v1.0.2/guides/aggregates",[],{"id":15702,"title":1668,"titles":15703,"content":3121,"level":107},"/v1.0.2/guides/aggregates#aggregates",[],{"id":15705,"title":3124,"titles":15706,"content":99,"level":136},"/v1.0.2/guides/aggregates#aggregate-functions",[1668],{"id":15708,"title":3128,"titles":15709,"content":3130,"level":155},"/v1.0.2/guides/aggregates#basic-aggregates",[1668,3124],{"id":15711,"title":3133,"titles":15712,"content":3135,"level":155},"/v1.0.2/guides/aggregates#using-aggregates",[1668,3124],{"id":15714,"title":3138,"titles":15715,"content":3140,"level":155},"/v1.0.2/guides/aggregates#aliases",[1668,3124],{"id":15717,"title":3143,"titles":15718,"content":3145,"level":136},"/v1.0.2/guides/aggregates#group-by",[1668],{"id":15720,"title":3148,"titles":15721,"content":3150,"level":136},"/v1.0.2/guides/aggregates#having",[1668],{"id":15723,"title":3153,"titles":15724,"content":3155,"level":155},"/v1.0.2/guides/aggregates#simple-having",[1668,3148],{"id":15726,"title":3158,"titles":15727,"content":3160,"level":155},"/v1.0.2/guides/aggregates#aggregate-having",[1668,3148],{"id":15729,"title":3163,"titles":15730,"content":3165,"level":155},"/v1.0.2/guides/aggregates#having-helpers",[1668,3148],{"id":15732,"title":3168,"titles":15733,"content":3170,"level":136},"/v1.0.2/guides/aggregates#filter-clause",[1668],{"id":15735,"title":3173,"titles":15736,"content":3175,"level":136},"/v1.0.2/guides/aggregates#window-functions",[1668],{"id":15738,"title":3178,"titles":15739,"content":3180,"level":155},"/v1.0.2/guides/aggregates#basic-window-functions",[1668,3173],{"id":15741,"title":3183,"titles":15742,"content":3185,"level":155},"/v1.0.2/guides/aggregates#window-function-types",[1668,3173],{"id":15744,"title":3188,"titles":15745,"content":3190,"level":155},"/v1.0.2/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":15747,"title":3193,"titles":15748,"content":3195,"level":155},"/v1.0.2/guides/aggregates#window-specification",[1668,3173],{"id":15750,"title":3198,"titles":15751,"content":3200,"level":155},"/v1.0.2/guides/aggregates#frame-bounds",[1668,3173],{"id":15753,"title":3203,"titles":15754,"content":99,"level":136},"/v1.0.2/guides/aggregates#math-functions",[1668],{"id":15756,"title":3207,"titles":15757,"content":3209,"level":155},"/v1.0.2/guides/aggregates#available-functions",[1668,3203],{"id":15759,"title":3212,"titles":15760,"content":3214,"level":155},"/v1.0.2/guides/aggregates#example",[1668,3203],{"id":15762,"title":1270,"titles":15763,"content":3218,"level":136},"/v1.0.2/guides/aggregates#case-expressions",[1668],{"id":15765,"title":3221,"titles":15766,"content":3223,"level":136},"/v1.0.2/guides/aggregates#type-casting",[1668],{"id":15768,"title":3226,"titles":15769,"content":3228,"level":136},"/v1.0.2/guides/aggregates#coalesce-and-nullif",[1668],{"id":15771,"title":1675,"titles":15772,"content":3232,"level":107},"/v1.0.2/guides/testing",[],{"id":15774,"title":1675,"titles":15775,"content":3236,"level":107},"/v1.0.2/guides/testing#testing",[],{"id":15777,"title":3239,"titles":15778,"content":99,"level":136},"/v1.0.2/guides/testing#testing-query-output",[1675],{"id":15780,"title":3243,"titles":15781,"content":6459,"level":155},"/v1.0.2/guides/testing#basic-output-testing",[1675,3239],{"id":15783,"title":3248,"titles":15784,"content":3250,"level":155},"/v1.0.2/guides/testing#test-instance-setup",[1675,3239],{"id":15786,"title":3253,"titles":15787,"content":99,"level":136},"/v1.0.2/guides/testing#table-driven-tests",[1675],{"id":15789,"title":3257,"titles":15790,"content":6469,"level":155},"/v1.0.2/guides/testing#testing-multiple-queries",[1675,3253],{"id":15792,"title":3262,"titles":15793,"content":99,"level":136},"/v1.0.2/guides/testing#testing-validation",[1675],{"id":15795,"title":3266,"titles":15796,"content":3268,"level":155},"/v1.0.2/guides/testing#testing-invalid-input",[1675,3262],{"id":15798,"title":3271,"titles":15799,"content":3273,"level":155},"/v1.0.2/guides/testing#testing-try-variants",[1675,3262],{"id":15801,"title":3276,"titles":15802,"content":99,"level":136},"/v1.0.2/guides/testing#testing-error-cases",[1675],{"id":15804,"title":3280,"titles":15805,"content":6485,"level":155},"/v1.0.2/guides/testing#builder-errors",[1675,3276],{"id":15807,"title":3285,"titles":15808,"content":99,"level":136},"/v1.0.2/guides/testing#testing-complex-queries",[1675],{"id":15810,"title":3289,"titles":15811,"content":6492,"level":155},"/v1.0.2/guides/testing#join-tests",[1675,3285],{"id":15813,"title":3294,"titles":15814,"content":6496,"level":155},"/v1.0.2/guides/testing#subquery-tests",[1675,3285],{"id":15816,"title":3299,"titles":15817,"content":3301,"level":136},"/v1.0.2/guides/testing#snapshot-testing",[1675],{"id":15819,"title":3304,"titles":15820,"content":99,"level":136},"/v1.0.2/guides/testing#best-practices",[1675],{"id":15822,"title":3308,"titles":15823,"content":3310,"level":155},"/v1.0.2/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":15825,"title":3313,"titles":15826,"content":3315,"level":155},"/v1.0.2/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":15828,"title":3318,"titles":15829,"content":3320,"level":155},"/v1.0.2/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":15831,"title":3323,"titles":15832,"content":6515,"level":155},"/v1.0.2/guides/testing#_4-test-edge-cases",[1675,3304],{"id":15834,"title":1688,"titles":15835,"content":3329,"level":107},"/v1.0.2/cookbook/pagination",[],{"id":15837,"title":1688,"titles":15838,"content":3333,"level":107},"/v1.0.2/cookbook/pagination#pagination",[],{"id":15840,"title":3336,"titles":15841,"content":6525,"level":136},"/v1.0.2/cookbook/pagination#offset-pagination",[1688],{"id":15843,"title":3341,"titles":15844,"content":3343,"level":155},"/v1.0.2/cookbook/pagination#usage",[1688,3336],{"id":15846,"title":3346,"titles":15847,"content":6532,"level":155},"/v1.0.2/cookbook/pagination#with-total-count",[1688,3336],{"id":15849,"title":3351,"titles":15850,"content":3353,"level":155},"/v1.0.2/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":15852,"title":3356,"titles":15853,"content":6539,"level":136},"/v1.0.2/cookbook/pagination#cursor-pagination",[1688],{"id":15855,"title":3341,"titles":15856,"content":3362,"level":155},"/v1.0.2/cookbook/pagination#usage-1",[1688,3356],{"id":15858,"title":3365,"titles":15859,"content":6546,"level":155},"/v1.0.2/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":15861,"title":3370,"titles":15862,"content":6550,"level":155},"/v1.0.2/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":15864,"title":3375,"titles":15865,"content":6554,"level":136},"/v1.0.2/cookbook/pagination#filtering-with-pagination",[1688],{"id":15867,"title":3380,"titles":15868,"content":6558,"level":136},"/v1.0.2/cookbook/pagination#pagination-with-joins",[1688],{"id":15870,"title":3304,"titles":15871,"content":99,"level":136},"/v1.0.2/cookbook/pagination#best-practices",[1688],{"id":15873,"title":3388,"titles":15874,"content":6565,"level":155},"/v1.0.2/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":15876,"title":3393,"titles":15877,"content":3395,"level":155},"/v1.0.2/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":15879,"title":3398,"titles":15880,"content":3400,"level":155},"/v1.0.2/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":15882,"title":3403,"titles":15883,"content":3405,"level":155},"/v1.0.2/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":15885,"title":1695,"titles":15886,"content":3409,"level":107},"/v1.0.2/cookbook/vector-search",[],{"id":15888,"title":1695,"titles":15889,"content":3413,"level":107},"/v1.0.2/cookbook/vector-search#vector-search",[],{"id":15891,"title":3416,"titles":15892,"content":3418,"level":136},"/v1.0.2/cookbook/vector-search#schema-setup",[1695],{"id":15894,"title":3421,"titles":15895,"content":3423,"level":136},"/v1.0.2/cookbook/vector-search#distance-operators",[1695],{"id":15897,"title":3426,"titles":15898,"content":3428,"level":136},"/v1.0.2/cookbook/vector-search#basic-similarity-search",[1695],{"id":15900,"title":3431,"titles":15901,"content":3433,"level":155},"/v1.0.2/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":15903,"title":3436,"titles":15904,"content":3438,"level":136},"/v1.0.2/cookbook/vector-search#cosine-similarity",[1695],{"id":15906,"title":3441,"titles":15907,"content":3443,"level":136},"/v1.0.2/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":15909,"title":3446,"titles":15910,"content":3448,"level":136},"/v1.0.2/cookbook/vector-search#filtered-vector-search",[1695],{"id":15912,"title":3451,"titles":15913,"content":3453,"level":136},"/v1.0.2/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":15915,"title":3456,"titles":15916,"content":3458,"level":136},"/v1.0.2/cookbook/vector-search#hybrid-search",[1695],{"id":15918,"title":3461,"titles":15919,"content":3463,"level":136},"/v1.0.2/cookbook/vector-search#multi-vector-search",[1695],{"id":15921,"title":3466,"titles":15922,"content":3468,"level":136},"/v1.0.2/cookbook/vector-search#indexing-recommendations",[1695],{"id":15924,"title":3304,"titles":15925,"content":99,"level":136},"/v1.0.2/cookbook/vector-search#best-practices",[1695],{"id":15927,"title":3474,"titles":15928,"content":3476,"level":155},"/v1.0.2/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":15930,"title":3479,"titles":15931,"content":3481,"level":155},"/v1.0.2/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":15933,"title":3484,"titles":15934,"content":3486,"level":155},"/v1.0.2/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":15936,"title":1702,"titles":15937,"content":3490,"level":107},"/v1.0.2/cookbook/upserts",[],{"id":15939,"title":1702,"titles":15940,"content":3494,"level":107},"/v1.0.2/cookbook/upserts#upserts",[],{"id":15942,"title":3497,"titles":15943,"content":6635,"level":136},"/v1.0.2/cookbook/upserts#basic-upsert",[1702],{"id":15945,"title":3502,"titles":15946,"content":6639,"level":136},"/v1.0.2/cookbook/upserts#do-nothing",[1702],{"id":15948,"title":3507,"titles":15949,"content":6643,"level":136},"/v1.0.2/cookbook/upserts#multi-column-conflict",[1702],{"id":15951,"title":3512,"titles":15952,"content":6647,"level":136},"/v1.0.2/cookbook/upserts#returning-with-upsert",[1702],{"id":15954,"title":3517,"titles":15955,"content":6651,"level":136},"/v1.0.2/cookbook/upserts#batch-upsert",[1702],{"id":15957,"title":3522,"titles":15958,"content":6655,"level":136},"/v1.0.2/cookbook/upserts#conditional-upsert",[1702],{"id":15960,"title":3527,"titles":15961,"content":6659,"level":136},"/v1.0.2/cookbook/upserts#sync-pattern",[1702],{"id":15963,"title":3532,"titles":15964,"content":6663,"level":136},"/v1.0.2/cookbook/upserts#upsert-with-timestamps",[1702],{"id":15966,"title":3304,"titles":15967,"content":99,"level":136},"/v1.0.2/cookbook/upserts#best-practices",[1702],{"id":15969,"title":3540,"titles":15970,"content":3542,"level":155},"/v1.0.2/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":15972,"title":3545,"titles":15973,"content":3547,"level":155},"/v1.0.2/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":15975,"title":3550,"titles":15976,"content":3552,"level":155},"/v1.0.2/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":15978,"title":3555,"titles":15979,"content":3557,"level":155},"/v1.0.2/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":15981,"title":1709,"titles":15982,"content":6682,"level":107},"/v1.0.2/cookbook/orm-foundation",[],{"id":15984,"title":1709,"titles":15985,"content":6686,"level":107},"/v1.0.2/cookbook/orm-foundation#orm-foundation",[],{"id":15987,"title":6689,"titles":15988,"content":6691,"level":136},"/v1.0.2/cookbook/orm-foundation#the-result",[1709],{"id":15990,"title":6694,"titles":15991,"content":6696,"level":136},"/v1.0.2/cookbook/orm-foundation#the-architecture",[1709],{"id":15993,"title":6699,"titles":15994,"content":6701,"level":136},"/v1.0.2/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":15996,"title":6704,"titles":15997,"content":6706,"level":155},"/v1.0.2/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":15999,"title":6709,"titles":16000,"content":6711,"level":155},"/v1.0.2/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":16002,"title":6714,"titles":16003,"content":6716,"level":155},"/v1.0.2/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":16005,"title":6719,"titles":16006,"content":6721,"level":155},"/v1.0.2/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":16008,"title":6724,"titles":16009,"content":6726,"level":136},"/v1.0.2/cookbook/orm-foundation#the-security-model",[1709],{"id":16011,"title":6729,"titles":16012,"content":6731,"level":136},"/v1.0.2/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":16014,"title":6734,"titles":16015,"content":6736,"level":136},"/v1.0.2/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":16017,"title":6739,"titles":16018,"content":6741,"level":155},"/v1.0.2/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":16020,"title":6744,"titles":16021,"content":6746,"level":155},"/v1.0.2/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":16023,"title":6749,"titles":16024,"content":6751,"level":155},"/v1.0.2/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":16026,"title":6754,"titles":16027,"content":6756,"level":155},"/v1.0.2/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":16029,"title":6759,"titles":16030,"content":6761,"level":136},"/v1.0.2/cookbook/orm-foundation#see-also",[1709],{"id":16032,"title":3560,"titles":16033,"content":3562,"level":107},"/v1.0.2/reference/api",[],{"id":16035,"title":3560,"titles":16036,"content":3566,"level":107},"/v1.0.2/reference/api#api-reference",[],{"id":16038,"title":3569,"titles":16039,"content":99,"level":136},"/v1.0.2/reference/api#instance-creation",[3560],{"id":16041,"title":856,"titles":16042,"content":3574,"level":155},"/v1.0.2/reference/api#newfromdbml",[3560,3569],{"id":16044,"title":3577,"titles":16045,"content":99,"level":136},"/v1.0.2/reference/api#instance-methods",[3560],{"id":16047,"title":119,"titles":16048,"content":3582,"level":155},"/v1.0.2/reference/api#t",[3560,3577],{"id":16050,"title":3585,"titles":16051,"content":3587,"level":155},"/v1.0.2/reference/api#tryt",[3560,3577],{"id":16053,"title":169,"titles":16054,"content":3591,"level":155},"/v1.0.2/reference/api#f",[3560,3577],{"id":16056,"title":3594,"titles":16057,"content":3596,"level":155},"/v1.0.2/reference/api#tryf",[3560,3577],{"id":16059,"title":316,"titles":16060,"content":3600,"level":155},"/v1.0.2/reference/api#p",[3560,3577],{"id":16062,"title":3603,"titles":16063,"content":3605,"level":155},"/v1.0.2/reference/api#tryp",[3560,3577],{"id":16065,"title":284,"titles":16066,"content":3609,"level":155},"/v1.0.2/reference/api#c",[3560,3577],{"id":16068,"title":3612,"titles":16069,"content":3614,"level":155},"/v1.0.2/reference/api#tryc",[3560,3577],{"id":16071,"title":3617,"titles":16072,"content":3619,"level":155},"/v1.0.2/reference/api#and",[3560,3577],{"id":16074,"title":3622,"titles":16075,"content":3624,"level":155},"/v1.0.2/reference/api#or",[3560,3577],{"id":16077,"title":3627,"titles":16078,"content":3629,"level":155},"/v1.0.2/reference/api#null",[3560,3577],{"id":16080,"title":3632,"titles":16081,"content":3634,"level":155},"/v1.0.2/reference/api#notnull",[3560,3577],{"id":16083,"title":3637,"titles":16084,"content":3639,"level":155},"/v1.0.2/reference/api#withtable",[3560,3577],{"id":16086,"title":3642,"titles":16087,"content":3644,"level":155},"/v1.0.2/reference/api#trywithtable",[3560,3577],{"id":16089,"title":3647,"titles":16090,"content":3649,"level":155},"/v1.0.2/reference/api#aggc",[3560,3577],{"id":16092,"title":3652,"titles":16093,"content":3654,"level":155},"/v1.0.2/reference/api#tryaggc",[3560,3577],{"id":16095,"title":3657,"titles":16096,"content":3659,"level":155},"/v1.0.2/reference/api#valuemap",[3560,3577],{"id":16098,"title":3662,"titles":16099,"content":99,"level":136},"/v1.0.2/reference/api#query-builders",[3560],{"id":16101,"title":219,"titles":16102,"content":3667,"level":155},"/v1.0.2/reference/api#select",[3560,3662],{"id":16104,"title":3670,"titles":16105,"content":3672,"level":155},"/v1.0.2/reference/api#insert",[3560,3662],{"id":16107,"title":3675,"titles":16108,"content":3677,"level":155},"/v1.0.2/reference/api#update",[3560,3662],{"id":16110,"title":3680,"titles":16111,"content":3682,"level":155},"/v1.0.2/reference/api#delete",[3560,3662],{"id":16113,"title":3685,"titles":16114,"content":3687,"level":155},"/v1.0.2/reference/api#count",[3560,3662],{"id":16116,"title":3690,"titles":16117,"content":99,"level":136},"/v1.0.2/reference/api#builder-methods",[3560],{"id":16119,"title":2665,"titles":16120,"content":3695,"level":155},"/v1.0.2/reference/api#fields",[3560,3690],{"id":16122,"title":3698,"titles":16123,"content":3700,"level":155},"/v1.0.2/reference/api#where",[3560,3690],{"id":16125,"title":3703,"titles":16126,"content":3705,"level":155},"/v1.0.2/reference/api#wherefield",[3560,3690],{"id":16128,"title":3708,"titles":16129,"content":3710,"level":155},"/v1.0.2/reference/api#orderby",[3560,3690],{"id":16131,"title":3713,"titles":16132,"content":3715,"level":155},"/v1.0.2/reference/api#orderbynulls",[3560,3690],{"id":16134,"title":3718,"titles":16135,"content":3720,"level":155},"/v1.0.2/reference/api#orderbyexpr",[3560,3690],{"id":16137,"title":3723,"titles":16138,"content":5734,"level":155},"/v1.0.2/reference/api#limit",[3560,3690],{"id":16140,"title":5737,"titles":16141,"content":5739,"level":155},"/v1.0.2/reference/api#limitparam",[3560,3690],{"id":16143,"title":3728,"titles":16144,"content":5743,"level":155},"/v1.0.2/reference/api#offset",[3560,3690],{"id":16146,"title":5746,"titles":16147,"content":5748,"level":155},"/v1.0.2/reference/api#offsetparam",[3560,3690],{"id":16149,"title":3733,"titles":16150,"content":3735,"level":155},"/v1.0.2/reference/api#set",[3560,3690],{"id":16152,"title":3738,"titles":16153,"content":3740,"level":155},"/v1.0.2/reference/api#values",[3560,3690],{"id":16155,"title":3743,"titles":16156,"content":3745,"level":155},"/v1.0.2/reference/api#returning",[3560,3690],{"id":16158,"title":3748,"titles":16159,"content":3750,"level":155},"/v1.0.2/reference/api#distinct",[3560,3690],{"id":16161,"title":3753,"titles":16162,"content":3755,"level":155},"/v1.0.2/reference/api#distincton",[3560,3690],{"id":16164,"title":3758,"titles":16165,"content":3760,"level":155},"/v1.0.2/reference/api#groupby",[3560,3690],{"id":16167,"title":3763,"titles":16168,"content":3765,"level":155},"/v1.0.2/reference/api#having",[3560,3690],{"id":16170,"title":3768,"titles":16171,"content":3770,"level":155},"/v1.0.2/reference/api#havingagg",[3560,3690],{"id":16173,"title":3773,"titles":16174,"content":3775,"level":155},"/v1.0.2/reference/api#selectexpr",[3560,3690],{"id":16176,"title":3778,"titles":16177,"content":3780,"level":155},"/v1.0.2/reference/api#onconflict",[3560,3690],{"id":16179,"title":3783,"titles":16180,"content":3785,"level":155},"/v1.0.2/reference/api#join-methods",[3560,3690],{"id":16182,"title":3788,"titles":16183,"content":3790,"level":155},"/v1.0.2/reference/api#row-locking",[3560,3690],{"id":16185,"title":3793,"titles":16186,"content":3795,"level":155},"/v1.0.2/reference/api#build",[3560,3690],{"id":16188,"title":3798,"titles":16189,"content":3800,"level":155},"/v1.0.2/reference/api#mustbuild",[3560,3690],{"id":16191,"title":350,"titles":16192,"content":6924,"level":155},"/v1.0.2/reference/api#render",[3560,3690],{"id":16194,"title":3807,"titles":16195,"content":6928,"level":155},"/v1.0.2/reference/api#mustrender",[3560,3690],{"id":16197,"title":3812,"titles":16198,"content":99,"level":136},"/v1.0.2/reference/api#set-operations",[3560],{"id":16200,"title":3816,"titles":16201,"content":3818,"level":155},"/v1.0.2/reference/api#union-unionall",[3560,3812],{"id":16203,"title":3821,"titles":16204,"content":3823,"level":155},"/v1.0.2/reference/api#intersect-intersectall",[3560,3812],{"id":16206,"title":3826,"titles":16207,"content":3828,"level":155},"/v1.0.2/reference/api#except-exceptall",[3560,3812],{"id":16209,"title":3831,"titles":16210,"content":6944,"level":136},"/v1.0.2/reference/api#rendering",[3560],{"id":16212,"title":3844,"titles":16213,"content":99,"level":136},"/v1.0.2/reference/api#expression-functions",[3560],{"id":16215,"title":1668,"titles":16216,"content":3849,"level":155},"/v1.0.2/reference/api#aggregates",[3560,3844],{"id":16218,"title":3852,"titles":16219,"content":3854,"level":155},"/v1.0.2/reference/api#filter-aggregates",[3560,3844],{"id":16221,"title":1251,"titles":16222,"content":3858,"level":155},"/v1.0.2/reference/api#conditions",[3560,3844],{"id":16224,"title":3006,"titles":16225,"content":3862,"level":155},"/v1.0.2/reference/api#subqueries",[3560,3844],{"id":16227,"title":3865,"titles":16228,"content":3867,"level":155},"/v1.0.2/reference/api#case-expression",[3560,3844],{"id":16230,"title":3870,"titles":16231,"content":3872,"level":155},"/v1.0.2/reference/api#null-handling",[3560,3844],{"id":16233,"title":3203,"titles":16234,"content":3876,"level":155},"/v1.0.2/reference/api#math-functions",[3560,3844],{"id":16236,"title":5855,"titles":16237,"content":5857,"level":155},"/v1.0.2/reference/api#string-functions",[3560,3844],{"id":16239,"title":5860,"titles":16240,"content":5862,"level":155},"/v1.0.2/reference/api#date-functions",[3560,3844],{"id":16242,"title":3221,"titles":16243,"content":3880,"level":155},"/v1.0.2/reference/api#type-casting",[3560,3844],{"id":16245,"title":3173,"titles":16246,"content":3884,"level":155},"/v1.0.2/reference/api#window-functions",[3560,3844],{"id":16248,"title":3193,"titles":16249,"content":3888,"level":155},"/v1.0.2/reference/api#window-specification",[3560,3844],{"id":16251,"title":3891,"titles":16252,"content":3893,"level":155},"/v1.0.2/reference/api#windowbuilder-methods",[3560,3844],{"id":16254,"title":3896,"titles":16255,"content":3898,"level":155},"/v1.0.2/reference/api#expression-alias",[3560,3844],{"id":16257,"title":3163,"titles":16258,"content":3902,"level":155},"/v1.0.2/reference/api#having-helpers",[3560,3844],{"id":16260,"title":3905,"titles":16261,"content":99,"level":136},"/v1.0.2/reference/api#types",[3560],{"id":16263,"title":3909,"titles":16264,"content":3911,"level":155},"/v1.0.2/reference/api#queryresult",[3560,3905],{"id":16266,"title":3914,"titles":16267,"content":3916,"level":155},"/v1.0.2/reference/api#direction",[3560,3905],{"id":16269,"title":3919,"titles":16270,"content":3921,"level":155},"/v1.0.2/reference/api#nullsordering",[3560,3905],{"id":16272,"title":3924,"titles":16273,"content":5896,"level":155},"/v1.0.2/reference/api#operation",[3560,3905],{"id":16275,"title":5899,"titles":16276,"content":99,"level":136},"/v1.0.2/reference/api#providers",[3560],{"id":16278,"title":5903,"titles":16279,"content":13180,"level":155},"/v1.0.2/reference/api#renderer-interface",[3560,5899],{"id":16281,"title":1187,"titles":16282,"content":14214,"level":155},"/v1.0.2/reference/api#capabilities",[3560,5899],{"id":16284,"title":5908,"titles":16285,"content":15253,"level":155},"/v1.0.2/reference/api#postgresql-provider",[3560,5899],{"id":16287,"title":5913,"titles":16288,"content":15257,"level":155},"/v1.0.2/reference/api#sqlite-provider",[3560,5899],{"id":16290,"title":12159,"titles":16291,"content":15261,"level":155},"/v1.0.2/reference/api#mariadb-provider",[3560,5899],{"id":16293,"title":5923,"titles":16294,"content":15265,"level":155},"/v1.0.2/reference/api#sql-server-provider",[3560,5899],{"id":16296,"title":3929,"titles":16297,"content":3931,"level":107},"/v1.0.2/reference/operators",[],{"id":16299,"title":3929,"titles":16300,"content":3935,"level":107},"/v1.0.2/reference/operators#operators-reference",[],{"id":16302,"title":2959,"titles":16303,"content":3939,"level":136},"/v1.0.2/reference/operators#comparison-operators",[3929],{"id":16305,"title":3341,"titles":16306,"content":3943,"level":155},"/v1.0.2/reference/operators#usage",[3929,2959],{"id":16308,"title":2964,"titles":16309,"content":3947,"level":136},"/v1.0.2/reference/operators#pattern-matching",[3929],{"id":16311,"title":3341,"titles":16312,"content":3951,"level":155},"/v1.0.2/reference/operators#usage-1",[3929,2964],{"id":16314,"title":3954,"titles":16315,"content":3956,"level":136},"/v1.0.2/reference/operators#null-operators",[3929],{"id":16317,"title":3341,"titles":16318,"content":3960,"level":155},"/v1.0.2/reference/operators#usage-2",[3929,3954],{"id":16320,"title":2974,"titles":16321,"content":3964,"level":136},"/v1.0.2/reference/operators#array-operators",[3929],{"id":16323,"title":3341,"titles":16324,"content":3968,"level":155},"/v1.0.2/reference/operators#usage-3",[3929,2974],{"id":16326,"title":3971,"titles":16327,"content":3973,"level":155},"/v1.0.2/reference/operators#with-sqlx",[3929,2974],{"id":16329,"title":3976,"titles":16330,"content":3978,"level":136},"/v1.0.2/reference/operators#subquery-operators",[3929],{"id":16332,"title":3341,"titles":16333,"content":3982,"level":155},"/v1.0.2/reference/operators#usage-4",[3929,3976],{"id":16335,"title":3985,"titles":16336,"content":3987,"level":136},"/v1.0.2/reference/operators#regex-operators",[3929],{"id":16338,"title":3341,"titles":16339,"content":3991,"level":155},"/v1.0.2/reference/operators#usage-5",[3929,3985],{"id":16341,"title":3994,"titles":16342,"content":3996,"level":136},"/v1.0.2/reference/operators#postgresql-array-operators",[3929],{"id":16344,"title":3341,"titles":16345,"content":4000,"level":155},"/v1.0.2/reference/operators#usage-6",[3929,3994],{"id":16347,"title":4003,"titles":16348,"content":4005,"level":136},"/v1.0.2/reference/operators#vector-operators-pgvector",[3929],{"id":16350,"title":3341,"titles":16351,"content":4009,"level":155},"/v1.0.2/reference/operators#usage-7",[3929,4003],{"id":16353,"title":4012,"titles":16354,"content":4014,"level":155},"/v1.0.2/reference/operators#with-pgvector",[3929,4003],{"id":16356,"title":4017,"titles":16357,"content":4019,"level":136},"/v1.0.2/reference/operators#operator-selection-guide",[3929],{"id":16359,"title":3124,"titles":16360,"content":4023,"level":136},"/v1.0.2/reference/operators#aggregate-functions",[3929],{"id":16362,"title":3173,"titles":16363,"content":4027,"level":136},"/v1.0.2/reference/operators#window-functions",[3929],{"id":16365,"title":3198,"titles":16366,"content":4031,"level":136},"/v1.0.2/reference/operators#frame-bounds",[3929],{"id":16368,"title":4034,"titles":16369,"content":4036,"level":136},"/v1.0.2/reference/operators#cast-types",[3929],{"id":16371,"title":1614,"titles":16372,"content":2581,"level":107},"/v1.0.3/overview",[],{"id":16374,"title":1614,"titles":16375,"content":14309,"level":107},"/v1.0.3/overview#overview",[],{"id":16377,"title":1237,"titles":16378,"content":2589,"level":136},"/v1.0.3/overview#architecture",[1614],{"id":16380,"title":2592,"titles":16381,"content":2594,"level":136},"/v1.0.3/overview#philosophy",[1614],{"id":16383,"title":1187,"titles":16384,"content":2598,"level":136},"/v1.0.3/overview#capabilities",[1614],{"id":16386,"title":2601,"titles":16387,"content":99,"level":136},"/v1.0.3/overview#priorities",[1614],{"id":16389,"title":1782,"titles":16390,"content":2606,"level":155},"/v1.0.3/overview#security",[1614,2601],{"id":16392,"title":2609,"titles":16393,"content":6026,"level":155},"/v1.0.3/overview#ergonomics",[1614,2601],{"id":16395,"title":5002,"titles":16396,"content":14331,"level":155},"/v1.0.3/overview#multi-provider-architecture",[1614,2601],{"id":16398,"title":1628,"titles":16399,"content":2620,"level":107},"/v1.0.3/learn/quickstart",[],{"id":16401,"title":1628,"titles":16402,"content":99,"level":107},"/v1.0.3/learn/quickstart#quickstart",[],{"id":16404,"title":2626,"titles":16405,"content":6040,"level":136},"/v1.0.3/learn/quickstart#requirements",[1628],{"id":16407,"title":2631,"titles":16408,"content":2633,"level":136},"/v1.0.3/learn/quickstart#installation",[1628],{"id":16410,"title":2636,"titles":16411,"content":14347,"level":136},"/v1.0.3/learn/quickstart#basic-usage",[1628],{"id":16413,"title":2641,"titles":16414,"content":6051,"level":136},"/v1.0.3/learn/quickstart#whats-happening",[1628],{"id":16416,"title":2646,"titles":16417,"content":6055,"level":136},"/v1.0.3/learn/quickstart#using-with-sqlx",[1628],{"id":16419,"title":2651,"titles":16420,"content":2653,"level":107},"/v1.0.3/learn/concepts",[],{"id":16422,"title":2651,"titles":16423,"content":2657,"level":107},"/v1.0.3/learn/concepts#core-concepts",[],{"id":16425,"title":2660,"titles":16426,"content":2662,"level":136},"/v1.0.3/learn/concepts#tables",[2651],{"id":16428,"title":2665,"titles":16429,"content":2667,"level":136},"/v1.0.3/learn/concepts#fields",[2651],{"id":16431,"title":2670,"titles":16432,"content":2672,"level":155},"/v1.0.3/learn/concepts#field-validation",[2651,2665],{"id":16434,"title":2675,"titles":16435,"content":2677,"level":136},"/v1.0.3/learn/concepts#params",[2651],{"id":16437,"title":2680,"titles":16438,"content":2682,"level":155},"/v1.0.3/learn/concepts#parameter-validation",[2651,2675],{"id":16440,"title":1251,"titles":16441,"content":2686,"level":136},"/v1.0.3/learn/concepts#conditions",[2651],{"id":16443,"title":1727,"titles":16444,"content":2690,"level":155},"/v1.0.3/learn/concepts#operators",[2651,1251],{"id":16446,"title":2693,"titles":16447,"content":2695,"level":155},"/v1.0.3/learn/concepts#combining-conditions",[2651,1251],{"id":16449,"title":2698,"titles":16450,"content":2700,"level":155},"/v1.0.3/learn/concepts#nested-conditions",[2651,1251],{"id":16452,"title":2703,"titles":16453,"content":2705,"level":155},"/v1.0.3/learn/concepts#null-conditions",[2651,1251],{"id":16455,"title":2708,"titles":16456,"content":2710,"level":155},"/v1.0.3/learn/concepts#field-comparisons",[2651,1251],{"id":16458,"title":2713,"titles":16459,"content":2715,"level":136},"/v1.0.3/learn/concepts#builders",[2651],{"id":16461,"title":2718,"titles":16462,"content":6101,"level":155},"/v1.0.3/learn/concepts#fluent-api",[2651,2713],{"id":16464,"title":2723,"titles":16465,"content":6105,"level":155},"/v1.0.3/learn/concepts#build-vs-render",[2651,2713],{"id":16467,"title":2728,"titles":16468,"content":6109,"level":155},"/v1.0.3/learn/concepts#must-variants",[2651,2713],{"id":16470,"title":2733,"titles":16471,"content":2735,"level":136},"/v1.0.3/learn/concepts#try-variants",[2651],{"id":16473,"title":2738,"titles":16474,"content":2740,"level":136},"/v1.0.3/learn/concepts#query-result",[2651],{"id":16476,"title":1237,"titles":16477,"content":2744,"level":107},"/v1.0.3/learn/architecture",[],{"id":16479,"title":1237,"titles":16480,"content":2748,"level":107},"/v1.0.3/learn/architecture#architecture",[],{"id":16482,"title":2751,"titles":16483,"content":2753,"level":136},"/v1.0.3/learn/architecture#pipeline-overview",[1237],{"id":16485,"title":2756,"titles":16486,"content":99,"level":136},"/v1.0.3/learn/architecture#validation-layer",[1237],{"id":16488,"title":1215,"titles":16489,"content":2761,"level":155},"/v1.0.3/learn/architecture#schema-validation",[1237,2756],{"id":16491,"title":2764,"titles":16492,"content":2766,"level":155},"/v1.0.3/learn/architecture#identifier-validation",[1237,2756],{"id":16494,"title":2769,"titles":16495,"content":2771,"level":155},"/v1.0.3/learn/architecture#alias-restrictions",[1237,2756],{"id":16497,"title":2774,"titles":16498,"content":5107,"level":136},"/v1.0.3/learn/architecture#ast-structure",[1237],{"id":16500,"title":2779,"titles":16501,"content":2781,"level":155},"/v1.0.3/learn/architecture#internal-types",[1237,2774],{"id":16503,"title":2784,"titles":16504,"content":2786,"level":155},"/v1.0.3/learn/architecture#condition-types",[1237,2774],{"id":16506,"title":2789,"titles":16507,"content":2791,"level":136},"/v1.0.3/learn/architecture#render-engine",[1237],{"id":16509,"title":2794,"titles":16510,"content":2796,"level":155},"/v1.0.3/learn/architecture#identifier-quoting",[1237,2789],{"id":16512,"title":2799,"titles":16513,"content":2801,"level":155},"/v1.0.3/learn/architecture#parameter-placeholders",[1237,2789],{"id":16515,"title":2804,"titles":16516,"content":2806,"level":155},"/v1.0.3/learn/architecture#parameter-namespacing",[1237,2789],{"id":16518,"title":5128,"titles":16519,"content":12390,"level":136},"/v1.0.3/learn/architecture#provider-architecture",[1237],{"id":16521,"title":5133,"titles":16522,"content":14459,"level":155},"/v1.0.3/learn/architecture#available-providers",[1237,5128],{"id":16524,"title":3341,"titles":16525,"content":14463,"level":155},"/v1.0.3/learn/architecture#usage",[1237,5128],{"id":16527,"title":5142,"titles":16528,"content":11369,"level":155},"/v1.0.3/learn/architecture#dialect-differences",[1237,5128],{"id":16530,"title":2809,"titles":16531,"content":11373,"level":136},"/v1.0.3/learn/architecture#file-structure",[1237],{"id":16533,"title":2814,"titles":16534,"content":2816,"level":136},"/v1.0.3/learn/architecture#security-layers",[1237],{"id":16536,"title":2819,"titles":16537,"content":99,"level":136},"/v1.0.3/learn/architecture#extension-points",[1237],{"id":16539,"title":2823,"titles":16540,"content":2825,"level":155},"/v1.0.3/learn/architecture#custom-expressions",[1237,2819],{"id":16542,"title":2828,"titles":16543,"content":2830,"level":155},"/v1.0.3/learn/architecture#compound-queries",[1237,2819],{"id":16545,"title":2833,"titles":16546,"content":6191,"level":155},"/v1.0.3/learn/architecture#direct-ast-access",[1237,2819],{"id":16548,"title":1215,"titles":16549,"content":2839,"level":107},"/v1.0.3/guides/schema-validation",[],{"id":16551,"title":1215,"titles":16552,"content":2843,"level":107},"/v1.0.3/guides/schema-validation#schema-validation",[],{"id":16554,"title":2846,"titles":16555,"content":2848,"level":136},"/v1.0.3/guides/schema-validation#defining-a-schema",[1215],{"id":16557,"title":2851,"titles":16558,"content":2853,"level":136},"/v1.0.3/guides/schema-validation#creating-an-instance",[1215],{"id":16560,"title":2856,"titles":16561,"content":99,"level":136},"/v1.0.3/guides/schema-validation#validation-behavior",[1215],{"id":16563,"title":2860,"titles":16564,"content":2862,"level":155},"/v1.0.3/guides/schema-validation#table-validation",[1215,2856],{"id":16566,"title":2670,"titles":16567,"content":2866,"level":155},"/v1.0.3/guides/schema-validation#field-validation",[1215,2856],{"id":16569,"title":2680,"titles":16570,"content":2870,"level":155},"/v1.0.3/guides/schema-validation#parameter-validation",[1215,2856],{"id":16572,"title":2873,"titles":16573,"content":2875,"level":136},"/v1.0.3/guides/schema-validation#panic-vs-error",[1215],{"id":16575,"title":2733,"titles":16576,"content":2879,"level":155},"/v1.0.3/guides/schema-validation#try-variants",[1215,2873],{"id":16578,"title":2882,"titles":16579,"content":2884,"level":155},"/v1.0.3/guides/schema-validation#when-to-use-each",[1215,2873],{"id":16581,"title":2887,"titles":16582,"content":2889,"level":136},"/v1.0.3/guides/schema-validation#table-aliases",[1215],{"id":16584,"title":2769,"titles":16585,"content":2893,"level":155},"/v1.0.3/guides/schema-validation#alias-restrictions",[1215,2887],{"id":16587,"title":2896,"titles":16588,"content":2898,"level":155},"/v1.0.3/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":16590,"title":2901,"titles":16591,"content":99,"level":136},"/v1.0.3/guides/schema-validation#schema-organization",[1215],{"id":16593,"title":2905,"titles":16594,"content":6240,"level":155},"/v1.0.3/guides/schema-validation#single-schema-instance",[1215,2901],{"id":16596,"title":2910,"titles":16597,"content":2912,"level":155},"/v1.0.3/guides/schema-validation#multiple-schemas",[1215,2901],{"id":16599,"title":2915,"titles":16600,"content":99,"level":136},"/v1.0.3/guides/schema-validation#dynamic-queries",[1215],{"id":16602,"title":2919,"titles":16603,"content":6250,"level":155},"/v1.0.3/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":16605,"title":2924,"titles":16606,"content":2926,"level":155},"/v1.0.3/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":16608,"title":2929,"titles":16609,"content":99,"level":136},"/v1.0.3/guides/schema-validation#validation-errors",[1215],{"id":16611,"title":2933,"titles":16612,"content":2935,"level":155},"/v1.0.3/guides/schema-validation#error-types",[1215,2929],{"id":16614,"title":2938,"titles":16615,"content":6263,"level":155},"/v1.0.3/guides/schema-validation#handling-errors",[1215,2929],{"id":16617,"title":1251,"titles":16618,"content":2944,"level":107},"/v1.0.3/guides/conditions",[],{"id":16620,"title":1251,"titles":16621,"content":2948,"level":107},"/v1.0.3/guides/conditions#conditions",[],{"id":16623,"title":2951,"titles":16624,"content":2953,"level":136},"/v1.0.3/guides/conditions#basic-conditions",[1251],{"id":16626,"title":1727,"titles":16627,"content":99,"level":136},"/v1.0.3/guides/conditions#operators",[1251],{"id":16629,"title":2959,"titles":16630,"content":2961,"level":155},"/v1.0.3/guides/conditions#comparison-operators",[1251,1727],{"id":16632,"title":2964,"titles":16633,"content":2966,"level":155},"/v1.0.3/guides/conditions#pattern-matching",[1251,1727],{"id":16635,"title":2969,"titles":16636,"content":2971,"level":155},"/v1.0.3/guides/conditions#null-checks",[1251,1727],{"id":16638,"title":2974,"titles":16639,"content":2976,"level":155},"/v1.0.3/guides/conditions#array-operators",[1251,1727],{"id":16641,"title":2693,"titles":16642,"content":99,"level":136},"/v1.0.3/guides/conditions#combining-conditions",[1251],{"id":16644,"title":2982,"titles":16645,"content":2984,"level":155},"/v1.0.3/guides/conditions#and",[1251,2693],{"id":16647,"title":2987,"titles":16648,"content":2989,"level":155},"/v1.0.3/guides/conditions#or",[1251,2693],{"id":16650,"title":2992,"titles":16651,"content":2994,"level":155},"/v1.0.3/guides/conditions#nested-logic",[1251,2693],{"id":16653,"title":2997,"titles":16654,"content":2999,"level":136},"/v1.0.3/guides/conditions#between",[1251],{"id":16656,"title":2708,"titles":16657,"content":3003,"level":136},"/v1.0.3/guides/conditions#field-comparisons",[1251],{"id":16659,"title":3006,"titles":16660,"content":99,"level":136},"/v1.0.3/guides/conditions#subqueries",[1251],{"id":16662,"title":3010,"titles":16663,"content":3012,"level":155},"/v1.0.3/guides/conditions#in-subquery",[1251,3006],{"id":16665,"title":3015,"titles":16666,"content":3017,"level":155},"/v1.0.3/guides/conditions#not-in-subquery",[1251,3006],{"id":16668,"title":3020,"titles":16669,"content":3022,"level":155},"/v1.0.3/guides/conditions#exists",[1251,3006],{"id":16671,"title":3025,"titles":16672,"content":3027,"level":155},"/v1.0.3/guides/conditions#not-exists",[1251,3006],{"id":16674,"title":2804,"titles":16675,"content":3031,"level":155},"/v1.0.3/guides/conditions#parameter-namespacing",[1251,3006],{"id":16677,"title":3034,"titles":16678,"content":3036,"level":136},"/v1.0.3/guides/conditions#multiple-where-clauses",[1251],{"id":16680,"title":3039,"titles":16681,"content":3041,"level":136},"/v1.0.3/guides/conditions#wherefield-shorthand",[1251],{"id":16683,"title":3044,"titles":16684,"content":3046,"level":136},"/v1.0.3/guides/conditions#building-conditions-dynamically",[1251],{"id":16686,"title":1265,"titles":16687,"content":3050,"level":107},"/v1.0.3/guides/joins",[],{"id":16689,"title":1265,"titles":16690,"content":3054,"level":107},"/v1.0.3/guides/joins#joins",[],{"id":16692,"title":3057,"titles":16693,"content":3059,"level":136},"/v1.0.3/guides/joins#join-types",[1265],{"id":16695,"title":3062,"titles":16696,"content":3064,"level":136},"/v1.0.3/guides/joins#basic-join",[1265],{"id":16698,"title":2887,"titles":16699,"content":3068,"level":136},"/v1.0.3/guides/joins#table-aliases",[1265],{"id":16701,"title":3071,"titles":16702,"content":3073,"level":136},"/v1.0.3/guides/joins#left-join",[1265],{"id":16704,"title":3076,"titles":16705,"content":3078,"level":136},"/v1.0.3/guides/joins#right-join",[1265],{"id":16707,"title":3081,"titles":16708,"content":3083,"level":136},"/v1.0.3/guides/joins#full-outer-join",[1265],{"id":16710,"title":3086,"titles":16711,"content":3088,"level":136},"/v1.0.3/guides/joins#cross-join",[1265],{"id":16713,"title":3091,"titles":16714,"content":3093,"level":136},"/v1.0.3/guides/joins#multiple-joins",[1265],{"id":16716,"title":3096,"titles":16717,"content":3098,"level":136},"/v1.0.3/guides/joins#complex-on-conditions",[1265],{"id":16719,"title":3101,"titles":16720,"content":3103,"level":136},"/v1.0.3/guides/joins#self-joins",[1265],{"id":16722,"title":3106,"titles":16723,"content":3108,"level":136},"/v1.0.3/guides/joins#joins-with-count",[1265],{"id":16725,"title":3111,"titles":16726,"content":3113,"level":136},"/v1.0.3/guides/joins#join-validation",[1265],{"id":16728,"title":1668,"titles":16729,"content":3117,"level":107},"/v1.0.3/guides/aggregates",[],{"id":16731,"title":1668,"titles":16732,"content":3121,"level":107},"/v1.0.3/guides/aggregates#aggregates",[],{"id":16734,"title":3124,"titles":16735,"content":99,"level":136},"/v1.0.3/guides/aggregates#aggregate-functions",[1668],{"id":16737,"title":3128,"titles":16738,"content":3130,"level":155},"/v1.0.3/guides/aggregates#basic-aggregates",[1668,3124],{"id":16740,"title":3133,"titles":16741,"content":3135,"level":155},"/v1.0.3/guides/aggregates#using-aggregates",[1668,3124],{"id":16743,"title":3138,"titles":16744,"content":3140,"level":155},"/v1.0.3/guides/aggregates#aliases",[1668,3124],{"id":16746,"title":3143,"titles":16747,"content":3145,"level":136},"/v1.0.3/guides/aggregates#group-by",[1668],{"id":16749,"title":3148,"titles":16750,"content":3150,"level":136},"/v1.0.3/guides/aggregates#having",[1668],{"id":16752,"title":3153,"titles":16753,"content":3155,"level":155},"/v1.0.3/guides/aggregates#simple-having",[1668,3148],{"id":16755,"title":3158,"titles":16756,"content":3160,"level":155},"/v1.0.3/guides/aggregates#aggregate-having",[1668,3148],{"id":16758,"title":3163,"titles":16759,"content":3165,"level":155},"/v1.0.3/guides/aggregates#having-helpers",[1668,3148],{"id":16761,"title":3168,"titles":16762,"content":3170,"level":136},"/v1.0.3/guides/aggregates#filter-clause",[1668],{"id":16764,"title":3173,"titles":16765,"content":3175,"level":136},"/v1.0.3/guides/aggregates#window-functions",[1668],{"id":16767,"title":3178,"titles":16768,"content":3180,"level":155},"/v1.0.3/guides/aggregates#basic-window-functions",[1668,3173],{"id":16770,"title":3183,"titles":16771,"content":3185,"level":155},"/v1.0.3/guides/aggregates#window-function-types",[1668,3173],{"id":16773,"title":3188,"titles":16774,"content":3190,"level":155},"/v1.0.3/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":16776,"title":3193,"titles":16777,"content":3195,"level":155},"/v1.0.3/guides/aggregates#window-specification",[1668,3173],{"id":16779,"title":3198,"titles":16780,"content":3200,"level":155},"/v1.0.3/guides/aggregates#frame-bounds",[1668,3173],{"id":16782,"title":3203,"titles":16783,"content":99,"level":136},"/v1.0.3/guides/aggregates#math-functions",[1668],{"id":16785,"title":3207,"titles":16786,"content":3209,"level":155},"/v1.0.3/guides/aggregates#available-functions",[1668,3203],{"id":16788,"title":3212,"titles":16789,"content":3214,"level":155},"/v1.0.3/guides/aggregates#example",[1668,3203],{"id":16791,"title":1270,"titles":16792,"content":3218,"level":136},"/v1.0.3/guides/aggregates#case-expressions",[1668],{"id":16794,"title":3221,"titles":16795,"content":3223,"level":136},"/v1.0.3/guides/aggregates#type-casting",[1668],{"id":16797,"title":3226,"titles":16798,"content":3228,"level":136},"/v1.0.3/guides/aggregates#coalesce-and-nullif",[1668],{"id":16800,"title":1675,"titles":16801,"content":3232,"level":107},"/v1.0.3/guides/testing",[],{"id":16803,"title":1675,"titles":16804,"content":3236,"level":107},"/v1.0.3/guides/testing#testing",[],{"id":16806,"title":3239,"titles":16807,"content":99,"level":136},"/v1.0.3/guides/testing#testing-query-output",[1675],{"id":16809,"title":3243,"titles":16810,"content":6459,"level":155},"/v1.0.3/guides/testing#basic-output-testing",[1675,3239],{"id":16812,"title":3248,"titles":16813,"content":3250,"level":155},"/v1.0.3/guides/testing#test-instance-setup",[1675,3239],{"id":16815,"title":3253,"titles":16816,"content":99,"level":136},"/v1.0.3/guides/testing#table-driven-tests",[1675],{"id":16818,"title":3257,"titles":16819,"content":6469,"level":155},"/v1.0.3/guides/testing#testing-multiple-queries",[1675,3253],{"id":16821,"title":3262,"titles":16822,"content":99,"level":136},"/v1.0.3/guides/testing#testing-validation",[1675],{"id":16824,"title":3266,"titles":16825,"content":3268,"level":155},"/v1.0.3/guides/testing#testing-invalid-input",[1675,3262],{"id":16827,"title":3271,"titles":16828,"content":3273,"level":155},"/v1.0.3/guides/testing#testing-try-variants",[1675,3262],{"id":16830,"title":3276,"titles":16831,"content":99,"level":136},"/v1.0.3/guides/testing#testing-error-cases",[1675],{"id":16833,"title":3280,"titles":16834,"content":6485,"level":155},"/v1.0.3/guides/testing#builder-errors",[1675,3276],{"id":16836,"title":3285,"titles":16837,"content":99,"level":136},"/v1.0.3/guides/testing#testing-complex-queries",[1675],{"id":16839,"title":3289,"titles":16840,"content":6492,"level":155},"/v1.0.3/guides/testing#join-tests",[1675,3285],{"id":16842,"title":3294,"titles":16843,"content":6496,"level":155},"/v1.0.3/guides/testing#subquery-tests",[1675,3285],{"id":16845,"title":3299,"titles":16846,"content":3301,"level":136},"/v1.0.3/guides/testing#snapshot-testing",[1675],{"id":16848,"title":3304,"titles":16849,"content":99,"level":136},"/v1.0.3/guides/testing#best-practices",[1675],{"id":16851,"title":3308,"titles":16852,"content":3310,"level":155},"/v1.0.3/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":16854,"title":3313,"titles":16855,"content":3315,"level":155},"/v1.0.3/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":16857,"title":3318,"titles":16858,"content":3320,"level":155},"/v1.0.3/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":16860,"title":3323,"titles":16861,"content":6515,"level":155},"/v1.0.3/guides/testing#_4-test-edge-cases",[1675,3304],{"id":16863,"title":1688,"titles":16864,"content":3329,"level":107},"/v1.0.3/cookbook/pagination",[],{"id":16866,"title":1688,"titles":16867,"content":3333,"level":107},"/v1.0.3/cookbook/pagination#pagination",[],{"id":16869,"title":3336,"titles":16870,"content":6525,"level":136},"/v1.0.3/cookbook/pagination#offset-pagination",[1688],{"id":16872,"title":3341,"titles":16873,"content":3343,"level":155},"/v1.0.3/cookbook/pagination#usage",[1688,3336],{"id":16875,"title":3346,"titles":16876,"content":6532,"level":155},"/v1.0.3/cookbook/pagination#with-total-count",[1688,3336],{"id":16878,"title":3351,"titles":16879,"content":3353,"level":155},"/v1.0.3/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":16881,"title":3356,"titles":16882,"content":6539,"level":136},"/v1.0.3/cookbook/pagination#cursor-pagination",[1688],{"id":16884,"title":3341,"titles":16885,"content":3362,"level":155},"/v1.0.3/cookbook/pagination#usage-1",[1688,3356],{"id":16887,"title":3365,"titles":16888,"content":6546,"level":155},"/v1.0.3/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":16890,"title":3370,"titles":16891,"content":6550,"level":155},"/v1.0.3/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":16893,"title":3375,"titles":16894,"content":6554,"level":136},"/v1.0.3/cookbook/pagination#filtering-with-pagination",[1688],{"id":16896,"title":3380,"titles":16897,"content":6558,"level":136},"/v1.0.3/cookbook/pagination#pagination-with-joins",[1688],{"id":16899,"title":3304,"titles":16900,"content":99,"level":136},"/v1.0.3/cookbook/pagination#best-practices",[1688],{"id":16902,"title":3388,"titles":16903,"content":6565,"level":155},"/v1.0.3/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":16905,"title":3393,"titles":16906,"content":3395,"level":155},"/v1.0.3/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":16908,"title":3398,"titles":16909,"content":3400,"level":155},"/v1.0.3/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":16911,"title":3403,"titles":16912,"content":3405,"level":155},"/v1.0.3/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":16914,"title":1695,"titles":16915,"content":3409,"level":107},"/v1.0.3/cookbook/vector-search",[],{"id":16917,"title":1695,"titles":16918,"content":3413,"level":107},"/v1.0.3/cookbook/vector-search#vector-search",[],{"id":16920,"title":3416,"titles":16921,"content":3418,"level":136},"/v1.0.3/cookbook/vector-search#schema-setup",[1695],{"id":16923,"title":3421,"titles":16924,"content":3423,"level":136},"/v1.0.3/cookbook/vector-search#distance-operators",[1695],{"id":16926,"title":3426,"titles":16927,"content":3428,"level":136},"/v1.0.3/cookbook/vector-search#basic-similarity-search",[1695],{"id":16929,"title":3431,"titles":16930,"content":3433,"level":155},"/v1.0.3/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":16932,"title":3436,"titles":16933,"content":3438,"level":136},"/v1.0.3/cookbook/vector-search#cosine-similarity",[1695],{"id":16935,"title":3441,"titles":16936,"content":3443,"level":136},"/v1.0.3/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":16938,"title":3446,"titles":16939,"content":3448,"level":136},"/v1.0.3/cookbook/vector-search#filtered-vector-search",[1695],{"id":16941,"title":3451,"titles":16942,"content":3453,"level":136},"/v1.0.3/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":16944,"title":3456,"titles":16945,"content":3458,"level":136},"/v1.0.3/cookbook/vector-search#hybrid-search",[1695],{"id":16947,"title":3461,"titles":16948,"content":3463,"level":136},"/v1.0.3/cookbook/vector-search#multi-vector-search",[1695],{"id":16950,"title":3466,"titles":16951,"content":3468,"level":136},"/v1.0.3/cookbook/vector-search#indexing-recommendations",[1695],{"id":16953,"title":3304,"titles":16954,"content":99,"level":136},"/v1.0.3/cookbook/vector-search#best-practices",[1695],{"id":16956,"title":3474,"titles":16957,"content":3476,"level":155},"/v1.0.3/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":16959,"title":3479,"titles":16960,"content":3481,"level":155},"/v1.0.3/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":16962,"title":3484,"titles":16963,"content":3486,"level":155},"/v1.0.3/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":16965,"title":1702,"titles":16966,"content":3490,"level":107},"/v1.0.3/cookbook/upserts",[],{"id":16968,"title":1702,"titles":16969,"content":3494,"level":107},"/v1.0.3/cookbook/upserts#upserts",[],{"id":16971,"title":3497,"titles":16972,"content":6635,"level":136},"/v1.0.3/cookbook/upserts#basic-upsert",[1702],{"id":16974,"title":3502,"titles":16975,"content":6639,"level":136},"/v1.0.3/cookbook/upserts#do-nothing",[1702],{"id":16977,"title":3507,"titles":16978,"content":6643,"level":136},"/v1.0.3/cookbook/upserts#multi-column-conflict",[1702],{"id":16980,"title":3512,"titles":16981,"content":6647,"level":136},"/v1.0.3/cookbook/upserts#returning-with-upsert",[1702],{"id":16983,"title":3517,"titles":16984,"content":6651,"level":136},"/v1.0.3/cookbook/upserts#batch-upsert",[1702],{"id":16986,"title":3522,"titles":16987,"content":6655,"level":136},"/v1.0.3/cookbook/upserts#conditional-upsert",[1702],{"id":16989,"title":3527,"titles":16990,"content":6659,"level":136},"/v1.0.3/cookbook/upserts#sync-pattern",[1702],{"id":16992,"title":3532,"titles":16993,"content":6663,"level":136},"/v1.0.3/cookbook/upserts#upsert-with-timestamps",[1702],{"id":16995,"title":3304,"titles":16996,"content":99,"level":136},"/v1.0.3/cookbook/upserts#best-practices",[1702],{"id":16998,"title":3540,"titles":16999,"content":3542,"level":155},"/v1.0.3/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":17001,"title":3545,"titles":17002,"content":3547,"level":155},"/v1.0.3/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":17004,"title":3550,"titles":17005,"content":3552,"level":155},"/v1.0.3/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":17007,"title":3555,"titles":17008,"content":3557,"level":155},"/v1.0.3/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":17010,"title":1709,"titles":17011,"content":6682,"level":107},"/v1.0.3/cookbook/orm-foundation",[],{"id":17013,"title":1709,"titles":17014,"content":6686,"level":107},"/v1.0.3/cookbook/orm-foundation#orm-foundation",[],{"id":17016,"title":6689,"titles":17017,"content":6691,"level":136},"/v1.0.3/cookbook/orm-foundation#the-result",[1709],{"id":17019,"title":6694,"titles":17020,"content":6696,"level":136},"/v1.0.3/cookbook/orm-foundation#the-architecture",[1709],{"id":17022,"title":6699,"titles":17023,"content":6701,"level":136},"/v1.0.3/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":17025,"title":6704,"titles":17026,"content":6706,"level":155},"/v1.0.3/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":17028,"title":6709,"titles":17029,"content":6711,"level":155},"/v1.0.3/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":17031,"title":6714,"titles":17032,"content":6716,"level":155},"/v1.0.3/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":17034,"title":6719,"titles":17035,"content":6721,"level":155},"/v1.0.3/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":17037,"title":6724,"titles":17038,"content":6726,"level":136},"/v1.0.3/cookbook/orm-foundation#the-security-model",[1709],{"id":17040,"title":6729,"titles":17041,"content":6731,"level":136},"/v1.0.3/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":17043,"title":6734,"titles":17044,"content":6736,"level":136},"/v1.0.3/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":17046,"title":6739,"titles":17047,"content":6741,"level":155},"/v1.0.3/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":17049,"title":6744,"titles":17050,"content":6746,"level":155},"/v1.0.3/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":17052,"title":6749,"titles":17053,"content":6751,"level":155},"/v1.0.3/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":17055,"title":6754,"titles":17056,"content":6756,"level":155},"/v1.0.3/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":17058,"title":6759,"titles":17059,"content":6761,"level":136},"/v1.0.3/cookbook/orm-foundation#see-also",[1709],{"id":17061,"title":3560,"titles":17062,"content":3562,"level":107},"/v1.0.3/reference/api",[],{"id":17064,"title":3560,"titles":17065,"content":3566,"level":107},"/v1.0.3/reference/api#api-reference",[],{"id":17067,"title":3569,"titles":17068,"content":99,"level":136},"/v1.0.3/reference/api#instance-creation",[3560],{"id":17070,"title":856,"titles":17071,"content":3574,"level":155},"/v1.0.3/reference/api#newfromdbml",[3560,3569],{"id":17073,"title":3577,"titles":17074,"content":99,"level":136},"/v1.0.3/reference/api#instance-methods",[3560],{"id":17076,"title":119,"titles":17077,"content":3582,"level":155},"/v1.0.3/reference/api#t",[3560,3577],{"id":17079,"title":3585,"titles":17080,"content":3587,"level":155},"/v1.0.3/reference/api#tryt",[3560,3577],{"id":17082,"title":169,"titles":17083,"content":3591,"level":155},"/v1.0.3/reference/api#f",[3560,3577],{"id":17085,"title":3594,"titles":17086,"content":3596,"level":155},"/v1.0.3/reference/api#tryf",[3560,3577],{"id":17088,"title":316,"titles":17089,"content":3600,"level":155},"/v1.0.3/reference/api#p",[3560,3577],{"id":17091,"title":3603,"titles":17092,"content":3605,"level":155},"/v1.0.3/reference/api#tryp",[3560,3577],{"id":17094,"title":284,"titles":17095,"content":3609,"level":155},"/v1.0.3/reference/api#c",[3560,3577],{"id":17097,"title":3612,"titles":17098,"content":3614,"level":155},"/v1.0.3/reference/api#tryc",[3560,3577],{"id":17100,"title":3617,"titles":17101,"content":3619,"level":155},"/v1.0.3/reference/api#and",[3560,3577],{"id":17103,"title":3622,"titles":17104,"content":3624,"level":155},"/v1.0.3/reference/api#or",[3560,3577],{"id":17106,"title":3627,"titles":17107,"content":3629,"level":155},"/v1.0.3/reference/api#null",[3560,3577],{"id":17109,"title":3632,"titles":17110,"content":3634,"level":155},"/v1.0.3/reference/api#notnull",[3560,3577],{"id":17112,"title":3637,"titles":17113,"content":3639,"level":155},"/v1.0.3/reference/api#withtable",[3560,3577],{"id":17115,"title":3642,"titles":17116,"content":3644,"level":155},"/v1.0.3/reference/api#trywithtable",[3560,3577],{"id":17118,"title":3647,"titles":17119,"content":3649,"level":155},"/v1.0.3/reference/api#aggc",[3560,3577],{"id":17121,"title":3652,"titles":17122,"content":3654,"level":155},"/v1.0.3/reference/api#tryaggc",[3560,3577],{"id":17124,"title":3657,"titles":17125,"content":3659,"level":155},"/v1.0.3/reference/api#valuemap",[3560,3577],{"id":17127,"title":3662,"titles":17128,"content":99,"level":136},"/v1.0.3/reference/api#query-builders",[3560],{"id":17130,"title":219,"titles":17131,"content":3667,"level":155},"/v1.0.3/reference/api#select",[3560,3662],{"id":17133,"title":3670,"titles":17134,"content":3672,"level":155},"/v1.0.3/reference/api#insert",[3560,3662],{"id":17136,"title":3675,"titles":17137,"content":3677,"level":155},"/v1.0.3/reference/api#update",[3560,3662],{"id":17139,"title":3680,"titles":17140,"content":3682,"level":155},"/v1.0.3/reference/api#delete",[3560,3662],{"id":17142,"title":3685,"titles":17143,"content":3687,"level":155},"/v1.0.3/reference/api#count",[3560,3662],{"id":17145,"title":3690,"titles":17146,"content":99,"level":136},"/v1.0.3/reference/api#builder-methods",[3560],{"id":17148,"title":2665,"titles":17149,"content":3695,"level":155},"/v1.0.3/reference/api#fields",[3560,3690],{"id":17151,"title":3698,"titles":17152,"content":3700,"level":155},"/v1.0.3/reference/api#where",[3560,3690],{"id":17154,"title":3703,"titles":17155,"content":3705,"level":155},"/v1.0.3/reference/api#wherefield",[3560,3690],{"id":17157,"title":3708,"titles":17158,"content":3710,"level":155},"/v1.0.3/reference/api#orderby",[3560,3690],{"id":17160,"title":3713,"titles":17161,"content":3715,"level":155},"/v1.0.3/reference/api#orderbynulls",[3560,3690],{"id":17163,"title":3718,"titles":17164,"content":3720,"level":155},"/v1.0.3/reference/api#orderbyexpr",[3560,3690],{"id":17166,"title":3723,"titles":17167,"content":5734,"level":155},"/v1.0.3/reference/api#limit",[3560,3690],{"id":17169,"title":5737,"titles":17170,"content":5739,"level":155},"/v1.0.3/reference/api#limitparam",[3560,3690],{"id":17172,"title":3728,"titles":17173,"content":5743,"level":155},"/v1.0.3/reference/api#offset",[3560,3690],{"id":17175,"title":5746,"titles":17176,"content":5748,"level":155},"/v1.0.3/reference/api#offsetparam",[3560,3690],{"id":17178,"title":3733,"titles":17179,"content":3735,"level":155},"/v1.0.3/reference/api#set",[3560,3690],{"id":17181,"title":3738,"titles":17182,"content":3740,"level":155},"/v1.0.3/reference/api#values",[3560,3690],{"id":17184,"title":3743,"titles":17185,"content":3745,"level":155},"/v1.0.3/reference/api#returning",[3560,3690],{"id":17187,"title":3748,"titles":17188,"content":3750,"level":155},"/v1.0.3/reference/api#distinct",[3560,3690],{"id":17190,"title":3753,"titles":17191,"content":3755,"level":155},"/v1.0.3/reference/api#distincton",[3560,3690],{"id":17193,"title":3758,"titles":17194,"content":3760,"level":155},"/v1.0.3/reference/api#groupby",[3560,3690],{"id":17196,"title":3763,"titles":17197,"content":3765,"level":155},"/v1.0.3/reference/api#having",[3560,3690],{"id":17199,"title":3768,"titles":17200,"content":3770,"level":155},"/v1.0.3/reference/api#havingagg",[3560,3690],{"id":17202,"title":3773,"titles":17203,"content":3775,"level":155},"/v1.0.3/reference/api#selectexpr",[3560,3690],{"id":17205,"title":3778,"titles":17206,"content":3780,"level":155},"/v1.0.3/reference/api#onconflict",[3560,3690],{"id":17208,"title":3783,"titles":17209,"content":3785,"level":155},"/v1.0.3/reference/api#join-methods",[3560,3690],{"id":17211,"title":3788,"titles":17212,"content":3790,"level":155},"/v1.0.3/reference/api#row-locking",[3560,3690],{"id":17214,"title":3793,"titles":17215,"content":3795,"level":155},"/v1.0.3/reference/api#build",[3560,3690],{"id":17217,"title":3798,"titles":17218,"content":3800,"level":155},"/v1.0.3/reference/api#mustbuild",[3560,3690],{"id":17220,"title":350,"titles":17221,"content":6924,"level":155},"/v1.0.3/reference/api#render",[3560,3690],{"id":17223,"title":3807,"titles":17224,"content":6928,"level":155},"/v1.0.3/reference/api#mustrender",[3560,3690],{"id":17226,"title":3812,"titles":17227,"content":99,"level":136},"/v1.0.3/reference/api#set-operations",[3560],{"id":17229,"title":3816,"titles":17230,"content":3818,"level":155},"/v1.0.3/reference/api#union-unionall",[3560,3812],{"id":17232,"title":3821,"titles":17233,"content":3823,"level":155},"/v1.0.3/reference/api#intersect-intersectall",[3560,3812],{"id":17235,"title":3826,"titles":17236,"content":3828,"level":155},"/v1.0.3/reference/api#except-exceptall",[3560,3812],{"id":17238,"title":3831,"titles":17239,"content":6944,"level":136},"/v1.0.3/reference/api#rendering",[3560],{"id":17241,"title":3844,"titles":17242,"content":99,"level":136},"/v1.0.3/reference/api#expression-functions",[3560],{"id":17244,"title":1668,"titles":17245,"content":3849,"level":155},"/v1.0.3/reference/api#aggregates",[3560,3844],{"id":17247,"title":3852,"titles":17248,"content":3854,"level":155},"/v1.0.3/reference/api#filter-aggregates",[3560,3844],{"id":17250,"title":1251,"titles":17251,"content":3858,"level":155},"/v1.0.3/reference/api#conditions",[3560,3844],{"id":17253,"title":3006,"titles":17254,"content":3862,"level":155},"/v1.0.3/reference/api#subqueries",[3560,3844],{"id":17256,"title":3865,"titles":17257,"content":3867,"level":155},"/v1.0.3/reference/api#case-expression",[3560,3844],{"id":17259,"title":3870,"titles":17260,"content":3872,"level":155},"/v1.0.3/reference/api#null-handling",[3560,3844],{"id":17262,"title":3203,"titles":17263,"content":3876,"level":155},"/v1.0.3/reference/api#math-functions",[3560,3844],{"id":17265,"title":5855,"titles":17266,"content":5857,"level":155},"/v1.0.3/reference/api#string-functions",[3560,3844],{"id":17268,"title":5860,"titles":17269,"content":5862,"level":155},"/v1.0.3/reference/api#date-functions",[3560,3844],{"id":17271,"title":3221,"titles":17272,"content":3880,"level":155},"/v1.0.3/reference/api#type-casting",[3560,3844],{"id":17274,"title":3173,"titles":17275,"content":3884,"level":155},"/v1.0.3/reference/api#window-functions",[3560,3844],{"id":17277,"title":3193,"titles":17278,"content":3888,"level":155},"/v1.0.3/reference/api#window-specification",[3560,3844],{"id":17280,"title":3891,"titles":17281,"content":3893,"level":155},"/v1.0.3/reference/api#windowbuilder-methods",[3560,3844],{"id":17283,"title":3896,"titles":17284,"content":3898,"level":155},"/v1.0.3/reference/api#expression-alias",[3560,3844],{"id":17286,"title":3163,"titles":17287,"content":3902,"level":155},"/v1.0.3/reference/api#having-helpers",[3560,3844],{"id":17289,"title":3905,"titles":17290,"content":99,"level":136},"/v1.0.3/reference/api#types",[3560],{"id":17292,"title":3909,"titles":17293,"content":3911,"level":155},"/v1.0.3/reference/api#queryresult",[3560,3905],{"id":17295,"title":3914,"titles":17296,"content":3916,"level":155},"/v1.0.3/reference/api#direction",[3560,3905],{"id":17298,"title":3919,"titles":17299,"content":3921,"level":155},"/v1.0.3/reference/api#nullsordering",[3560,3905],{"id":17301,"title":3924,"titles":17302,"content":5896,"level":155},"/v1.0.3/reference/api#operation",[3560,3905],{"id":17304,"title":5899,"titles":17305,"content":99,"level":136},"/v1.0.3/reference/api#providers",[3560],{"id":17307,"title":5903,"titles":17308,"content":13180,"level":155},"/v1.0.3/reference/api#renderer-interface",[3560,5899],{"id":17310,"title":1187,"titles":17311,"content":14214,"level":155},"/v1.0.3/reference/api#capabilities",[3560,5899],{"id":17313,"title":5908,"titles":17314,"content":15253,"level":155},"/v1.0.3/reference/api#postgresql-provider",[3560,5899],{"id":17316,"title":5913,"titles":17317,"content":15257,"level":155},"/v1.0.3/reference/api#sqlite-provider",[3560,5899],{"id":17319,"title":12159,"titles":17320,"content":15261,"level":155},"/v1.0.3/reference/api#mariadb-provider",[3560,5899],{"id":17322,"title":5923,"titles":17323,"content":15265,"level":155},"/v1.0.3/reference/api#sql-server-provider",[3560,5899],{"id":17325,"title":3929,"titles":17326,"content":3931,"level":107},"/v1.0.3/reference/operators",[],{"id":17328,"title":3929,"titles":17329,"content":3935,"level":107},"/v1.0.3/reference/operators#operators-reference",[],{"id":17331,"title":2959,"titles":17332,"content":3939,"level":136},"/v1.0.3/reference/operators#comparison-operators",[3929],{"id":17334,"title":3341,"titles":17335,"content":3943,"level":155},"/v1.0.3/reference/operators#usage",[3929,2959],{"id":17337,"title":2964,"titles":17338,"content":3947,"level":136},"/v1.0.3/reference/operators#pattern-matching",[3929],{"id":17340,"title":3341,"titles":17341,"content":3951,"level":155},"/v1.0.3/reference/operators#usage-1",[3929,2964],{"id":17343,"title":3954,"titles":17344,"content":3956,"level":136},"/v1.0.3/reference/operators#null-operators",[3929],{"id":17346,"title":3341,"titles":17347,"content":3960,"level":155},"/v1.0.3/reference/operators#usage-2",[3929,3954],{"id":17349,"title":2974,"titles":17350,"content":3964,"level":136},"/v1.0.3/reference/operators#array-operators",[3929],{"id":17352,"title":3341,"titles":17353,"content":3968,"level":155},"/v1.0.3/reference/operators#usage-3",[3929,2974],{"id":17355,"title":3971,"titles":17356,"content":3973,"level":155},"/v1.0.3/reference/operators#with-sqlx",[3929,2974],{"id":17358,"title":3976,"titles":17359,"content":3978,"level":136},"/v1.0.3/reference/operators#subquery-operators",[3929],{"id":17361,"title":3341,"titles":17362,"content":3982,"level":155},"/v1.0.3/reference/operators#usage-4",[3929,3976],{"id":17364,"title":3985,"titles":17365,"content":3987,"level":136},"/v1.0.3/reference/operators#regex-operators",[3929],{"id":17367,"title":3341,"titles":17368,"content":3991,"level":155},"/v1.0.3/reference/operators#usage-5",[3929,3985],{"id":17370,"title":3994,"titles":17371,"content":3996,"level":136},"/v1.0.3/reference/operators#postgresql-array-operators",[3929],{"id":17373,"title":3341,"titles":17374,"content":4000,"level":155},"/v1.0.3/reference/operators#usage-6",[3929,3994],{"id":17376,"title":4003,"titles":17377,"content":4005,"level":136},"/v1.0.3/reference/operators#vector-operators-pgvector",[3929],{"id":17379,"title":3341,"titles":17380,"content":4009,"level":155},"/v1.0.3/reference/operators#usage-7",[3929,4003],{"id":17382,"title":4012,"titles":17383,"content":4014,"level":155},"/v1.0.3/reference/operators#with-pgvector",[3929,4003],{"id":17385,"title":4017,"titles":17386,"content":4019,"level":136},"/v1.0.3/reference/operators#operator-selection-guide",[3929],{"id":17388,"title":3124,"titles":17389,"content":4023,"level":136},"/v1.0.3/reference/operators#aggregate-functions",[3929],{"id":17391,"title":3173,"titles":17392,"content":4027,"level":136},"/v1.0.3/reference/operators#window-functions",[3929],{"id":17394,"title":3198,"titles":17395,"content":4031,"level":136},"/v1.0.3/reference/operators#frame-bounds",[3929],{"id":17397,"title":4034,"titles":17398,"content":4036,"level":136},"/v1.0.3/reference/operators#cast-types",[3929],{"id":17400,"title":1614,"titles":17401,"content":2581,"level":107},"/v1.0.4/overview",[],{"id":17403,"title":1614,"titles":17404,"content":14309,"level":107},"/v1.0.4/overview#overview",[],{"id":17406,"title":1237,"titles":17407,"content":2589,"level":136},"/v1.0.4/overview#architecture",[1614],{"id":17409,"title":2592,"titles":17410,"content":2594,"level":136},"/v1.0.4/overview#philosophy",[1614],{"id":17412,"title":1187,"titles":17413,"content":2598,"level":136},"/v1.0.4/overview#capabilities",[1614],{"id":17415,"title":2601,"titles":17416,"content":99,"level":136},"/v1.0.4/overview#priorities",[1614],{"id":17418,"title":1782,"titles":17419,"content":2606,"level":155},"/v1.0.4/overview#security",[1614,2601],{"id":17421,"title":2609,"titles":17422,"content":6026,"level":155},"/v1.0.4/overview#ergonomics",[1614,2601],{"id":17424,"title":5002,"titles":17425,"content":14331,"level":155},"/v1.0.4/overview#multi-provider-architecture",[1614,2601],{"id":17427,"title":1628,"titles":17428,"content":2620,"level":107},"/v1.0.4/learn/quickstart",[],{"id":17430,"title":1628,"titles":17431,"content":99,"level":107},"/v1.0.4/learn/quickstart#quickstart",[],{"id":17433,"title":2626,"titles":17434,"content":6040,"level":136},"/v1.0.4/learn/quickstart#requirements",[1628],{"id":17436,"title":2631,"titles":17437,"content":2633,"level":136},"/v1.0.4/learn/quickstart#installation",[1628],{"id":17439,"title":2636,"titles":17440,"content":14347,"level":136},"/v1.0.4/learn/quickstart#basic-usage",[1628],{"id":17442,"title":2641,"titles":17443,"content":6051,"level":136},"/v1.0.4/learn/quickstart#whats-happening",[1628],{"id":17445,"title":2646,"titles":17446,"content":6055,"level":136},"/v1.0.4/learn/quickstart#using-with-sqlx",[1628],{"id":17448,"title":2651,"titles":17449,"content":2653,"level":107},"/v1.0.4/learn/concepts",[],{"id":17451,"title":2651,"titles":17452,"content":2657,"level":107},"/v1.0.4/learn/concepts#core-concepts",[],{"id":17454,"title":2660,"titles":17455,"content":2662,"level":136},"/v1.0.4/learn/concepts#tables",[2651],{"id":17457,"title":2665,"titles":17458,"content":2667,"level":136},"/v1.0.4/learn/concepts#fields",[2651],{"id":17460,"title":2670,"titles":17461,"content":2672,"level":155},"/v1.0.4/learn/concepts#field-validation",[2651,2665],{"id":17463,"title":2675,"titles":17464,"content":2677,"level":136},"/v1.0.4/learn/concepts#params",[2651],{"id":17466,"title":2680,"titles":17467,"content":2682,"level":155},"/v1.0.4/learn/concepts#parameter-validation",[2651,2675],{"id":17469,"title":1251,"titles":17470,"content":2686,"level":136},"/v1.0.4/learn/concepts#conditions",[2651],{"id":17472,"title":1727,"titles":17473,"content":2690,"level":155},"/v1.0.4/learn/concepts#operators",[2651,1251],{"id":17475,"title":2693,"titles":17476,"content":2695,"level":155},"/v1.0.4/learn/concepts#combining-conditions",[2651,1251],{"id":17478,"title":2698,"titles":17479,"content":2700,"level":155},"/v1.0.4/learn/concepts#nested-conditions",[2651,1251],{"id":17481,"title":2703,"titles":17482,"content":2705,"level":155},"/v1.0.4/learn/concepts#null-conditions",[2651,1251],{"id":17484,"title":2708,"titles":17485,"content":2710,"level":155},"/v1.0.4/learn/concepts#field-comparisons",[2651,1251],{"id":17487,"title":2713,"titles":17488,"content":2715,"level":136},"/v1.0.4/learn/concepts#builders",[2651],{"id":17490,"title":2718,"titles":17491,"content":6101,"level":155},"/v1.0.4/learn/concepts#fluent-api",[2651,2713],{"id":17493,"title":2723,"titles":17494,"content":6105,"level":155},"/v1.0.4/learn/concepts#build-vs-render",[2651,2713],{"id":17496,"title":2728,"titles":17497,"content":6109,"level":155},"/v1.0.4/learn/concepts#must-variants",[2651,2713],{"id":17499,"title":2733,"titles":17500,"content":2735,"level":136},"/v1.0.4/learn/concepts#try-variants",[2651],{"id":17502,"title":2738,"titles":17503,"content":2740,"level":136},"/v1.0.4/learn/concepts#query-result",[2651],{"id":17505,"title":1237,"titles":17506,"content":2744,"level":107},"/v1.0.4/learn/architecture",[],{"id":17508,"title":1237,"titles":17509,"content":2748,"level":107},"/v1.0.4/learn/architecture#architecture",[],{"id":17511,"title":2751,"titles":17512,"content":2753,"level":136},"/v1.0.4/learn/architecture#pipeline-overview",[1237],{"id":17514,"title":2756,"titles":17515,"content":99,"level":136},"/v1.0.4/learn/architecture#validation-layer",[1237],{"id":17517,"title":1215,"titles":17518,"content":2761,"level":155},"/v1.0.4/learn/architecture#schema-validation",[1237,2756],{"id":17520,"title":2764,"titles":17521,"content":2766,"level":155},"/v1.0.4/learn/architecture#identifier-validation",[1237,2756],{"id":17523,"title":2769,"titles":17524,"content":2771,"level":155},"/v1.0.4/learn/architecture#alias-restrictions",[1237,2756],{"id":17526,"title":2774,"titles":17527,"content":5107,"level":136},"/v1.0.4/learn/architecture#ast-structure",[1237],{"id":17529,"title":2779,"titles":17530,"content":2781,"level":155},"/v1.0.4/learn/architecture#internal-types",[1237,2774],{"id":17532,"title":2784,"titles":17533,"content":2786,"level":155},"/v1.0.4/learn/architecture#condition-types",[1237,2774],{"id":17535,"title":2789,"titles":17536,"content":2791,"level":136},"/v1.0.4/learn/architecture#render-engine",[1237],{"id":17538,"title":2794,"titles":17539,"content":2796,"level":155},"/v1.0.4/learn/architecture#identifier-quoting",[1237,2789],{"id":17541,"title":2799,"titles":17542,"content":2801,"level":155},"/v1.0.4/learn/architecture#parameter-placeholders",[1237,2789],{"id":17544,"title":2804,"titles":17545,"content":2806,"level":155},"/v1.0.4/learn/architecture#parameter-namespacing",[1237,2789],{"id":17547,"title":5128,"titles":17548,"content":12390,"level":136},"/v1.0.4/learn/architecture#provider-architecture",[1237],{"id":17550,"title":5133,"titles":17551,"content":14459,"level":155},"/v1.0.4/learn/architecture#available-providers",[1237,5128],{"id":17553,"title":3341,"titles":17554,"content":14463,"level":155},"/v1.0.4/learn/architecture#usage",[1237,5128],{"id":17556,"title":5142,"titles":17557,"content":11369,"level":155},"/v1.0.4/learn/architecture#dialect-differences",[1237,5128],{"id":17559,"title":2809,"titles":17560,"content":11373,"level":136},"/v1.0.4/learn/architecture#file-structure",[1237],{"id":17562,"title":2814,"titles":17563,"content":2816,"level":136},"/v1.0.4/learn/architecture#security-layers",[1237],{"id":17565,"title":2819,"titles":17566,"content":99,"level":136},"/v1.0.4/learn/architecture#extension-points",[1237],{"id":17568,"title":2823,"titles":17569,"content":2825,"level":155},"/v1.0.4/learn/architecture#custom-expressions",[1237,2819],{"id":17571,"title":2828,"titles":17572,"content":2830,"level":155},"/v1.0.4/learn/architecture#compound-queries",[1237,2819],{"id":17574,"title":2833,"titles":17575,"content":6191,"level":155},"/v1.0.4/learn/architecture#direct-ast-access",[1237,2819],{"id":17577,"title":1215,"titles":17578,"content":2839,"level":107},"/v1.0.4/guides/schema-validation",[],{"id":17580,"title":1215,"titles":17581,"content":2843,"level":107},"/v1.0.4/guides/schema-validation#schema-validation",[],{"id":17583,"title":2846,"titles":17584,"content":2848,"level":136},"/v1.0.4/guides/schema-validation#defining-a-schema",[1215],{"id":17586,"title":2851,"titles":17587,"content":2853,"level":136},"/v1.0.4/guides/schema-validation#creating-an-instance",[1215],{"id":17589,"title":2856,"titles":17590,"content":99,"level":136},"/v1.0.4/guides/schema-validation#validation-behavior",[1215],{"id":17592,"title":2860,"titles":17593,"content":2862,"level":155},"/v1.0.4/guides/schema-validation#table-validation",[1215,2856],{"id":17595,"title":2670,"titles":17596,"content":2866,"level":155},"/v1.0.4/guides/schema-validation#field-validation",[1215,2856],{"id":17598,"title":2680,"titles":17599,"content":2870,"level":155},"/v1.0.4/guides/schema-validation#parameter-validation",[1215,2856],{"id":17601,"title":2873,"titles":17602,"content":2875,"level":136},"/v1.0.4/guides/schema-validation#panic-vs-error",[1215],{"id":17604,"title":2733,"titles":17605,"content":2879,"level":155},"/v1.0.4/guides/schema-validation#try-variants",[1215,2873],{"id":17607,"title":2882,"titles":17608,"content":2884,"level":155},"/v1.0.4/guides/schema-validation#when-to-use-each",[1215,2873],{"id":17610,"title":2887,"titles":17611,"content":2889,"level":136},"/v1.0.4/guides/schema-validation#table-aliases",[1215],{"id":17613,"title":2769,"titles":17614,"content":2893,"level":155},"/v1.0.4/guides/schema-validation#alias-restrictions",[1215,2887],{"id":17616,"title":2896,"titles":17617,"content":2898,"level":155},"/v1.0.4/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":17619,"title":2901,"titles":17620,"content":99,"level":136},"/v1.0.4/guides/schema-validation#schema-organization",[1215],{"id":17622,"title":2905,"titles":17623,"content":6240,"level":155},"/v1.0.4/guides/schema-validation#single-schema-instance",[1215,2901],{"id":17625,"title":2910,"titles":17626,"content":2912,"level":155},"/v1.0.4/guides/schema-validation#multiple-schemas",[1215,2901],{"id":17628,"title":2915,"titles":17629,"content":99,"level":136},"/v1.0.4/guides/schema-validation#dynamic-queries",[1215],{"id":17631,"title":2919,"titles":17632,"content":6250,"level":155},"/v1.0.4/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":17634,"title":2924,"titles":17635,"content":2926,"level":155},"/v1.0.4/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":17637,"title":2929,"titles":17638,"content":99,"level":136},"/v1.0.4/guides/schema-validation#validation-errors",[1215],{"id":17640,"title":2933,"titles":17641,"content":2935,"level":155},"/v1.0.4/guides/schema-validation#error-types",[1215,2929],{"id":17643,"title":2938,"titles":17644,"content":6263,"level":155},"/v1.0.4/guides/schema-validation#handling-errors",[1215,2929],{"id":17646,"title":1251,"titles":17647,"content":2944,"level":107},"/v1.0.4/guides/conditions",[],{"id":17649,"title":1251,"titles":17650,"content":2948,"level":107},"/v1.0.4/guides/conditions#conditions",[],{"id":17652,"title":2951,"titles":17653,"content":2953,"level":136},"/v1.0.4/guides/conditions#basic-conditions",[1251],{"id":17655,"title":1727,"titles":17656,"content":99,"level":136},"/v1.0.4/guides/conditions#operators",[1251],{"id":17658,"title":2959,"titles":17659,"content":2961,"level":155},"/v1.0.4/guides/conditions#comparison-operators",[1251,1727],{"id":17661,"title":2964,"titles":17662,"content":2966,"level":155},"/v1.0.4/guides/conditions#pattern-matching",[1251,1727],{"id":17664,"title":2969,"titles":17665,"content":2971,"level":155},"/v1.0.4/guides/conditions#null-checks",[1251,1727],{"id":17667,"title":2974,"titles":17668,"content":2976,"level":155},"/v1.0.4/guides/conditions#array-operators",[1251,1727],{"id":17670,"title":2693,"titles":17671,"content":99,"level":136},"/v1.0.4/guides/conditions#combining-conditions",[1251],{"id":17673,"title":2982,"titles":17674,"content":2984,"level":155},"/v1.0.4/guides/conditions#and",[1251,2693],{"id":17676,"title":2987,"titles":17677,"content":2989,"level":155},"/v1.0.4/guides/conditions#or",[1251,2693],{"id":17679,"title":2992,"titles":17680,"content":2994,"level":155},"/v1.0.4/guides/conditions#nested-logic",[1251,2693],{"id":17682,"title":2997,"titles":17683,"content":2999,"level":136},"/v1.0.4/guides/conditions#between",[1251],{"id":17685,"title":2708,"titles":17686,"content":3003,"level":136},"/v1.0.4/guides/conditions#field-comparisons",[1251],{"id":17688,"title":3006,"titles":17689,"content":99,"level":136},"/v1.0.4/guides/conditions#subqueries",[1251],{"id":17691,"title":3010,"titles":17692,"content":3012,"level":155},"/v1.0.4/guides/conditions#in-subquery",[1251,3006],{"id":17694,"title":3015,"titles":17695,"content":3017,"level":155},"/v1.0.4/guides/conditions#not-in-subquery",[1251,3006],{"id":17697,"title":3020,"titles":17698,"content":3022,"level":155},"/v1.0.4/guides/conditions#exists",[1251,3006],{"id":17700,"title":3025,"titles":17701,"content":3027,"level":155},"/v1.0.4/guides/conditions#not-exists",[1251,3006],{"id":17703,"title":2804,"titles":17704,"content":3031,"level":155},"/v1.0.4/guides/conditions#parameter-namespacing",[1251,3006],{"id":17706,"title":3034,"titles":17707,"content":3036,"level":136},"/v1.0.4/guides/conditions#multiple-where-clauses",[1251],{"id":17709,"title":3039,"titles":17710,"content":3041,"level":136},"/v1.0.4/guides/conditions#wherefield-shorthand",[1251],{"id":17712,"title":3044,"titles":17713,"content":3046,"level":136},"/v1.0.4/guides/conditions#building-conditions-dynamically",[1251],{"id":17715,"title":1265,"titles":17716,"content":3050,"level":107},"/v1.0.4/guides/joins",[],{"id":17718,"title":1265,"titles":17719,"content":3054,"level":107},"/v1.0.4/guides/joins#joins",[],{"id":17721,"title":3057,"titles":17722,"content":3059,"level":136},"/v1.0.4/guides/joins#join-types",[1265],{"id":17724,"title":3062,"titles":17725,"content":3064,"level":136},"/v1.0.4/guides/joins#basic-join",[1265],{"id":17727,"title":2887,"titles":17728,"content":3068,"level":136},"/v1.0.4/guides/joins#table-aliases",[1265],{"id":17730,"title":3071,"titles":17731,"content":3073,"level":136},"/v1.0.4/guides/joins#left-join",[1265],{"id":17733,"title":3076,"titles":17734,"content":3078,"level":136},"/v1.0.4/guides/joins#right-join",[1265],{"id":17736,"title":3081,"titles":17737,"content":3083,"level":136},"/v1.0.4/guides/joins#full-outer-join",[1265],{"id":17739,"title":3086,"titles":17740,"content":3088,"level":136},"/v1.0.4/guides/joins#cross-join",[1265],{"id":17742,"title":3091,"titles":17743,"content":3093,"level":136},"/v1.0.4/guides/joins#multiple-joins",[1265],{"id":17745,"title":3096,"titles":17746,"content":3098,"level":136},"/v1.0.4/guides/joins#complex-on-conditions",[1265],{"id":17748,"title":3101,"titles":17749,"content":3103,"level":136},"/v1.0.4/guides/joins#self-joins",[1265],{"id":17751,"title":3106,"titles":17752,"content":3108,"level":136},"/v1.0.4/guides/joins#joins-with-count",[1265],{"id":17754,"title":3111,"titles":17755,"content":3113,"level":136},"/v1.0.4/guides/joins#join-validation",[1265],{"id":17757,"title":1668,"titles":17758,"content":3117,"level":107},"/v1.0.4/guides/aggregates",[],{"id":17760,"title":1668,"titles":17761,"content":3121,"level":107},"/v1.0.4/guides/aggregates#aggregates",[],{"id":17763,"title":3124,"titles":17764,"content":99,"level":136},"/v1.0.4/guides/aggregates#aggregate-functions",[1668],{"id":17766,"title":3128,"titles":17767,"content":3130,"level":155},"/v1.0.4/guides/aggregates#basic-aggregates",[1668,3124],{"id":17769,"title":3133,"titles":17770,"content":3135,"level":155},"/v1.0.4/guides/aggregates#using-aggregates",[1668,3124],{"id":17772,"title":3138,"titles":17773,"content":3140,"level":155},"/v1.0.4/guides/aggregates#aliases",[1668,3124],{"id":17775,"title":3143,"titles":17776,"content":3145,"level":136},"/v1.0.4/guides/aggregates#group-by",[1668],{"id":17778,"title":3148,"titles":17779,"content":3150,"level":136},"/v1.0.4/guides/aggregates#having",[1668],{"id":17781,"title":3153,"titles":17782,"content":3155,"level":155},"/v1.0.4/guides/aggregates#simple-having",[1668,3148],{"id":17784,"title":3158,"titles":17785,"content":3160,"level":155},"/v1.0.4/guides/aggregates#aggregate-having",[1668,3148],{"id":17787,"title":3163,"titles":17788,"content":3165,"level":155},"/v1.0.4/guides/aggregates#having-helpers",[1668,3148],{"id":17790,"title":3168,"titles":17791,"content":3170,"level":136},"/v1.0.4/guides/aggregates#filter-clause",[1668],{"id":17793,"title":3173,"titles":17794,"content":3175,"level":136},"/v1.0.4/guides/aggregates#window-functions",[1668],{"id":17796,"title":3178,"titles":17797,"content":3180,"level":155},"/v1.0.4/guides/aggregates#basic-window-functions",[1668,3173],{"id":17799,"title":3183,"titles":17800,"content":3185,"level":155},"/v1.0.4/guides/aggregates#window-function-types",[1668,3173],{"id":17802,"title":3188,"titles":17803,"content":3190,"level":155},"/v1.0.4/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":17805,"title":3193,"titles":17806,"content":3195,"level":155},"/v1.0.4/guides/aggregates#window-specification",[1668,3173],{"id":17808,"title":3198,"titles":17809,"content":3200,"level":155},"/v1.0.4/guides/aggregates#frame-bounds",[1668,3173],{"id":17811,"title":3203,"titles":17812,"content":99,"level":136},"/v1.0.4/guides/aggregates#math-functions",[1668],{"id":17814,"title":3207,"titles":17815,"content":3209,"level":155},"/v1.0.4/guides/aggregates#available-functions",[1668,3203],{"id":17817,"title":3212,"titles":17818,"content":3214,"level":155},"/v1.0.4/guides/aggregates#example",[1668,3203],{"id":17820,"title":1270,"titles":17821,"content":3218,"level":136},"/v1.0.4/guides/aggregates#case-expressions",[1668],{"id":17823,"title":3221,"titles":17824,"content":3223,"level":136},"/v1.0.4/guides/aggregates#type-casting",[1668],{"id":17826,"title":3226,"titles":17827,"content":3228,"level":136},"/v1.0.4/guides/aggregates#coalesce-and-nullif",[1668],{"id":17829,"title":1675,"titles":17830,"content":3232,"level":107},"/v1.0.4/guides/testing",[],{"id":17832,"title":1675,"titles":17833,"content":3236,"level":107},"/v1.0.4/guides/testing#testing",[],{"id":17835,"title":3239,"titles":17836,"content":99,"level":136},"/v1.0.4/guides/testing#testing-query-output",[1675],{"id":17838,"title":3243,"titles":17839,"content":6459,"level":155},"/v1.0.4/guides/testing#basic-output-testing",[1675,3239],{"id":17841,"title":3248,"titles":17842,"content":3250,"level":155},"/v1.0.4/guides/testing#test-instance-setup",[1675,3239],{"id":17844,"title":3253,"titles":17845,"content":99,"level":136},"/v1.0.4/guides/testing#table-driven-tests",[1675],{"id":17847,"title":3257,"titles":17848,"content":6469,"level":155},"/v1.0.4/guides/testing#testing-multiple-queries",[1675,3253],{"id":17850,"title":3262,"titles":17851,"content":99,"level":136},"/v1.0.4/guides/testing#testing-validation",[1675],{"id":17853,"title":3266,"titles":17854,"content":3268,"level":155},"/v1.0.4/guides/testing#testing-invalid-input",[1675,3262],{"id":17856,"title":3271,"titles":17857,"content":3273,"level":155},"/v1.0.4/guides/testing#testing-try-variants",[1675,3262],{"id":17859,"title":3276,"titles":17860,"content":99,"level":136},"/v1.0.4/guides/testing#testing-error-cases",[1675],{"id":17862,"title":3280,"titles":17863,"content":6485,"level":155},"/v1.0.4/guides/testing#builder-errors",[1675,3276],{"id":17865,"title":3285,"titles":17866,"content":99,"level":136},"/v1.0.4/guides/testing#testing-complex-queries",[1675],{"id":17868,"title":3289,"titles":17869,"content":6492,"level":155},"/v1.0.4/guides/testing#join-tests",[1675,3285],{"id":17871,"title":3294,"titles":17872,"content":6496,"level":155},"/v1.0.4/guides/testing#subquery-tests",[1675,3285],{"id":17874,"title":3299,"titles":17875,"content":3301,"level":136},"/v1.0.4/guides/testing#snapshot-testing",[1675],{"id":17877,"title":3304,"titles":17878,"content":99,"level":136},"/v1.0.4/guides/testing#best-practices",[1675],{"id":17880,"title":3308,"titles":17881,"content":3310,"level":155},"/v1.0.4/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":17883,"title":3313,"titles":17884,"content":3315,"level":155},"/v1.0.4/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":17886,"title":3318,"titles":17887,"content":3320,"level":155},"/v1.0.4/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":17889,"title":3323,"titles":17890,"content":6515,"level":155},"/v1.0.4/guides/testing#_4-test-edge-cases",[1675,3304],{"id":17892,"title":1688,"titles":17893,"content":3329,"level":107},"/v1.0.4/cookbook/pagination",[],{"id":17895,"title":1688,"titles":17896,"content":3333,"level":107},"/v1.0.4/cookbook/pagination#pagination",[],{"id":17898,"title":3336,"titles":17899,"content":6525,"level":136},"/v1.0.4/cookbook/pagination#offset-pagination",[1688],{"id":17901,"title":3341,"titles":17902,"content":3343,"level":155},"/v1.0.4/cookbook/pagination#usage",[1688,3336],{"id":17904,"title":3346,"titles":17905,"content":6532,"level":155},"/v1.0.4/cookbook/pagination#with-total-count",[1688,3336],{"id":17907,"title":3351,"titles":17908,"content":3353,"level":155},"/v1.0.4/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":17910,"title":3356,"titles":17911,"content":6539,"level":136},"/v1.0.4/cookbook/pagination#cursor-pagination",[1688],{"id":17913,"title":3341,"titles":17914,"content":3362,"level":155},"/v1.0.4/cookbook/pagination#usage-1",[1688,3356],{"id":17916,"title":3365,"titles":17917,"content":6546,"level":155},"/v1.0.4/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":17919,"title":3370,"titles":17920,"content":6550,"level":155},"/v1.0.4/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":17922,"title":3375,"titles":17923,"content":6554,"level":136},"/v1.0.4/cookbook/pagination#filtering-with-pagination",[1688],{"id":17925,"title":3380,"titles":17926,"content":6558,"level":136},"/v1.0.4/cookbook/pagination#pagination-with-joins",[1688],{"id":17928,"title":3304,"titles":17929,"content":99,"level":136},"/v1.0.4/cookbook/pagination#best-practices",[1688],{"id":17931,"title":3388,"titles":17932,"content":6565,"level":155},"/v1.0.4/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":17934,"title":3393,"titles":17935,"content":3395,"level":155},"/v1.0.4/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":17937,"title":3398,"titles":17938,"content":3400,"level":155},"/v1.0.4/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":17940,"title":3403,"titles":17941,"content":3405,"level":155},"/v1.0.4/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":17943,"title":1695,"titles":17944,"content":3409,"level":107},"/v1.0.4/cookbook/vector-search",[],{"id":17946,"title":1695,"titles":17947,"content":3413,"level":107},"/v1.0.4/cookbook/vector-search#vector-search",[],{"id":17949,"title":3416,"titles":17950,"content":3418,"level":136},"/v1.0.4/cookbook/vector-search#schema-setup",[1695],{"id":17952,"title":3421,"titles":17953,"content":3423,"level":136},"/v1.0.4/cookbook/vector-search#distance-operators",[1695],{"id":17955,"title":3426,"titles":17956,"content":3428,"level":136},"/v1.0.4/cookbook/vector-search#basic-similarity-search",[1695],{"id":17958,"title":3431,"titles":17959,"content":3433,"level":155},"/v1.0.4/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":17961,"title":17962,"titles":17963,"content":17964,"level":136},"/v1.0.4/cookbook/vector-search#selecting-distance-as-a-column","Selecting Distance as a Column",[1695],"Use BinaryExpr to include the computed distance in your results: func SearchWithDistance(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(\n            instance.F(\"id\"),\n            instance.F(\"title\"),\n            instance.F(\"content\"),\n        ).\n        SelectExpr(astql.As(\n            astql.BinaryExpr(\n                instance.F(\"embedding\"),\n                astql.VectorL2Distance,\n                instance.P(\"query_embedding\"),\n            ),\n            \"distance\",\n        )).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// SELECT \"id\", \"title\", \"content\", \"embedding\" \u003C-> :query_embedding AS \"distance\"\n// FROM \"documents\"\n// ORDER BY \"embedding\" \u003C-> :query_embedding ASC\n// LIMIT 10 This is useful when you need to display or filter by the actual distance value.",{"id":17966,"title":3436,"titles":17967,"content":3438,"level":136},"/v1.0.4/cookbook/vector-search#cosine-similarity",[1695],{"id":17969,"title":3441,"titles":17970,"content":3443,"level":136},"/v1.0.4/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":17972,"title":3446,"titles":17973,"content":3448,"level":136},"/v1.0.4/cookbook/vector-search#filtered-vector-search",[1695],{"id":17975,"title":3451,"titles":17976,"content":3453,"level":136},"/v1.0.4/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":17978,"title":3456,"titles":17979,"content":3458,"level":136},"/v1.0.4/cookbook/vector-search#hybrid-search",[1695],{"id":17981,"title":3461,"titles":17982,"content":3463,"level":136},"/v1.0.4/cookbook/vector-search#multi-vector-search",[1695],{"id":17984,"title":3466,"titles":17985,"content":3468,"level":136},"/v1.0.4/cookbook/vector-search#indexing-recommendations",[1695],{"id":17987,"title":3304,"titles":17988,"content":99,"level":136},"/v1.0.4/cookbook/vector-search#best-practices",[1695],{"id":17990,"title":3474,"titles":17991,"content":3476,"level":155},"/v1.0.4/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":17993,"title":3479,"titles":17994,"content":3481,"level":155},"/v1.0.4/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":17996,"title":3484,"titles":17997,"content":3486,"level":155},"/v1.0.4/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":17999,"title":1702,"titles":18000,"content":3490,"level":107},"/v1.0.4/cookbook/upserts",[],{"id":18002,"title":1702,"titles":18003,"content":3494,"level":107},"/v1.0.4/cookbook/upserts#upserts",[],{"id":18005,"title":3497,"titles":18006,"content":6635,"level":136},"/v1.0.4/cookbook/upserts#basic-upsert",[1702],{"id":18008,"title":3502,"titles":18009,"content":6639,"level":136},"/v1.0.4/cookbook/upserts#do-nothing",[1702],{"id":18011,"title":3507,"titles":18012,"content":6643,"level":136},"/v1.0.4/cookbook/upserts#multi-column-conflict",[1702],{"id":18014,"title":3512,"titles":18015,"content":6647,"level":136},"/v1.0.4/cookbook/upserts#returning-with-upsert",[1702],{"id":18017,"title":3517,"titles":18018,"content":6651,"level":136},"/v1.0.4/cookbook/upserts#batch-upsert",[1702],{"id":18020,"title":3522,"titles":18021,"content":6655,"level":136},"/v1.0.4/cookbook/upserts#conditional-upsert",[1702],{"id":18023,"title":3527,"titles":18024,"content":6659,"level":136},"/v1.0.4/cookbook/upserts#sync-pattern",[1702],{"id":18026,"title":3532,"titles":18027,"content":6663,"level":136},"/v1.0.4/cookbook/upserts#upsert-with-timestamps",[1702],{"id":18029,"title":3304,"titles":18030,"content":99,"level":136},"/v1.0.4/cookbook/upserts#best-practices",[1702],{"id":18032,"title":3540,"titles":18033,"content":3542,"level":155},"/v1.0.4/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":18035,"title":3545,"titles":18036,"content":3547,"level":155},"/v1.0.4/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":18038,"title":3550,"titles":18039,"content":3552,"level":155},"/v1.0.4/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":18041,"title":3555,"titles":18042,"content":3557,"level":155},"/v1.0.4/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":18044,"title":1709,"titles":18045,"content":6682,"level":107},"/v1.0.4/cookbook/orm-foundation",[],{"id":18047,"title":1709,"titles":18048,"content":6686,"level":107},"/v1.0.4/cookbook/orm-foundation#orm-foundation",[],{"id":18050,"title":6689,"titles":18051,"content":6691,"level":136},"/v1.0.4/cookbook/orm-foundation#the-result",[1709],{"id":18053,"title":6694,"titles":18054,"content":6696,"level":136},"/v1.0.4/cookbook/orm-foundation#the-architecture",[1709],{"id":18056,"title":6699,"titles":18057,"content":6701,"level":136},"/v1.0.4/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":18059,"title":6704,"titles":18060,"content":6706,"level":155},"/v1.0.4/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":18062,"title":6709,"titles":18063,"content":6711,"level":155},"/v1.0.4/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":18065,"title":6714,"titles":18066,"content":6716,"level":155},"/v1.0.4/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":18068,"title":6719,"titles":18069,"content":6721,"level":155},"/v1.0.4/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":18071,"title":6724,"titles":18072,"content":6726,"level":136},"/v1.0.4/cookbook/orm-foundation#the-security-model",[1709],{"id":18074,"title":6729,"titles":18075,"content":6731,"level":136},"/v1.0.4/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":18077,"title":6734,"titles":18078,"content":6736,"level":136},"/v1.0.4/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":18080,"title":6739,"titles":18081,"content":6741,"level":155},"/v1.0.4/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":18083,"title":6744,"titles":18084,"content":6746,"level":155},"/v1.0.4/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":18086,"title":6749,"titles":18087,"content":6751,"level":155},"/v1.0.4/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":18089,"title":6754,"titles":18090,"content":6756,"level":155},"/v1.0.4/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":18092,"title":6759,"titles":18093,"content":6761,"level":136},"/v1.0.4/cookbook/orm-foundation#see-also",[1709],{"id":18095,"title":3560,"titles":18096,"content":3562,"level":107},"/v1.0.4/reference/api",[],{"id":18098,"title":3560,"titles":18099,"content":3566,"level":107},"/v1.0.4/reference/api#api-reference",[],{"id":18101,"title":3569,"titles":18102,"content":99,"level":136},"/v1.0.4/reference/api#instance-creation",[3560],{"id":18104,"title":856,"titles":18105,"content":3574,"level":155},"/v1.0.4/reference/api#newfromdbml",[3560,3569],{"id":18107,"title":3577,"titles":18108,"content":99,"level":136},"/v1.0.4/reference/api#instance-methods",[3560],{"id":18110,"title":119,"titles":18111,"content":3582,"level":155},"/v1.0.4/reference/api#t",[3560,3577],{"id":18113,"title":3585,"titles":18114,"content":3587,"level":155},"/v1.0.4/reference/api#tryt",[3560,3577],{"id":18116,"title":169,"titles":18117,"content":3591,"level":155},"/v1.0.4/reference/api#f",[3560,3577],{"id":18119,"title":3594,"titles":18120,"content":3596,"level":155},"/v1.0.4/reference/api#tryf",[3560,3577],{"id":18122,"title":316,"titles":18123,"content":3600,"level":155},"/v1.0.4/reference/api#p",[3560,3577],{"id":18125,"title":3603,"titles":18126,"content":3605,"level":155},"/v1.0.4/reference/api#tryp",[3560,3577],{"id":18128,"title":284,"titles":18129,"content":3609,"level":155},"/v1.0.4/reference/api#c",[3560,3577],{"id":18131,"title":3612,"titles":18132,"content":3614,"level":155},"/v1.0.4/reference/api#tryc",[3560,3577],{"id":18134,"title":3617,"titles":18135,"content":3619,"level":155},"/v1.0.4/reference/api#and",[3560,3577],{"id":18137,"title":3622,"titles":18138,"content":3624,"level":155},"/v1.0.4/reference/api#or",[3560,3577],{"id":18140,"title":3627,"titles":18141,"content":3629,"level":155},"/v1.0.4/reference/api#null",[3560,3577],{"id":18143,"title":3632,"titles":18144,"content":3634,"level":155},"/v1.0.4/reference/api#notnull",[3560,3577],{"id":18146,"title":3637,"titles":18147,"content":3639,"level":155},"/v1.0.4/reference/api#withtable",[3560,3577],{"id":18149,"title":3642,"titles":18150,"content":3644,"level":155},"/v1.0.4/reference/api#trywithtable",[3560,3577],{"id":18152,"title":3647,"titles":18153,"content":3649,"level":155},"/v1.0.4/reference/api#aggc",[3560,3577],{"id":18155,"title":3652,"titles":18156,"content":3654,"level":155},"/v1.0.4/reference/api#tryaggc",[3560,3577],{"id":18158,"title":3657,"titles":18159,"content":3659,"level":155},"/v1.0.4/reference/api#valuemap",[3560,3577],{"id":18161,"title":18162,"titles":18163,"content":18164,"level":155},"/v1.0.4/reference/api#jsonbtext","JSONBText",[3560,3577],"func (a *ASTQL) JSONBText(field types.Field, key types.Param) types.Field Creates a JSONB text extraction field with a parameterized key. Renders as field->>:key_param. PostgreSQL only. The key is passed as a parameter for SQL injection safety.",{"id":18166,"title":18167,"titles":18168,"content":18169,"level":155},"/v1.0.4/reference/api#jsonbpath","JSONBPath",[3560,3577],"func (a *ASTQL) JSONBPath(field types.Field, key types.Param) types.Field Creates a JSONB path access field with a parameterized key. Renders as field->:key_param. PostgreSQL only. Use with ArrayContains for JSONB array queries. The key is passed as a parameter for SQL injection safety.",{"id":18171,"title":3662,"titles":18172,"content":99,"level":136},"/v1.0.4/reference/api#query-builders",[3560],{"id":18174,"title":219,"titles":18175,"content":3667,"level":155},"/v1.0.4/reference/api#select",[3560,3662],{"id":18177,"title":3670,"titles":18178,"content":3672,"level":155},"/v1.0.4/reference/api#insert",[3560,3662],{"id":18180,"title":3675,"titles":18181,"content":3677,"level":155},"/v1.0.4/reference/api#update",[3560,3662],{"id":18183,"title":3680,"titles":18184,"content":3682,"level":155},"/v1.0.4/reference/api#delete",[3560,3662],{"id":18186,"title":3685,"titles":18187,"content":3687,"level":155},"/v1.0.4/reference/api#count",[3560,3662],{"id":18189,"title":3690,"titles":18190,"content":99,"level":136},"/v1.0.4/reference/api#builder-methods",[3560],{"id":18192,"title":2665,"titles":18193,"content":3695,"level":155},"/v1.0.4/reference/api#fields",[3560,3690],{"id":18195,"title":3698,"titles":18196,"content":3700,"level":155},"/v1.0.4/reference/api#where",[3560,3690],{"id":18198,"title":3703,"titles":18199,"content":3705,"level":155},"/v1.0.4/reference/api#wherefield",[3560,3690],{"id":18201,"title":3708,"titles":18202,"content":3710,"level":155},"/v1.0.4/reference/api#orderby",[3560,3690],{"id":18204,"title":3713,"titles":18205,"content":3715,"level":155},"/v1.0.4/reference/api#orderbynulls",[3560,3690],{"id":18207,"title":3718,"titles":18208,"content":3720,"level":155},"/v1.0.4/reference/api#orderbyexpr",[3560,3690],{"id":18210,"title":3723,"titles":18211,"content":5734,"level":155},"/v1.0.4/reference/api#limit",[3560,3690],{"id":18213,"title":5737,"titles":18214,"content":5739,"level":155},"/v1.0.4/reference/api#limitparam",[3560,3690],{"id":18216,"title":3728,"titles":18217,"content":5743,"level":155},"/v1.0.4/reference/api#offset",[3560,3690],{"id":18219,"title":5746,"titles":18220,"content":5748,"level":155},"/v1.0.4/reference/api#offsetparam",[3560,3690],{"id":18222,"title":3733,"titles":18223,"content":3735,"level":155},"/v1.0.4/reference/api#set",[3560,3690],{"id":18225,"title":3738,"titles":18226,"content":3740,"level":155},"/v1.0.4/reference/api#values",[3560,3690],{"id":18228,"title":3743,"titles":18229,"content":3745,"level":155},"/v1.0.4/reference/api#returning",[3560,3690],{"id":18231,"title":3748,"titles":18232,"content":3750,"level":155},"/v1.0.4/reference/api#distinct",[3560,3690],{"id":18234,"title":3753,"titles":18235,"content":3755,"level":155},"/v1.0.4/reference/api#distincton",[3560,3690],{"id":18237,"title":3758,"titles":18238,"content":3760,"level":155},"/v1.0.4/reference/api#groupby",[3560,3690],{"id":18240,"title":3763,"titles":18241,"content":3765,"level":155},"/v1.0.4/reference/api#having",[3560,3690],{"id":18243,"title":3768,"titles":18244,"content":3770,"level":155},"/v1.0.4/reference/api#havingagg",[3560,3690],{"id":18246,"title":3773,"titles":18247,"content":3775,"level":155},"/v1.0.4/reference/api#selectexpr",[3560,3690],{"id":18249,"title":3778,"titles":18250,"content":3780,"level":155},"/v1.0.4/reference/api#onconflict",[3560,3690],{"id":18252,"title":3783,"titles":18253,"content":3785,"level":155},"/v1.0.4/reference/api#join-methods",[3560,3690],{"id":18255,"title":3788,"titles":18256,"content":3790,"level":155},"/v1.0.4/reference/api#row-locking",[3560,3690],{"id":18258,"title":3793,"titles":18259,"content":3795,"level":155},"/v1.0.4/reference/api#build",[3560,3690],{"id":18261,"title":3798,"titles":18262,"content":3800,"level":155},"/v1.0.4/reference/api#mustbuild",[3560,3690],{"id":18264,"title":350,"titles":18265,"content":6924,"level":155},"/v1.0.4/reference/api#render",[3560,3690],{"id":18267,"title":3807,"titles":18268,"content":6928,"level":155},"/v1.0.4/reference/api#mustrender",[3560,3690],{"id":18270,"title":3812,"titles":18271,"content":99,"level":136},"/v1.0.4/reference/api#set-operations",[3560],{"id":18273,"title":3816,"titles":18274,"content":3818,"level":155},"/v1.0.4/reference/api#union-unionall",[3560,3812],{"id":18276,"title":3821,"titles":18277,"content":3823,"level":155},"/v1.0.4/reference/api#intersect-intersectall",[3560,3812],{"id":18279,"title":3826,"titles":18280,"content":3828,"level":155},"/v1.0.4/reference/api#except-exceptall",[3560,3812],{"id":18282,"title":3831,"titles":18283,"content":6944,"level":136},"/v1.0.4/reference/api#rendering",[3560],{"id":18285,"title":3844,"titles":18286,"content":99,"level":136},"/v1.0.4/reference/api#expression-functions",[3560],{"id":18288,"title":1668,"titles":18289,"content":3849,"level":155},"/v1.0.4/reference/api#aggregates",[3560,3844],{"id":18291,"title":3852,"titles":18292,"content":3854,"level":155},"/v1.0.4/reference/api#filter-aggregates",[3560,3844],{"id":18294,"title":18295,"titles":18296,"content":18297,"level":155},"/v1.0.4/reference/api#binary-expressions","Binary Expressions",[3560,3844],"func BinaryExpr(field types.Field, op types.Operator, param types.Param) types.FieldExpression Creates a binary expression for field \u003Cop> param patterns. Commonly used with vector distance operators to select computed distances as columns. // Select distance as a column\nastql.As(\n    astql.BinaryExpr(instance.F(\"embedding\"), astql.VectorL2Distance, instance.P(\"query\")),\n    \"distance\",\n)\n// \"embedding\" \u003C-> :query AS \"distance\"",{"id":18299,"title":1251,"titles":18300,"content":3858,"level":155},"/v1.0.4/reference/api#conditions",[3560,3844],{"id":18302,"title":3006,"titles":18303,"content":3862,"level":155},"/v1.0.4/reference/api#subqueries",[3560,3844],{"id":18305,"title":3865,"titles":18306,"content":3867,"level":155},"/v1.0.4/reference/api#case-expression",[3560,3844],{"id":18308,"title":3870,"titles":18309,"content":3872,"level":155},"/v1.0.4/reference/api#null-handling",[3560,3844],{"id":18311,"title":3203,"titles":18312,"content":3876,"level":155},"/v1.0.4/reference/api#math-functions",[3560,3844],{"id":18314,"title":5855,"titles":18315,"content":5857,"level":155},"/v1.0.4/reference/api#string-functions",[3560,3844],{"id":18317,"title":5860,"titles":18318,"content":5862,"level":155},"/v1.0.4/reference/api#date-functions",[3560,3844],{"id":18320,"title":3221,"titles":18321,"content":3880,"level":155},"/v1.0.4/reference/api#type-casting",[3560,3844],{"id":18323,"title":3173,"titles":18324,"content":3884,"level":155},"/v1.0.4/reference/api#window-functions",[3560,3844],{"id":18326,"title":3193,"titles":18327,"content":3888,"level":155},"/v1.0.4/reference/api#window-specification",[3560,3844],{"id":18329,"title":3891,"titles":18330,"content":3893,"level":155},"/v1.0.4/reference/api#windowbuilder-methods",[3560,3844],{"id":18332,"title":3896,"titles":18333,"content":3898,"level":155},"/v1.0.4/reference/api#expression-alias",[3560,3844],{"id":18335,"title":3163,"titles":18336,"content":3902,"level":155},"/v1.0.4/reference/api#having-helpers",[3560,3844],{"id":18338,"title":3905,"titles":18339,"content":99,"level":136},"/v1.0.4/reference/api#types",[3560],{"id":18341,"title":3909,"titles":18342,"content":3911,"level":155},"/v1.0.4/reference/api#queryresult",[3560,3905],{"id":18344,"title":3914,"titles":18345,"content":3916,"level":155},"/v1.0.4/reference/api#direction",[3560,3905],{"id":18347,"title":3919,"titles":18348,"content":3921,"level":155},"/v1.0.4/reference/api#nullsordering",[3560,3905],{"id":18350,"title":3924,"titles":18351,"content":5896,"level":155},"/v1.0.4/reference/api#operation",[3560,3905],{"id":18353,"title":5899,"titles":18354,"content":99,"level":136},"/v1.0.4/reference/api#providers",[3560],{"id":18356,"title":5903,"titles":18357,"content":13180,"level":155},"/v1.0.4/reference/api#renderer-interface",[3560,5899],{"id":18359,"title":1187,"titles":18360,"content":14214,"level":155},"/v1.0.4/reference/api#capabilities",[3560,5899],{"id":18362,"title":5908,"titles":18363,"content":15253,"level":155},"/v1.0.4/reference/api#postgresql-provider",[3560,5899],{"id":18365,"title":5913,"titles":18366,"content":18367,"level":155},"/v1.0.4/reference/api#sqlite-provider",[3560,5899],"import \"github.com/zoobzio/astql/sqlite\"\n\nrenderer := sqlite.New()\nresult, err := query.Render(renderer) Returns UnsupportedFeatureError for features not available in SQLite: DISTINCT ONILIKE / NOT ILIKERegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)JSONB field access (->>, ->)IN / NOT IN with array parametersRow-level locking (FOR UPDATE, FOR SHARE)POWER and SQRT math functions",{"id":18369,"title":12159,"titles":18370,"content":18371,"level":155},"/v1.0.4/reference/api#mariadb-provider",[3560,5899],"import \"github.com/zoobzio/astql/mariadb\"\n\nrenderer := mariadb.New()\nresult, err := query.Render(renderer) MariaDB-specific behavior: Uses backtick quoting for identifiers: `name`Uses :name parameter placeholders (sqlx compatible)ON CONFLICT DO UPDATE → ON DUPLICATE KEY UPDATEON CONFLICT DO NOTHING → ON DUPLICATE KEY UPDATE field = field (no-op)ILIKE maps to LIKE (MariaDB LIKE is case-insensitive by default)Standard IN (...) syntax instead of = ANY(:array)RETURNING clause support for INSERT/DELETE (MariaDB 10.5+, UPDATE not supported) Returns UnsupportedFeatureError for: DISTINCT ONFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)JSONB field access (->>, ->)FOR NO KEY UPDATE / FOR KEY SHARE (use FOR UPDATE or FOR SHARE instead)",{"id":18373,"title":5923,"titles":18374,"content":18375,"level":155},"/v1.0.4/reference/api#sql-server-provider",[3560,5899],"import \"github.com/zoobzio/astql/mssql\"\n\nrenderer := mssql.New()\nresult, err := query.Render(renderer) SQL Server-specific behavior: Uses square bracket quoting for identifiers: [name]Uses @name parameter placeholdersLIMIT/OFFSET → OFFSET n ROWS FETCH NEXT m ROWS ONLY (requires ORDER BY)RETURNING → OUTPUT INSERTED.* / OUTPUT DELETED.*LENGTH() → LEN()NOW() → GETDATE()EXTRACT() → DATEPART()!= → \u003C> (preferred SQL Server syntax) Returns UnsupportedFeatureError for: ON CONFLICT / upsert (MERGE is too complex)DISTINCT ONILIKE / NOT ILIKEFILTER on aggregatesRegex operators (~, ~*, !~, !~*)Array operators (@>, \u003C@, &&)Vector operators (\u003C->, \u003C#>, \u003C=>, \u003C+>)JSONB field access (->>, ->)Row-level locking (FOR UPDATE, FOR SHARE)LIMIT without ORDER BY (returns error) html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sSYET, html code.shiki .sSYET{--shiki-default:var(--shiki-parameter)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .sBGCq, html code.shiki .sBGCq{--shiki-default:var(--shiki-property)}html pre.shiki code .sfm-E, html code.shiki .sfm-E{--shiki-default:var(--shiki-variable)}",{"id":18377,"title":3929,"titles":18378,"content":3931,"level":107},"/v1.0.4/reference/operators",[],{"id":18380,"title":3929,"titles":18381,"content":3935,"level":107},"/v1.0.4/reference/operators#operators-reference",[],{"id":18383,"title":2959,"titles":18384,"content":3939,"level":136},"/v1.0.4/reference/operators#comparison-operators",[3929],{"id":18386,"title":3341,"titles":18387,"content":3943,"level":155},"/v1.0.4/reference/operators#usage",[3929,2959],{"id":18389,"title":2964,"titles":18390,"content":3947,"level":136},"/v1.0.4/reference/operators#pattern-matching",[3929],{"id":18392,"title":3341,"titles":18393,"content":3951,"level":155},"/v1.0.4/reference/operators#usage-1",[3929,2964],{"id":18395,"title":3954,"titles":18396,"content":3956,"level":136},"/v1.0.4/reference/operators#null-operators",[3929],{"id":18398,"title":3341,"titles":18399,"content":3960,"level":155},"/v1.0.4/reference/operators#usage-2",[3929,3954],{"id":18401,"title":2974,"titles":18402,"content":3964,"level":136},"/v1.0.4/reference/operators#array-operators",[3929],{"id":18404,"title":3341,"titles":18405,"content":3968,"level":155},"/v1.0.4/reference/operators#usage-3",[3929,2974],{"id":18407,"title":3971,"titles":18408,"content":3973,"level":155},"/v1.0.4/reference/operators#with-sqlx",[3929,2974],{"id":18410,"title":3976,"titles":18411,"content":3978,"level":136},"/v1.0.4/reference/operators#subquery-operators",[3929],{"id":18413,"title":3341,"titles":18414,"content":3982,"level":155},"/v1.0.4/reference/operators#usage-4",[3929,3976],{"id":18416,"title":3985,"titles":18417,"content":3987,"level":136},"/v1.0.4/reference/operators#regex-operators",[3929],{"id":18419,"title":3341,"titles":18420,"content":3991,"level":155},"/v1.0.4/reference/operators#usage-5",[3929,3985],{"id":18422,"title":3994,"titles":18423,"content":3996,"level":136},"/v1.0.4/reference/operators#postgresql-array-operators",[3929],{"id":18425,"title":3341,"titles":18426,"content":4000,"level":155},"/v1.0.4/reference/operators#usage-6",[3929,3994],{"id":18428,"title":18429,"titles":18430,"content":18431,"level":136},"/v1.0.4/reference/operators#jsonb-field-access-postgresql","JSONB Field Access (PostgreSQL)",[3929],"Access JSONB object keys directly in queries. Keys are parameterized for SQL injection safety. MethodSQLDescriptionExampleJSONBText()->>Extract as text\"metadata\"->>:key_paramJSONBPath()->Extract as JSON\"metadata\"->:key_param",{"id":18433,"title":3341,"titles":18434,"content":18435,"level":155},"/v1.0.4/reference/operators#usage-7",[3929,18429],"// Text extraction (returns string) - key is parameterized\nstatusField := instance.JSONBText(instance.F(\"metadata\"), instance.P(\"status_key\"))\n// \"metadata\"->>:status_key\n\n// Path access (returns JSONB, use with array operators)\ntagsField := instance.JSONBPath(instance.F(\"metadata\"), instance.P(\"tags_key\"))\n// \"metadata\"->:tags_key\n\n// In WHERE clause\ninstance.C(statusField, astql.EQ, instance.P(\"status_value\"))\n// \"metadata\"->>:status_key = :status_value\n\n// JSONB array containment\ninstance.C(tagsField, astql.ArrayContains, instance.P(\"required_tags\"))\n// \"metadata\"->:tags_key @> :required_tags Both the JSONB key and the comparison value are parameterized, preventing SQL injection.",{"id":18437,"title":4003,"titles":18438,"content":4005,"level":136},"/v1.0.4/reference/operators#vector-operators-pgvector",[3929],{"id":18440,"title":3341,"titles":18441,"content":4009,"level":155},"/v1.0.4/reference/operators#usage-8",[3929,4003],{"id":18443,"title":4012,"titles":18444,"content":4014,"level":155},"/v1.0.4/reference/operators#with-pgvector",[3929,4003],{"id":18446,"title":4017,"titles":18447,"content":4019,"level":136},"/v1.0.4/reference/operators#operator-selection-guide",[3929],{"id":18449,"title":3124,"titles":18450,"content":4023,"level":136},"/v1.0.4/reference/operators#aggregate-functions",[3929],{"id":18452,"title":3173,"titles":18453,"content":4027,"level":136},"/v1.0.4/reference/operators#window-functions",[3929],{"id":18455,"title":3198,"titles":18456,"content":4031,"level":136},"/v1.0.4/reference/operators#frame-bounds",[3929],{"id":18458,"title":4034,"titles":18459,"content":4036,"level":136},"/v1.0.4/reference/operators#cast-types",[3929],{"id":18461,"title":1614,"titles":18462,"content":2581,"level":107},"/v1.0.5/overview",[],{"id":18464,"title":1614,"titles":18465,"content":14309,"level":107},"/v1.0.5/overview#overview",[],{"id":18467,"title":1237,"titles":18468,"content":2589,"level":136},"/v1.0.5/overview#architecture",[1614],{"id":18470,"title":2592,"titles":18471,"content":2594,"level":136},"/v1.0.5/overview#philosophy",[1614],{"id":18473,"title":1187,"titles":18474,"content":2598,"level":136},"/v1.0.5/overview#capabilities",[1614],{"id":18476,"title":2601,"titles":18477,"content":99,"level":136},"/v1.0.5/overview#priorities",[1614],{"id":18479,"title":1782,"titles":18480,"content":2606,"level":155},"/v1.0.5/overview#security",[1614,2601],{"id":18482,"title":2609,"titles":18483,"content":6026,"level":155},"/v1.0.5/overview#ergonomics",[1614,2601],{"id":18485,"title":5002,"titles":18486,"content":14331,"level":155},"/v1.0.5/overview#multi-provider-architecture",[1614,2601],{"id":18488,"title":1628,"titles":18489,"content":2620,"level":107},"/v1.0.5/learn/quickstart",[],{"id":18491,"title":1628,"titles":18492,"content":99,"level":107},"/v1.0.5/learn/quickstart#quickstart",[],{"id":18494,"title":2626,"titles":18495,"content":6040,"level":136},"/v1.0.5/learn/quickstart#requirements",[1628],{"id":18497,"title":2631,"titles":18498,"content":2633,"level":136},"/v1.0.5/learn/quickstart#installation",[1628],{"id":18500,"title":2636,"titles":18501,"content":14347,"level":136},"/v1.0.5/learn/quickstart#basic-usage",[1628],{"id":18503,"title":2641,"titles":18504,"content":6051,"level":136},"/v1.0.5/learn/quickstart#whats-happening",[1628],{"id":18506,"title":2646,"titles":18507,"content":6055,"level":136},"/v1.0.5/learn/quickstart#using-with-sqlx",[1628],{"id":18509,"title":2651,"titles":18510,"content":2653,"level":107},"/v1.0.5/learn/concepts",[],{"id":18512,"title":2651,"titles":18513,"content":2657,"level":107},"/v1.0.5/learn/concepts#core-concepts",[],{"id":18515,"title":2660,"titles":18516,"content":2662,"level":136},"/v1.0.5/learn/concepts#tables",[2651],{"id":18518,"title":2665,"titles":18519,"content":2667,"level":136},"/v1.0.5/learn/concepts#fields",[2651],{"id":18521,"title":2670,"titles":18522,"content":2672,"level":155},"/v1.0.5/learn/concepts#field-validation",[2651,2665],{"id":18524,"title":2675,"titles":18525,"content":2677,"level":136},"/v1.0.5/learn/concepts#params",[2651],{"id":18527,"title":2680,"titles":18528,"content":2682,"level":155},"/v1.0.5/learn/concepts#parameter-validation",[2651,2675],{"id":18530,"title":1251,"titles":18531,"content":2686,"level":136},"/v1.0.5/learn/concepts#conditions",[2651],{"id":18533,"title":1727,"titles":18534,"content":2690,"level":155},"/v1.0.5/learn/concepts#operators",[2651,1251],{"id":18536,"title":2693,"titles":18537,"content":2695,"level":155},"/v1.0.5/learn/concepts#combining-conditions",[2651,1251],{"id":18539,"title":2698,"titles":18540,"content":2700,"level":155},"/v1.0.5/learn/concepts#nested-conditions",[2651,1251],{"id":18542,"title":2703,"titles":18543,"content":2705,"level":155},"/v1.0.5/learn/concepts#null-conditions",[2651,1251],{"id":18545,"title":2708,"titles":18546,"content":2710,"level":155},"/v1.0.5/learn/concepts#field-comparisons",[2651,1251],{"id":18548,"title":2713,"titles":18549,"content":2715,"level":136},"/v1.0.5/learn/concepts#builders",[2651],{"id":18551,"title":2718,"titles":18552,"content":6101,"level":155},"/v1.0.5/learn/concepts#fluent-api",[2651,2713],{"id":18554,"title":2723,"titles":18555,"content":6105,"level":155},"/v1.0.5/learn/concepts#build-vs-render",[2651,2713],{"id":18557,"title":2728,"titles":18558,"content":6109,"level":155},"/v1.0.5/learn/concepts#must-variants",[2651,2713],{"id":18560,"title":2733,"titles":18561,"content":2735,"level":136},"/v1.0.5/learn/concepts#try-variants",[2651],{"id":18563,"title":2738,"titles":18564,"content":2740,"level":136},"/v1.0.5/learn/concepts#query-result",[2651],{"id":18566,"title":1237,"titles":18567,"content":2744,"level":107},"/v1.0.5/learn/architecture",[],{"id":18569,"title":1237,"titles":18570,"content":2748,"level":107},"/v1.0.5/learn/architecture#architecture",[],{"id":18572,"title":2751,"titles":18573,"content":2753,"level":136},"/v1.0.5/learn/architecture#pipeline-overview",[1237],{"id":18575,"title":2756,"titles":18576,"content":99,"level":136},"/v1.0.5/learn/architecture#validation-layer",[1237],{"id":18578,"title":1215,"titles":18579,"content":2761,"level":155},"/v1.0.5/learn/architecture#schema-validation",[1237,2756],{"id":18581,"title":2764,"titles":18582,"content":2766,"level":155},"/v1.0.5/learn/architecture#identifier-validation",[1237,2756],{"id":18584,"title":2769,"titles":18585,"content":2771,"level":155},"/v1.0.5/learn/architecture#alias-restrictions",[1237,2756],{"id":18587,"title":2774,"titles":18588,"content":5107,"level":136},"/v1.0.5/learn/architecture#ast-structure",[1237],{"id":18590,"title":2779,"titles":18591,"content":2781,"level":155},"/v1.0.5/learn/architecture#internal-types",[1237,2774],{"id":18593,"title":2784,"titles":18594,"content":2786,"level":155},"/v1.0.5/learn/architecture#condition-types",[1237,2774],{"id":18596,"title":2789,"titles":18597,"content":2791,"level":136},"/v1.0.5/learn/architecture#render-engine",[1237],{"id":18599,"title":2794,"titles":18600,"content":2796,"level":155},"/v1.0.5/learn/architecture#identifier-quoting",[1237,2789],{"id":18602,"title":2799,"titles":18603,"content":2801,"level":155},"/v1.0.5/learn/architecture#parameter-placeholders",[1237,2789],{"id":18605,"title":2804,"titles":18606,"content":2806,"level":155},"/v1.0.5/learn/architecture#parameter-namespacing",[1237,2789],{"id":18608,"title":5128,"titles":18609,"content":12390,"level":136},"/v1.0.5/learn/architecture#provider-architecture",[1237],{"id":18611,"title":5133,"titles":18612,"content":14459,"level":155},"/v1.0.5/learn/architecture#available-providers",[1237,5128],{"id":18614,"title":3341,"titles":18615,"content":14463,"level":155},"/v1.0.5/learn/architecture#usage",[1237,5128],{"id":18617,"title":5142,"titles":18618,"content":11369,"level":155},"/v1.0.5/learn/architecture#dialect-differences",[1237,5128],{"id":18620,"title":2809,"titles":18621,"content":11373,"level":136},"/v1.0.5/learn/architecture#file-structure",[1237],{"id":18623,"title":2814,"titles":18624,"content":2816,"level":136},"/v1.0.5/learn/architecture#security-layers",[1237],{"id":18626,"title":2819,"titles":18627,"content":99,"level":136},"/v1.0.5/learn/architecture#extension-points",[1237],{"id":18629,"title":2823,"titles":18630,"content":2825,"level":155},"/v1.0.5/learn/architecture#custom-expressions",[1237,2819],{"id":18632,"title":2828,"titles":18633,"content":2830,"level":155},"/v1.0.5/learn/architecture#compound-queries",[1237,2819],{"id":18635,"title":2833,"titles":18636,"content":6191,"level":155},"/v1.0.5/learn/architecture#direct-ast-access",[1237,2819],{"id":18638,"title":1215,"titles":18639,"content":2839,"level":107},"/v1.0.5/guides/schema-validation",[],{"id":18641,"title":1215,"titles":18642,"content":2843,"level":107},"/v1.0.5/guides/schema-validation#schema-validation",[],{"id":18644,"title":2846,"titles":18645,"content":2848,"level":136},"/v1.0.5/guides/schema-validation#defining-a-schema",[1215],{"id":18647,"title":2851,"titles":18648,"content":2853,"level":136},"/v1.0.5/guides/schema-validation#creating-an-instance",[1215],{"id":18650,"title":2856,"titles":18651,"content":99,"level":136},"/v1.0.5/guides/schema-validation#validation-behavior",[1215],{"id":18653,"title":2860,"titles":18654,"content":2862,"level":155},"/v1.0.5/guides/schema-validation#table-validation",[1215,2856],{"id":18656,"title":2670,"titles":18657,"content":2866,"level":155},"/v1.0.5/guides/schema-validation#field-validation",[1215,2856],{"id":18659,"title":2680,"titles":18660,"content":2870,"level":155},"/v1.0.5/guides/schema-validation#parameter-validation",[1215,2856],{"id":18662,"title":2873,"titles":18663,"content":2875,"level":136},"/v1.0.5/guides/schema-validation#panic-vs-error",[1215],{"id":18665,"title":2733,"titles":18666,"content":2879,"level":155},"/v1.0.5/guides/schema-validation#try-variants",[1215,2873],{"id":18668,"title":2882,"titles":18669,"content":2884,"level":155},"/v1.0.5/guides/schema-validation#when-to-use-each",[1215,2873],{"id":18671,"title":2887,"titles":18672,"content":2889,"level":136},"/v1.0.5/guides/schema-validation#table-aliases",[1215],{"id":18674,"title":2769,"titles":18675,"content":2893,"level":155},"/v1.0.5/guides/schema-validation#alias-restrictions",[1215,2887],{"id":18677,"title":2896,"titles":18678,"content":2898,"level":155},"/v1.0.5/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":18680,"title":2901,"titles":18681,"content":99,"level":136},"/v1.0.5/guides/schema-validation#schema-organization",[1215],{"id":18683,"title":2905,"titles":18684,"content":6240,"level":155},"/v1.0.5/guides/schema-validation#single-schema-instance",[1215,2901],{"id":18686,"title":2910,"titles":18687,"content":2912,"level":155},"/v1.0.5/guides/schema-validation#multiple-schemas",[1215,2901],{"id":18689,"title":2915,"titles":18690,"content":99,"level":136},"/v1.0.5/guides/schema-validation#dynamic-queries",[1215],{"id":18692,"title":2919,"titles":18693,"content":6250,"level":155},"/v1.0.5/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":18695,"title":2924,"titles":18696,"content":2926,"level":155},"/v1.0.5/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":18698,"title":2929,"titles":18699,"content":99,"level":136},"/v1.0.5/guides/schema-validation#validation-errors",[1215],{"id":18701,"title":2933,"titles":18702,"content":2935,"level":155},"/v1.0.5/guides/schema-validation#error-types",[1215,2929],{"id":18704,"title":2938,"titles":18705,"content":6263,"level":155},"/v1.0.5/guides/schema-validation#handling-errors",[1215,2929],{"id":18707,"title":1251,"titles":18708,"content":2944,"level":107},"/v1.0.5/guides/conditions",[],{"id":18710,"title":1251,"titles":18711,"content":2948,"level":107},"/v1.0.5/guides/conditions#conditions",[],{"id":18713,"title":2951,"titles":18714,"content":2953,"level":136},"/v1.0.5/guides/conditions#basic-conditions",[1251],{"id":18716,"title":1727,"titles":18717,"content":99,"level":136},"/v1.0.5/guides/conditions#operators",[1251],{"id":18719,"title":2959,"titles":18720,"content":2961,"level":155},"/v1.0.5/guides/conditions#comparison-operators",[1251,1727],{"id":18722,"title":2964,"titles":18723,"content":2966,"level":155},"/v1.0.5/guides/conditions#pattern-matching",[1251,1727],{"id":18725,"title":2969,"titles":18726,"content":2971,"level":155},"/v1.0.5/guides/conditions#null-checks",[1251,1727],{"id":18728,"title":2974,"titles":18729,"content":2976,"level":155},"/v1.0.5/guides/conditions#array-operators",[1251,1727],{"id":18731,"title":2693,"titles":18732,"content":99,"level":136},"/v1.0.5/guides/conditions#combining-conditions",[1251],{"id":18734,"title":2982,"titles":18735,"content":2984,"level":155},"/v1.0.5/guides/conditions#and",[1251,2693],{"id":18737,"title":2987,"titles":18738,"content":2989,"level":155},"/v1.0.5/guides/conditions#or",[1251,2693],{"id":18740,"title":2992,"titles":18741,"content":2994,"level":155},"/v1.0.5/guides/conditions#nested-logic",[1251,2693],{"id":18743,"title":2997,"titles":18744,"content":2999,"level":136},"/v1.0.5/guides/conditions#between",[1251],{"id":18746,"title":2708,"titles":18747,"content":3003,"level":136},"/v1.0.5/guides/conditions#field-comparisons",[1251],{"id":18749,"title":3006,"titles":18750,"content":99,"level":136},"/v1.0.5/guides/conditions#subqueries",[1251],{"id":18752,"title":3010,"titles":18753,"content":3012,"level":155},"/v1.0.5/guides/conditions#in-subquery",[1251,3006],{"id":18755,"title":3015,"titles":18756,"content":3017,"level":155},"/v1.0.5/guides/conditions#not-in-subquery",[1251,3006],{"id":18758,"title":3020,"titles":18759,"content":3022,"level":155},"/v1.0.5/guides/conditions#exists",[1251,3006],{"id":18761,"title":3025,"titles":18762,"content":3027,"level":155},"/v1.0.5/guides/conditions#not-exists",[1251,3006],{"id":18764,"title":2804,"titles":18765,"content":3031,"level":155},"/v1.0.5/guides/conditions#parameter-namespacing",[1251,3006],{"id":18767,"title":3034,"titles":18768,"content":3036,"level":136},"/v1.0.5/guides/conditions#multiple-where-clauses",[1251],{"id":18770,"title":3039,"titles":18771,"content":3041,"level":136},"/v1.0.5/guides/conditions#wherefield-shorthand",[1251],{"id":18773,"title":3044,"titles":18774,"content":3046,"level":136},"/v1.0.5/guides/conditions#building-conditions-dynamically",[1251],{"id":18776,"title":1265,"titles":18777,"content":3050,"level":107},"/v1.0.5/guides/joins",[],{"id":18779,"title":1265,"titles":18780,"content":3054,"level":107},"/v1.0.5/guides/joins#joins",[],{"id":18782,"title":3057,"titles":18783,"content":3059,"level":136},"/v1.0.5/guides/joins#join-types",[1265],{"id":18785,"title":3062,"titles":18786,"content":3064,"level":136},"/v1.0.5/guides/joins#basic-join",[1265],{"id":18788,"title":2887,"titles":18789,"content":3068,"level":136},"/v1.0.5/guides/joins#table-aliases",[1265],{"id":18791,"title":3071,"titles":18792,"content":3073,"level":136},"/v1.0.5/guides/joins#left-join",[1265],{"id":18794,"title":3076,"titles":18795,"content":3078,"level":136},"/v1.0.5/guides/joins#right-join",[1265],{"id":18797,"title":3081,"titles":18798,"content":3083,"level":136},"/v1.0.5/guides/joins#full-outer-join",[1265],{"id":18800,"title":3086,"titles":18801,"content":3088,"level":136},"/v1.0.5/guides/joins#cross-join",[1265],{"id":18803,"title":3091,"titles":18804,"content":3093,"level":136},"/v1.0.5/guides/joins#multiple-joins",[1265],{"id":18806,"title":3096,"titles":18807,"content":3098,"level":136},"/v1.0.5/guides/joins#complex-on-conditions",[1265],{"id":18809,"title":3101,"titles":18810,"content":3103,"level":136},"/v1.0.5/guides/joins#self-joins",[1265],{"id":18812,"title":3106,"titles":18813,"content":3108,"level":136},"/v1.0.5/guides/joins#joins-with-count",[1265],{"id":18815,"title":3111,"titles":18816,"content":3113,"level":136},"/v1.0.5/guides/joins#join-validation",[1265],{"id":18818,"title":1668,"titles":18819,"content":3117,"level":107},"/v1.0.5/guides/aggregates",[],{"id":18821,"title":1668,"titles":18822,"content":3121,"level":107},"/v1.0.5/guides/aggregates#aggregates",[],{"id":18824,"title":3124,"titles":18825,"content":99,"level":136},"/v1.0.5/guides/aggregates#aggregate-functions",[1668],{"id":18827,"title":3128,"titles":18828,"content":3130,"level":155},"/v1.0.5/guides/aggregates#basic-aggregates",[1668,3124],{"id":18830,"title":3133,"titles":18831,"content":3135,"level":155},"/v1.0.5/guides/aggregates#using-aggregates",[1668,3124],{"id":18833,"title":3138,"titles":18834,"content":3140,"level":155},"/v1.0.5/guides/aggregates#aliases",[1668,3124],{"id":18836,"title":3143,"titles":18837,"content":3145,"level":136},"/v1.0.5/guides/aggregates#group-by",[1668],{"id":18839,"title":3148,"titles":18840,"content":3150,"level":136},"/v1.0.5/guides/aggregates#having",[1668],{"id":18842,"title":3153,"titles":18843,"content":3155,"level":155},"/v1.0.5/guides/aggregates#simple-having",[1668,3148],{"id":18845,"title":3158,"titles":18846,"content":3160,"level":155},"/v1.0.5/guides/aggregates#aggregate-having",[1668,3148],{"id":18848,"title":3163,"titles":18849,"content":3165,"level":155},"/v1.0.5/guides/aggregates#having-helpers",[1668,3148],{"id":18851,"title":3168,"titles":18852,"content":3170,"level":136},"/v1.0.5/guides/aggregates#filter-clause",[1668],{"id":18854,"title":3173,"titles":18855,"content":3175,"level":136},"/v1.0.5/guides/aggregates#window-functions",[1668],{"id":18857,"title":3178,"titles":18858,"content":3180,"level":155},"/v1.0.5/guides/aggregates#basic-window-functions",[1668,3173],{"id":18860,"title":3183,"titles":18861,"content":3185,"level":155},"/v1.0.5/guides/aggregates#window-function-types",[1668,3173],{"id":18863,"title":3188,"titles":18864,"content":3190,"level":155},"/v1.0.5/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":18866,"title":3193,"titles":18867,"content":3195,"level":155},"/v1.0.5/guides/aggregates#window-specification",[1668,3173],{"id":18869,"title":3198,"titles":18870,"content":3200,"level":155},"/v1.0.5/guides/aggregates#frame-bounds",[1668,3173],{"id":18872,"title":3203,"titles":18873,"content":99,"level":136},"/v1.0.5/guides/aggregates#math-functions",[1668],{"id":18875,"title":3207,"titles":18876,"content":3209,"level":155},"/v1.0.5/guides/aggregates#available-functions",[1668,3203],{"id":18878,"title":3212,"titles":18879,"content":3214,"level":155},"/v1.0.5/guides/aggregates#example",[1668,3203],{"id":18881,"title":1270,"titles":18882,"content":3218,"level":136},"/v1.0.5/guides/aggregates#case-expressions",[1668],{"id":18884,"title":3221,"titles":18885,"content":3223,"level":136},"/v1.0.5/guides/aggregates#type-casting",[1668],{"id":18887,"title":3226,"titles":18888,"content":3228,"level":136},"/v1.0.5/guides/aggregates#coalesce-and-nullif",[1668],{"id":18890,"title":1675,"titles":18891,"content":3232,"level":107},"/v1.0.5/guides/testing",[],{"id":18893,"title":1675,"titles":18894,"content":3236,"level":107},"/v1.0.5/guides/testing#testing",[],{"id":18896,"title":3239,"titles":18897,"content":99,"level":136},"/v1.0.5/guides/testing#testing-query-output",[1675],{"id":18899,"title":3243,"titles":18900,"content":6459,"level":155},"/v1.0.5/guides/testing#basic-output-testing",[1675,3239],{"id":18902,"title":3248,"titles":18903,"content":3250,"level":155},"/v1.0.5/guides/testing#test-instance-setup",[1675,3239],{"id":18905,"title":3253,"titles":18906,"content":99,"level":136},"/v1.0.5/guides/testing#table-driven-tests",[1675],{"id":18908,"title":3257,"titles":18909,"content":6469,"level":155},"/v1.0.5/guides/testing#testing-multiple-queries",[1675,3253],{"id":18911,"title":3262,"titles":18912,"content":99,"level":136},"/v1.0.5/guides/testing#testing-validation",[1675],{"id":18914,"title":3266,"titles":18915,"content":3268,"level":155},"/v1.0.5/guides/testing#testing-invalid-input",[1675,3262],{"id":18917,"title":3271,"titles":18918,"content":3273,"level":155},"/v1.0.5/guides/testing#testing-try-variants",[1675,3262],{"id":18920,"title":3276,"titles":18921,"content":99,"level":136},"/v1.0.5/guides/testing#testing-error-cases",[1675],{"id":18923,"title":3280,"titles":18924,"content":6485,"level":155},"/v1.0.5/guides/testing#builder-errors",[1675,3276],{"id":18926,"title":3285,"titles":18927,"content":99,"level":136},"/v1.0.5/guides/testing#testing-complex-queries",[1675],{"id":18929,"title":3289,"titles":18930,"content":6492,"level":155},"/v1.0.5/guides/testing#join-tests",[1675,3285],{"id":18932,"title":3294,"titles":18933,"content":6496,"level":155},"/v1.0.5/guides/testing#subquery-tests",[1675,3285],{"id":18935,"title":3299,"titles":18936,"content":3301,"level":136},"/v1.0.5/guides/testing#snapshot-testing",[1675],{"id":18938,"title":3304,"titles":18939,"content":99,"level":136},"/v1.0.5/guides/testing#best-practices",[1675],{"id":18941,"title":3308,"titles":18942,"content":3310,"level":155},"/v1.0.5/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":18944,"title":3313,"titles":18945,"content":3315,"level":155},"/v1.0.5/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":18947,"title":3318,"titles":18948,"content":3320,"level":155},"/v1.0.5/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":18950,"title":3323,"titles":18951,"content":6515,"level":155},"/v1.0.5/guides/testing#_4-test-edge-cases",[1675,3304],{"id":18953,"title":1688,"titles":18954,"content":3329,"level":107},"/v1.0.5/cookbook/pagination",[],{"id":18956,"title":1688,"titles":18957,"content":3333,"level":107},"/v1.0.5/cookbook/pagination#pagination",[],{"id":18959,"title":3336,"titles":18960,"content":6525,"level":136},"/v1.0.5/cookbook/pagination#offset-pagination",[1688],{"id":18962,"title":3341,"titles":18963,"content":3343,"level":155},"/v1.0.5/cookbook/pagination#usage",[1688,3336],{"id":18965,"title":3346,"titles":18966,"content":6532,"level":155},"/v1.0.5/cookbook/pagination#with-total-count",[1688,3336],{"id":18968,"title":3351,"titles":18969,"content":3353,"level":155},"/v1.0.5/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":18971,"title":3356,"titles":18972,"content":6539,"level":136},"/v1.0.5/cookbook/pagination#cursor-pagination",[1688],{"id":18974,"title":3341,"titles":18975,"content":3362,"level":155},"/v1.0.5/cookbook/pagination#usage-1",[1688,3356],{"id":18977,"title":3365,"titles":18978,"content":6546,"level":155},"/v1.0.5/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":18980,"title":3370,"titles":18981,"content":6550,"level":155},"/v1.0.5/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":18983,"title":3375,"titles":18984,"content":6554,"level":136},"/v1.0.5/cookbook/pagination#filtering-with-pagination",[1688],{"id":18986,"title":3380,"titles":18987,"content":6558,"level":136},"/v1.0.5/cookbook/pagination#pagination-with-joins",[1688],{"id":18989,"title":3304,"titles":18990,"content":99,"level":136},"/v1.0.5/cookbook/pagination#best-practices",[1688],{"id":18992,"title":3388,"titles":18993,"content":6565,"level":155},"/v1.0.5/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":18995,"title":3393,"titles":18996,"content":3395,"level":155},"/v1.0.5/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":18998,"title":3398,"titles":18999,"content":3400,"level":155},"/v1.0.5/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":19001,"title":3403,"titles":19002,"content":3405,"level":155},"/v1.0.5/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":19004,"title":1695,"titles":19005,"content":3409,"level":107},"/v1.0.5/cookbook/vector-search",[],{"id":19007,"title":1695,"titles":19008,"content":3413,"level":107},"/v1.0.5/cookbook/vector-search#vector-search",[],{"id":19010,"title":3416,"titles":19011,"content":3418,"level":136},"/v1.0.5/cookbook/vector-search#schema-setup",[1695],{"id":19013,"title":3421,"titles":19014,"content":3423,"level":136},"/v1.0.5/cookbook/vector-search#distance-operators",[1695],{"id":19016,"title":3426,"titles":19017,"content":3428,"level":136},"/v1.0.5/cookbook/vector-search#basic-similarity-search",[1695],{"id":19019,"title":3431,"titles":19020,"content":3433,"level":155},"/v1.0.5/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":19022,"title":17962,"titles":19023,"content":19024,"level":136},"/v1.0.5/cookbook/vector-search#selecting-distance-as-a-column",[1695],"Use SelectBinaryExpr to include the computed distance in your results: func SearchWithDistance(instance *astql.ASTQL, limit int) (*astql.QueryResult, error) {\n    return astql.Select(instance.T(\"documents\")).\n        Fields(\n            instance.F(\"id\"),\n            instance.F(\"title\"),\n            instance.F(\"content\"),\n        ).\n        SelectBinaryExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            \"distance\",\n        ).\n        OrderByExpr(\n            instance.F(\"embedding\"),\n            astql.VectorL2Distance,\n            instance.P(\"query_embedding\"),\n            astql.ASC,\n        ).\n        Limit(limit).\n        Render()\n}\n\n// SELECT \"id\", \"title\", \"content\", \"embedding\" \u003C-> :query_embedding AS \"distance\"\n// FROM \"documents\"\n// ORDER BY \"embedding\" \u003C-> :query_embedding ASC\n// LIMIT 10 This is useful when you need to display or filter by the actual distance value.",{"id":19026,"title":3436,"titles":19027,"content":3438,"level":136},"/v1.0.5/cookbook/vector-search#cosine-similarity",[1695],{"id":19029,"title":3441,"titles":19030,"content":3443,"level":136},"/v1.0.5/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":19032,"title":3446,"titles":19033,"content":3448,"level":136},"/v1.0.5/cookbook/vector-search#filtered-vector-search",[1695],{"id":19035,"title":3451,"titles":19036,"content":3453,"level":136},"/v1.0.5/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":19038,"title":3456,"titles":19039,"content":3458,"level":136},"/v1.0.5/cookbook/vector-search#hybrid-search",[1695],{"id":19041,"title":3461,"titles":19042,"content":3463,"level":136},"/v1.0.5/cookbook/vector-search#multi-vector-search",[1695],{"id":19044,"title":3466,"titles":19045,"content":3468,"level":136},"/v1.0.5/cookbook/vector-search#indexing-recommendations",[1695],{"id":19047,"title":3304,"titles":19048,"content":99,"level":136},"/v1.0.5/cookbook/vector-search#best-practices",[1695],{"id":19050,"title":3474,"titles":19051,"content":3476,"level":155},"/v1.0.5/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":19053,"title":3479,"titles":19054,"content":3481,"level":155},"/v1.0.5/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":19056,"title":3484,"titles":19057,"content":3486,"level":155},"/v1.0.5/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":19059,"title":1702,"titles":19060,"content":3490,"level":107},"/v1.0.5/cookbook/upserts",[],{"id":19062,"title":1702,"titles":19063,"content":3494,"level":107},"/v1.0.5/cookbook/upserts#upserts",[],{"id":19065,"title":3497,"titles":19066,"content":6635,"level":136},"/v1.0.5/cookbook/upserts#basic-upsert",[1702],{"id":19068,"title":3502,"titles":19069,"content":6639,"level":136},"/v1.0.5/cookbook/upserts#do-nothing",[1702],{"id":19071,"title":3507,"titles":19072,"content":6643,"level":136},"/v1.0.5/cookbook/upserts#multi-column-conflict",[1702],{"id":19074,"title":3512,"titles":19075,"content":6647,"level":136},"/v1.0.5/cookbook/upserts#returning-with-upsert",[1702],{"id":19077,"title":3517,"titles":19078,"content":6651,"level":136},"/v1.0.5/cookbook/upserts#batch-upsert",[1702],{"id":19080,"title":3522,"titles":19081,"content":6655,"level":136},"/v1.0.5/cookbook/upserts#conditional-upsert",[1702],{"id":19083,"title":3527,"titles":19084,"content":6659,"level":136},"/v1.0.5/cookbook/upserts#sync-pattern",[1702],{"id":19086,"title":3532,"titles":19087,"content":6663,"level":136},"/v1.0.5/cookbook/upserts#upsert-with-timestamps",[1702],{"id":19089,"title":3304,"titles":19090,"content":99,"level":136},"/v1.0.5/cookbook/upserts#best-practices",[1702],{"id":19092,"title":3540,"titles":19093,"content":3542,"level":155},"/v1.0.5/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":19095,"title":3545,"titles":19096,"content":3547,"level":155},"/v1.0.5/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":19098,"title":3550,"titles":19099,"content":3552,"level":155},"/v1.0.5/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":19101,"title":3555,"titles":19102,"content":3557,"level":155},"/v1.0.5/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":19104,"title":1709,"titles":19105,"content":6682,"level":107},"/v1.0.5/cookbook/orm-foundation",[],{"id":19107,"title":1709,"titles":19108,"content":6686,"level":107},"/v1.0.5/cookbook/orm-foundation#orm-foundation",[],{"id":19110,"title":6689,"titles":19111,"content":6691,"level":136},"/v1.0.5/cookbook/orm-foundation#the-result",[1709],{"id":19113,"title":6694,"titles":19114,"content":6696,"level":136},"/v1.0.5/cookbook/orm-foundation#the-architecture",[1709],{"id":19116,"title":6699,"titles":19117,"content":6701,"level":136},"/v1.0.5/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":19119,"title":6704,"titles":19120,"content":6706,"level":155},"/v1.0.5/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":19122,"title":6709,"titles":19123,"content":6711,"level":155},"/v1.0.5/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":19125,"title":6714,"titles":19126,"content":6716,"level":155},"/v1.0.5/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":19128,"title":6719,"titles":19129,"content":6721,"level":155},"/v1.0.5/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":19131,"title":6724,"titles":19132,"content":6726,"level":136},"/v1.0.5/cookbook/orm-foundation#the-security-model",[1709],{"id":19134,"title":6729,"titles":19135,"content":6731,"level":136},"/v1.0.5/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":19137,"title":6734,"titles":19138,"content":6736,"level":136},"/v1.0.5/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":19140,"title":6739,"titles":19141,"content":6741,"level":155},"/v1.0.5/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":19143,"title":6744,"titles":19144,"content":6746,"level":155},"/v1.0.5/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":19146,"title":6749,"titles":19147,"content":6751,"level":155},"/v1.0.5/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":19149,"title":6754,"titles":19150,"content":6756,"level":155},"/v1.0.5/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":19152,"title":6759,"titles":19153,"content":6761,"level":136},"/v1.0.5/cookbook/orm-foundation#see-also",[1709],{"id":19155,"title":3560,"titles":19156,"content":3562,"level":107},"/v1.0.5/reference/api",[],{"id":19158,"title":3560,"titles":19159,"content":3566,"level":107},"/v1.0.5/reference/api#api-reference",[],{"id":19161,"title":3569,"titles":19162,"content":99,"level":136},"/v1.0.5/reference/api#instance-creation",[3560],{"id":19164,"title":856,"titles":19165,"content":3574,"level":155},"/v1.0.5/reference/api#newfromdbml",[3560,3569],{"id":19167,"title":3577,"titles":19168,"content":99,"level":136},"/v1.0.5/reference/api#instance-methods",[3560],{"id":19170,"title":119,"titles":19171,"content":3582,"level":155},"/v1.0.5/reference/api#t",[3560,3577],{"id":19173,"title":3585,"titles":19174,"content":3587,"level":155},"/v1.0.5/reference/api#tryt",[3560,3577],{"id":19176,"title":169,"titles":19177,"content":3591,"level":155},"/v1.0.5/reference/api#f",[3560,3577],{"id":19179,"title":3594,"titles":19180,"content":3596,"level":155},"/v1.0.5/reference/api#tryf",[3560,3577],{"id":19182,"title":316,"titles":19183,"content":3600,"level":155},"/v1.0.5/reference/api#p",[3560,3577],{"id":19185,"title":3603,"titles":19186,"content":3605,"level":155},"/v1.0.5/reference/api#tryp",[3560,3577],{"id":19188,"title":284,"titles":19189,"content":3609,"level":155},"/v1.0.5/reference/api#c",[3560,3577],{"id":19191,"title":3612,"titles":19192,"content":3614,"level":155},"/v1.0.5/reference/api#tryc",[3560,3577],{"id":19194,"title":3617,"titles":19195,"content":3619,"level":155},"/v1.0.5/reference/api#and",[3560,3577],{"id":19197,"title":3622,"titles":19198,"content":3624,"level":155},"/v1.0.5/reference/api#or",[3560,3577],{"id":19200,"title":3627,"titles":19201,"content":3629,"level":155},"/v1.0.5/reference/api#null",[3560,3577],{"id":19203,"title":3632,"titles":19204,"content":3634,"level":155},"/v1.0.5/reference/api#notnull",[3560,3577],{"id":19206,"title":3637,"titles":19207,"content":3639,"level":155},"/v1.0.5/reference/api#withtable",[3560,3577],{"id":19209,"title":3642,"titles":19210,"content":3644,"level":155},"/v1.0.5/reference/api#trywithtable",[3560,3577],{"id":19212,"title":3647,"titles":19213,"content":3649,"level":155},"/v1.0.5/reference/api#aggc",[3560,3577],{"id":19215,"title":3652,"titles":19216,"content":3654,"level":155},"/v1.0.5/reference/api#tryaggc",[3560,3577],{"id":19218,"title":3657,"titles":19219,"content":3659,"level":155},"/v1.0.5/reference/api#valuemap",[3560,3577],{"id":19221,"title":18162,"titles":19222,"content":18164,"level":155},"/v1.0.5/reference/api#jsonbtext",[3560,3577],{"id":19224,"title":18167,"titles":19225,"content":18169,"level":155},"/v1.0.5/reference/api#jsonbpath",[3560,3577],{"id":19227,"title":3662,"titles":19228,"content":99,"level":136},"/v1.0.5/reference/api#query-builders",[3560],{"id":19230,"title":219,"titles":19231,"content":3667,"level":155},"/v1.0.5/reference/api#select",[3560,3662],{"id":19233,"title":3670,"titles":19234,"content":3672,"level":155},"/v1.0.5/reference/api#insert",[3560,3662],{"id":19236,"title":3675,"titles":19237,"content":3677,"level":155},"/v1.0.5/reference/api#update",[3560,3662],{"id":19239,"title":3680,"titles":19240,"content":3682,"level":155},"/v1.0.5/reference/api#delete",[3560,3662],{"id":19242,"title":3685,"titles":19243,"content":3687,"level":155},"/v1.0.5/reference/api#count",[3560,3662],{"id":19245,"title":3690,"titles":19246,"content":99,"level":136},"/v1.0.5/reference/api#builder-methods",[3560],{"id":19248,"title":2665,"titles":19249,"content":3695,"level":155},"/v1.0.5/reference/api#fields",[3560,3690],{"id":19251,"title":3698,"titles":19252,"content":3700,"level":155},"/v1.0.5/reference/api#where",[3560,3690],{"id":19254,"title":3703,"titles":19255,"content":3705,"level":155},"/v1.0.5/reference/api#wherefield",[3560,3690],{"id":19257,"title":3708,"titles":19258,"content":3710,"level":155},"/v1.0.5/reference/api#orderby",[3560,3690],{"id":19260,"title":3713,"titles":19261,"content":3715,"level":155},"/v1.0.5/reference/api#orderbynulls",[3560,3690],{"id":19263,"title":3718,"titles":19264,"content":3720,"level":155},"/v1.0.5/reference/api#orderbyexpr",[3560,3690],{"id":19266,"title":3723,"titles":19267,"content":5734,"level":155},"/v1.0.5/reference/api#limit",[3560,3690],{"id":19269,"title":5737,"titles":19270,"content":5739,"level":155},"/v1.0.5/reference/api#limitparam",[3560,3690],{"id":19272,"title":3728,"titles":19273,"content":5743,"level":155},"/v1.0.5/reference/api#offset",[3560,3690],{"id":19275,"title":5746,"titles":19276,"content":5748,"level":155},"/v1.0.5/reference/api#offsetparam",[3560,3690],{"id":19278,"title":3733,"titles":19279,"content":3735,"level":155},"/v1.0.5/reference/api#set",[3560,3690],{"id":19281,"title":3738,"titles":19282,"content":3740,"level":155},"/v1.0.5/reference/api#values",[3560,3690],{"id":19284,"title":3743,"titles":19285,"content":3745,"level":155},"/v1.0.5/reference/api#returning",[3560,3690],{"id":19287,"title":3748,"titles":19288,"content":3750,"level":155},"/v1.0.5/reference/api#distinct",[3560,3690],{"id":19290,"title":3753,"titles":19291,"content":3755,"level":155},"/v1.0.5/reference/api#distincton",[3560,3690],{"id":19293,"title":3758,"titles":19294,"content":3760,"level":155},"/v1.0.5/reference/api#groupby",[3560,3690],{"id":19296,"title":3763,"titles":19297,"content":3765,"level":155},"/v1.0.5/reference/api#having",[3560,3690],{"id":19299,"title":3768,"titles":19300,"content":3770,"level":155},"/v1.0.5/reference/api#havingagg",[3560,3690],{"id":19302,"title":3773,"titles":19303,"content":3775,"level":155},"/v1.0.5/reference/api#selectexpr",[3560,3690],{"id":19305,"title":19306,"titles":19307,"content":19308,"level":155},"/v1.0.5/reference/api#selectbinaryexpr","SelectBinaryExpr",[3560,3690],"func (b *Builder) SelectBinaryExpr(f types.Field, op types.Operator, p types.Param, alias string) *Builder Adds a binary expression (field  param) with an alias to SELECT. Useful for vector distance calculations with pgvector. // Returns: \"embedding\" \u003C=> :query_vec AS \"score\"\n.SelectBinaryExpr(instance.F(\"embedding\"), astql.VectorCosineDistance, instance.P(\"query_vec\"), \"score\")",{"id":19310,"title":3778,"titles":19311,"content":3780,"level":155},"/v1.0.5/reference/api#onconflict",[3560,3690],{"id":19313,"title":3783,"titles":19314,"content":3785,"level":155},"/v1.0.5/reference/api#join-methods",[3560,3690],{"id":19316,"title":3788,"titles":19317,"content":3790,"level":155},"/v1.0.5/reference/api#row-locking",[3560,3690],{"id":19319,"title":3793,"titles":19320,"content":3795,"level":155},"/v1.0.5/reference/api#build",[3560,3690],{"id":19322,"title":3798,"titles":19323,"content":3800,"level":155},"/v1.0.5/reference/api#mustbuild",[3560,3690],{"id":19325,"title":350,"titles":19326,"content":6924,"level":155},"/v1.0.5/reference/api#render",[3560,3690],{"id":19328,"title":3807,"titles":19329,"content":6928,"level":155},"/v1.0.5/reference/api#mustrender",[3560,3690],{"id":19331,"title":3812,"titles":19332,"content":99,"level":136},"/v1.0.5/reference/api#set-operations",[3560],{"id":19334,"title":3816,"titles":19335,"content":3818,"level":155},"/v1.0.5/reference/api#union-unionall",[3560,3812],{"id":19337,"title":3821,"titles":19338,"content":3823,"level":155},"/v1.0.5/reference/api#intersect-intersectall",[3560,3812],{"id":19340,"title":3826,"titles":19341,"content":3828,"level":155},"/v1.0.5/reference/api#except-exceptall",[3560,3812],{"id":19343,"title":3831,"titles":19344,"content":6944,"level":136},"/v1.0.5/reference/api#rendering",[3560],{"id":19346,"title":3844,"titles":19347,"content":99,"level":136},"/v1.0.5/reference/api#expression-functions",[3560],{"id":19349,"title":1668,"titles":19350,"content":3849,"level":155},"/v1.0.5/reference/api#aggregates",[3560,3844],{"id":19352,"title":3852,"titles":19353,"content":3854,"level":155},"/v1.0.5/reference/api#filter-aggregates",[3560,3844],{"id":19355,"title":18295,"titles":19356,"content":19357,"level":155},"/v1.0.5/reference/api#binary-expressions",[3560,3844],"func BinaryExpr(field types.Field, op types.Operator, param types.Param) types.FieldExpression Creates a binary expression for field \u003Cop> param patterns. Commonly used with vector distance operators to select computed distances as columns. For selecting binary expressions, prefer the builder method SelectBinaryExpr for cleaner syntax: // Preferred: using SelectBinaryExpr\n.SelectBinaryExpr(instance.F(\"embedding\"), astql.VectorL2Distance, instance.P(\"query\"), \"distance\")\n\n// Alternative: using BinaryExpr with As\n.SelectExpr(astql.As(\n    astql.BinaryExpr(instance.F(\"embedding\"), astql.VectorL2Distance, instance.P(\"query\")),\n    \"distance\",\n))\n\n// Both render: \"embedding\" \u003C-> :query AS \"distance\"",{"id":19359,"title":1251,"titles":19360,"content":3858,"level":155},"/v1.0.5/reference/api#conditions",[3560,3844],{"id":19362,"title":3006,"titles":19363,"content":3862,"level":155},"/v1.0.5/reference/api#subqueries",[3560,3844],{"id":19365,"title":3865,"titles":19366,"content":3867,"level":155},"/v1.0.5/reference/api#case-expression",[3560,3844],{"id":19368,"title":3870,"titles":19369,"content":3872,"level":155},"/v1.0.5/reference/api#null-handling",[3560,3844],{"id":19371,"title":3203,"titles":19372,"content":3876,"level":155},"/v1.0.5/reference/api#math-functions",[3560,3844],{"id":19374,"title":5855,"titles":19375,"content":5857,"level":155},"/v1.0.5/reference/api#string-functions",[3560,3844],{"id":19377,"title":5860,"titles":19378,"content":5862,"level":155},"/v1.0.5/reference/api#date-functions",[3560,3844],{"id":19380,"title":3221,"titles":19381,"content":3880,"level":155},"/v1.0.5/reference/api#type-casting",[3560,3844],{"id":19383,"title":3173,"titles":19384,"content":3884,"level":155},"/v1.0.5/reference/api#window-functions",[3560,3844],{"id":19386,"title":3193,"titles":19387,"content":3888,"level":155},"/v1.0.5/reference/api#window-specification",[3560,3844],{"id":19389,"title":3891,"titles":19390,"content":3893,"level":155},"/v1.0.5/reference/api#windowbuilder-methods",[3560,3844],{"id":19392,"title":3896,"titles":19393,"content":3898,"level":155},"/v1.0.5/reference/api#expression-alias",[3560,3844],{"id":19395,"title":3163,"titles":19396,"content":3902,"level":155},"/v1.0.5/reference/api#having-helpers",[3560,3844],{"id":19398,"title":3905,"titles":19399,"content":99,"level":136},"/v1.0.5/reference/api#types",[3560],{"id":19401,"title":3909,"titles":19402,"content":3911,"level":155},"/v1.0.5/reference/api#queryresult",[3560,3905],{"id":19404,"title":3914,"titles":19405,"content":3916,"level":155},"/v1.0.5/reference/api#direction",[3560,3905],{"id":19407,"title":3919,"titles":19408,"content":3921,"level":155},"/v1.0.5/reference/api#nullsordering",[3560,3905],{"id":19410,"title":3924,"titles":19411,"content":5896,"level":155},"/v1.0.5/reference/api#operation",[3560,3905],{"id":19413,"title":5899,"titles":19414,"content":99,"level":136},"/v1.0.5/reference/api#providers",[3560],{"id":19416,"title":5903,"titles":19417,"content":13180,"level":155},"/v1.0.5/reference/api#renderer-interface",[3560,5899],{"id":19419,"title":1187,"titles":19420,"content":14214,"level":155},"/v1.0.5/reference/api#capabilities",[3560,5899],{"id":19422,"title":5908,"titles":19423,"content":15253,"level":155},"/v1.0.5/reference/api#postgresql-provider",[3560,5899],{"id":19425,"title":5913,"titles":19426,"content":18367,"level":155},"/v1.0.5/reference/api#sqlite-provider",[3560,5899],{"id":19428,"title":12159,"titles":19429,"content":18371,"level":155},"/v1.0.5/reference/api#mariadb-provider",[3560,5899],{"id":19431,"title":5923,"titles":19432,"content":18375,"level":155},"/v1.0.5/reference/api#sql-server-provider",[3560,5899],{"id":19434,"title":3929,"titles":19435,"content":3931,"level":107},"/v1.0.5/reference/operators",[],{"id":19437,"title":3929,"titles":19438,"content":3935,"level":107},"/v1.0.5/reference/operators#operators-reference",[],{"id":19440,"title":2959,"titles":19441,"content":3939,"level":136},"/v1.0.5/reference/operators#comparison-operators",[3929],{"id":19443,"title":3341,"titles":19444,"content":3943,"level":155},"/v1.0.5/reference/operators#usage",[3929,2959],{"id":19446,"title":2964,"titles":19447,"content":3947,"level":136},"/v1.0.5/reference/operators#pattern-matching",[3929],{"id":19449,"title":3341,"titles":19450,"content":3951,"level":155},"/v1.0.5/reference/operators#usage-1",[3929,2964],{"id":19452,"title":3954,"titles":19453,"content":3956,"level":136},"/v1.0.5/reference/operators#null-operators",[3929],{"id":19455,"title":3341,"titles":19456,"content":3960,"level":155},"/v1.0.5/reference/operators#usage-2",[3929,3954],{"id":19458,"title":2974,"titles":19459,"content":3964,"level":136},"/v1.0.5/reference/operators#array-operators",[3929],{"id":19461,"title":3341,"titles":19462,"content":3968,"level":155},"/v1.0.5/reference/operators#usage-3",[3929,2974],{"id":19464,"title":3971,"titles":19465,"content":3973,"level":155},"/v1.0.5/reference/operators#with-sqlx",[3929,2974],{"id":19467,"title":3976,"titles":19468,"content":3978,"level":136},"/v1.0.5/reference/operators#subquery-operators",[3929],{"id":19470,"title":3341,"titles":19471,"content":3982,"level":155},"/v1.0.5/reference/operators#usage-4",[3929,3976],{"id":19473,"title":3985,"titles":19474,"content":3987,"level":136},"/v1.0.5/reference/operators#regex-operators",[3929],{"id":19476,"title":3341,"titles":19477,"content":3991,"level":155},"/v1.0.5/reference/operators#usage-5",[3929,3985],{"id":19479,"title":3994,"titles":19480,"content":3996,"level":136},"/v1.0.5/reference/operators#postgresql-array-operators",[3929],{"id":19482,"title":3341,"titles":19483,"content":4000,"level":155},"/v1.0.5/reference/operators#usage-6",[3929,3994],{"id":19485,"title":18429,"titles":19486,"content":18431,"level":136},"/v1.0.5/reference/operators#jsonb-field-access-postgresql",[3929],{"id":19488,"title":3341,"titles":19489,"content":18435,"level":155},"/v1.0.5/reference/operators#usage-7",[3929,18429],{"id":19491,"title":4003,"titles":19492,"content":4005,"level":136},"/v1.0.5/reference/operators#vector-operators-pgvector",[3929],{"id":19494,"title":3341,"titles":19495,"content":4009,"level":155},"/v1.0.5/reference/operators#usage-8",[3929,4003],{"id":19497,"title":4012,"titles":19498,"content":4014,"level":155},"/v1.0.5/reference/operators#with-pgvector",[3929,4003],{"id":19500,"title":4017,"titles":19501,"content":4019,"level":136},"/v1.0.5/reference/operators#operator-selection-guide",[3929],{"id":19503,"title":3124,"titles":19504,"content":4023,"level":136},"/v1.0.5/reference/operators#aggregate-functions",[3929],{"id":19506,"title":3173,"titles":19507,"content":4027,"level":136},"/v1.0.5/reference/operators#window-functions",[3929],{"id":19509,"title":3198,"titles":19510,"content":4031,"level":136},"/v1.0.5/reference/operators#frame-bounds",[3929],{"id":19512,"title":4034,"titles":19513,"content":4036,"level":136},"/v1.0.5/reference/operators#cast-types",[3929],{"id":19515,"title":1614,"titles":19516,"content":2581,"level":107},"/v1.0.6/overview",[],{"id":19518,"title":1614,"titles":19519,"content":14309,"level":107},"/v1.0.6/overview#overview",[],{"id":19521,"title":1237,"titles":19522,"content":2589,"level":136},"/v1.0.6/overview#architecture",[1614],{"id":19524,"title":2592,"titles":19525,"content":2594,"level":136},"/v1.0.6/overview#philosophy",[1614],{"id":19527,"title":1187,"titles":19528,"content":2598,"level":136},"/v1.0.6/overview#capabilities",[1614],{"id":19530,"title":2601,"titles":19531,"content":99,"level":136},"/v1.0.6/overview#priorities",[1614],{"id":19533,"title":1782,"titles":19534,"content":2606,"level":155},"/v1.0.6/overview#security",[1614,2601],{"id":19536,"title":2609,"titles":19537,"content":6026,"level":155},"/v1.0.6/overview#ergonomics",[1614,2601],{"id":19539,"title":5002,"titles":19540,"content":14331,"level":155},"/v1.0.6/overview#multi-provider-architecture",[1614,2601],{"id":19542,"title":1628,"titles":19543,"content":2620,"level":107},"/v1.0.6/learn/quickstart",[],{"id":19545,"title":1628,"titles":19546,"content":99,"level":107},"/v1.0.6/learn/quickstart#quickstart",[],{"id":19548,"title":2626,"titles":19549,"content":6040,"level":136},"/v1.0.6/learn/quickstart#requirements",[1628],{"id":19551,"title":2631,"titles":19552,"content":2633,"level":136},"/v1.0.6/learn/quickstart#installation",[1628],{"id":19554,"title":2636,"titles":19555,"content":14347,"level":136},"/v1.0.6/learn/quickstart#basic-usage",[1628],{"id":19557,"title":2641,"titles":19558,"content":6051,"level":136},"/v1.0.6/learn/quickstart#whats-happening",[1628],{"id":19560,"title":2646,"titles":19561,"content":6055,"level":136},"/v1.0.6/learn/quickstart#using-with-sqlx",[1628],{"id":19563,"title":2651,"titles":19564,"content":2653,"level":107},"/v1.0.6/learn/concepts",[],{"id":19566,"title":2651,"titles":19567,"content":2657,"level":107},"/v1.0.6/learn/concepts#core-concepts",[],{"id":19569,"title":2660,"titles":19570,"content":2662,"level":136},"/v1.0.6/learn/concepts#tables",[2651],{"id":19572,"title":2665,"titles":19573,"content":2667,"level":136},"/v1.0.6/learn/concepts#fields",[2651],{"id":19575,"title":2670,"titles":19576,"content":2672,"level":155},"/v1.0.6/learn/concepts#field-validation",[2651,2665],{"id":19578,"title":2675,"titles":19579,"content":2677,"level":136},"/v1.0.6/learn/concepts#params",[2651],{"id":19581,"title":2680,"titles":19582,"content":2682,"level":155},"/v1.0.6/learn/concepts#parameter-validation",[2651,2675],{"id":19584,"title":1251,"titles":19585,"content":2686,"level":136},"/v1.0.6/learn/concepts#conditions",[2651],{"id":19587,"title":1727,"titles":19588,"content":2690,"level":155},"/v1.0.6/learn/concepts#operators",[2651,1251],{"id":19590,"title":2693,"titles":19591,"content":2695,"level":155},"/v1.0.6/learn/concepts#combining-conditions",[2651,1251],{"id":19593,"title":2698,"titles":19594,"content":2700,"level":155},"/v1.0.6/learn/concepts#nested-conditions",[2651,1251],{"id":19596,"title":2703,"titles":19597,"content":2705,"level":155},"/v1.0.6/learn/concepts#null-conditions",[2651,1251],{"id":19599,"title":2708,"titles":19600,"content":2710,"level":155},"/v1.0.6/learn/concepts#field-comparisons",[2651,1251],{"id":19602,"title":2713,"titles":19603,"content":2715,"level":136},"/v1.0.6/learn/concepts#builders",[2651],{"id":19605,"title":2718,"titles":19606,"content":6101,"level":155},"/v1.0.6/learn/concepts#fluent-api",[2651,2713],{"id":19608,"title":2723,"titles":19609,"content":6105,"level":155},"/v1.0.6/learn/concepts#build-vs-render",[2651,2713],{"id":19611,"title":2728,"titles":19612,"content":6109,"level":155},"/v1.0.6/learn/concepts#must-variants",[2651,2713],{"id":19614,"title":2733,"titles":19615,"content":2735,"level":136},"/v1.0.6/learn/concepts#try-variants",[2651],{"id":19617,"title":2738,"titles":19618,"content":2740,"level":136},"/v1.0.6/learn/concepts#query-result",[2651],{"id":19620,"title":1237,"titles":19621,"content":2744,"level":107},"/v1.0.6/learn/architecture",[],{"id":19623,"title":1237,"titles":19624,"content":2748,"level":107},"/v1.0.6/learn/architecture#architecture",[],{"id":19626,"title":2751,"titles":19627,"content":2753,"level":136},"/v1.0.6/learn/architecture#pipeline-overview",[1237],{"id":19629,"title":2756,"titles":19630,"content":99,"level":136},"/v1.0.6/learn/architecture#validation-layer",[1237],{"id":19632,"title":1215,"titles":19633,"content":2761,"level":155},"/v1.0.6/learn/architecture#schema-validation",[1237,2756],{"id":19635,"title":2764,"titles":19636,"content":2766,"level":155},"/v1.0.6/learn/architecture#identifier-validation",[1237,2756],{"id":19638,"title":2769,"titles":19639,"content":2771,"level":155},"/v1.0.6/learn/architecture#alias-restrictions",[1237,2756],{"id":19641,"title":2774,"titles":19642,"content":5107,"level":136},"/v1.0.6/learn/architecture#ast-structure",[1237],{"id":19644,"title":2779,"titles":19645,"content":2781,"level":155},"/v1.0.6/learn/architecture#internal-types",[1237,2774],{"id":19647,"title":2784,"titles":19648,"content":2786,"level":155},"/v1.0.6/learn/architecture#condition-types",[1237,2774],{"id":19650,"title":2789,"titles":19651,"content":2791,"level":136},"/v1.0.6/learn/architecture#render-engine",[1237],{"id":19653,"title":2794,"titles":19654,"content":2796,"level":155},"/v1.0.6/learn/architecture#identifier-quoting",[1237,2789],{"id":19656,"title":2799,"titles":19657,"content":2801,"level":155},"/v1.0.6/learn/architecture#parameter-placeholders",[1237,2789],{"id":19659,"title":2804,"titles":19660,"content":2806,"level":155},"/v1.0.6/learn/architecture#parameter-namespacing",[1237,2789],{"id":19662,"title":5128,"titles":19663,"content":12390,"level":136},"/v1.0.6/learn/architecture#provider-architecture",[1237],{"id":19665,"title":5133,"titles":19666,"content":14459,"level":155},"/v1.0.6/learn/architecture#available-providers",[1237,5128],{"id":19668,"title":3341,"titles":19669,"content":14463,"level":155},"/v1.0.6/learn/architecture#usage",[1237,5128],{"id":19671,"title":5142,"titles":19672,"content":11369,"level":155},"/v1.0.6/learn/architecture#dialect-differences",[1237,5128],{"id":19674,"title":2809,"titles":19675,"content":11373,"level":136},"/v1.0.6/learn/architecture#file-structure",[1237],{"id":19677,"title":2814,"titles":19678,"content":2816,"level":136},"/v1.0.6/learn/architecture#security-layers",[1237],{"id":19680,"title":2819,"titles":19681,"content":99,"level":136},"/v1.0.6/learn/architecture#extension-points",[1237],{"id":19683,"title":2823,"titles":19684,"content":2825,"level":155},"/v1.0.6/learn/architecture#custom-expressions",[1237,2819],{"id":19686,"title":2828,"titles":19687,"content":2830,"level":155},"/v1.0.6/learn/architecture#compound-queries",[1237,2819],{"id":19689,"title":2833,"titles":19690,"content":6191,"level":155},"/v1.0.6/learn/architecture#direct-ast-access",[1237,2819],{"id":19692,"title":1215,"titles":19693,"content":2839,"level":107},"/v1.0.6/guides/schema-validation",[],{"id":19695,"title":1215,"titles":19696,"content":2843,"level":107},"/v1.0.6/guides/schema-validation#schema-validation",[],{"id":19698,"title":2846,"titles":19699,"content":2848,"level":136},"/v1.0.6/guides/schema-validation#defining-a-schema",[1215],{"id":19701,"title":2851,"titles":19702,"content":2853,"level":136},"/v1.0.6/guides/schema-validation#creating-an-instance",[1215],{"id":19704,"title":2856,"titles":19705,"content":99,"level":136},"/v1.0.6/guides/schema-validation#validation-behavior",[1215],{"id":19707,"title":2860,"titles":19708,"content":2862,"level":155},"/v1.0.6/guides/schema-validation#table-validation",[1215,2856],{"id":19710,"title":2670,"titles":19711,"content":2866,"level":155},"/v1.0.6/guides/schema-validation#field-validation",[1215,2856],{"id":19713,"title":2680,"titles":19714,"content":2870,"level":155},"/v1.0.6/guides/schema-validation#parameter-validation",[1215,2856],{"id":19716,"title":2873,"titles":19717,"content":2875,"level":136},"/v1.0.6/guides/schema-validation#panic-vs-error",[1215],{"id":19719,"title":2733,"titles":19720,"content":2879,"level":155},"/v1.0.6/guides/schema-validation#try-variants",[1215,2873],{"id":19722,"title":2882,"titles":19723,"content":2884,"level":155},"/v1.0.6/guides/schema-validation#when-to-use-each",[1215,2873],{"id":19725,"title":2887,"titles":19726,"content":2889,"level":136},"/v1.0.6/guides/schema-validation#table-aliases",[1215],{"id":19728,"title":2769,"titles":19729,"content":2893,"level":155},"/v1.0.6/guides/schema-validation#alias-restrictions",[1215,2887],{"id":19731,"title":2896,"titles":19732,"content":2898,"level":155},"/v1.0.6/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":19734,"title":2901,"titles":19735,"content":99,"level":136},"/v1.0.6/guides/schema-validation#schema-organization",[1215],{"id":19737,"title":2905,"titles":19738,"content":6240,"level":155},"/v1.0.6/guides/schema-validation#single-schema-instance",[1215,2901],{"id":19740,"title":2910,"titles":19741,"content":2912,"level":155},"/v1.0.6/guides/schema-validation#multiple-schemas",[1215,2901],{"id":19743,"title":2915,"titles":19744,"content":99,"level":136},"/v1.0.6/guides/schema-validation#dynamic-queries",[1215],{"id":19746,"title":2919,"titles":19747,"content":6250,"level":155},"/v1.0.6/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":19749,"title":2924,"titles":19750,"content":2926,"level":155},"/v1.0.6/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":19752,"title":2929,"titles":19753,"content":99,"level":136},"/v1.0.6/guides/schema-validation#validation-errors",[1215],{"id":19755,"title":2933,"titles":19756,"content":2935,"level":155},"/v1.0.6/guides/schema-validation#error-types",[1215,2929],{"id":19758,"title":2938,"titles":19759,"content":6263,"level":155},"/v1.0.6/guides/schema-validation#handling-errors",[1215,2929],{"id":19761,"title":1251,"titles":19762,"content":2944,"level":107},"/v1.0.6/guides/conditions",[],{"id":19764,"title":1251,"titles":19765,"content":2948,"level":107},"/v1.0.6/guides/conditions#conditions",[],{"id":19767,"title":2951,"titles":19768,"content":2953,"level":136},"/v1.0.6/guides/conditions#basic-conditions",[1251],{"id":19770,"title":1727,"titles":19771,"content":99,"level":136},"/v1.0.6/guides/conditions#operators",[1251],{"id":19773,"title":2959,"titles":19774,"content":2961,"level":155},"/v1.0.6/guides/conditions#comparison-operators",[1251,1727],{"id":19776,"title":2964,"titles":19777,"content":2966,"level":155},"/v1.0.6/guides/conditions#pattern-matching",[1251,1727],{"id":19779,"title":2969,"titles":19780,"content":2971,"level":155},"/v1.0.6/guides/conditions#null-checks",[1251,1727],{"id":19782,"title":2974,"titles":19783,"content":2976,"level":155},"/v1.0.6/guides/conditions#array-operators",[1251,1727],{"id":19785,"title":2693,"titles":19786,"content":99,"level":136},"/v1.0.6/guides/conditions#combining-conditions",[1251],{"id":19788,"title":2982,"titles":19789,"content":2984,"level":155},"/v1.0.6/guides/conditions#and",[1251,2693],{"id":19791,"title":2987,"titles":19792,"content":2989,"level":155},"/v1.0.6/guides/conditions#or",[1251,2693],{"id":19794,"title":2992,"titles":19795,"content":2994,"level":155},"/v1.0.6/guides/conditions#nested-logic",[1251,2693],{"id":19797,"title":2997,"titles":19798,"content":2999,"level":136},"/v1.0.6/guides/conditions#between",[1251],{"id":19800,"title":2708,"titles":19801,"content":3003,"level":136},"/v1.0.6/guides/conditions#field-comparisons",[1251],{"id":19803,"title":3006,"titles":19804,"content":99,"level":136},"/v1.0.6/guides/conditions#subqueries",[1251],{"id":19806,"title":3010,"titles":19807,"content":3012,"level":155},"/v1.0.6/guides/conditions#in-subquery",[1251,3006],{"id":19809,"title":3015,"titles":19810,"content":3017,"level":155},"/v1.0.6/guides/conditions#not-in-subquery",[1251,3006],{"id":19812,"title":3020,"titles":19813,"content":3022,"level":155},"/v1.0.6/guides/conditions#exists",[1251,3006],{"id":19815,"title":3025,"titles":19816,"content":3027,"level":155},"/v1.0.6/guides/conditions#not-exists",[1251,3006],{"id":19818,"title":2804,"titles":19819,"content":3031,"level":155},"/v1.0.6/guides/conditions#parameter-namespacing",[1251,3006],{"id":19821,"title":3034,"titles":19822,"content":3036,"level":136},"/v1.0.6/guides/conditions#multiple-where-clauses",[1251],{"id":19824,"title":3039,"titles":19825,"content":3041,"level":136},"/v1.0.6/guides/conditions#wherefield-shorthand",[1251],{"id":19827,"title":3044,"titles":19828,"content":3046,"level":136},"/v1.0.6/guides/conditions#building-conditions-dynamically",[1251],{"id":19830,"title":1265,"titles":19831,"content":3050,"level":107},"/v1.0.6/guides/joins",[],{"id":19833,"title":1265,"titles":19834,"content":3054,"level":107},"/v1.0.6/guides/joins#joins",[],{"id":19836,"title":3057,"titles":19837,"content":3059,"level":136},"/v1.0.6/guides/joins#join-types",[1265],{"id":19839,"title":3062,"titles":19840,"content":3064,"level":136},"/v1.0.6/guides/joins#basic-join",[1265],{"id":19842,"title":2887,"titles":19843,"content":3068,"level":136},"/v1.0.6/guides/joins#table-aliases",[1265],{"id":19845,"title":3071,"titles":19846,"content":3073,"level":136},"/v1.0.6/guides/joins#left-join",[1265],{"id":19848,"title":3076,"titles":19849,"content":3078,"level":136},"/v1.0.6/guides/joins#right-join",[1265],{"id":19851,"title":3081,"titles":19852,"content":3083,"level":136},"/v1.0.6/guides/joins#full-outer-join",[1265],{"id":19854,"title":3086,"titles":19855,"content":3088,"level":136},"/v1.0.6/guides/joins#cross-join",[1265],{"id":19857,"title":3091,"titles":19858,"content":3093,"level":136},"/v1.0.6/guides/joins#multiple-joins",[1265],{"id":19860,"title":3096,"titles":19861,"content":3098,"level":136},"/v1.0.6/guides/joins#complex-on-conditions",[1265],{"id":19863,"title":3101,"titles":19864,"content":3103,"level":136},"/v1.0.6/guides/joins#self-joins",[1265],{"id":19866,"title":3106,"titles":19867,"content":3108,"level":136},"/v1.0.6/guides/joins#joins-with-count",[1265],{"id":19869,"title":3111,"titles":19870,"content":3113,"level":136},"/v1.0.6/guides/joins#join-validation",[1265],{"id":19872,"title":1668,"titles":19873,"content":3117,"level":107},"/v1.0.6/guides/aggregates",[],{"id":19875,"title":1668,"titles":19876,"content":3121,"level":107},"/v1.0.6/guides/aggregates#aggregates",[],{"id":19878,"title":3124,"titles":19879,"content":99,"level":136},"/v1.0.6/guides/aggregates#aggregate-functions",[1668],{"id":19881,"title":3128,"titles":19882,"content":3130,"level":155},"/v1.0.6/guides/aggregates#basic-aggregates",[1668,3124],{"id":19884,"title":3133,"titles":19885,"content":3135,"level":155},"/v1.0.6/guides/aggregates#using-aggregates",[1668,3124],{"id":19887,"title":3138,"titles":19888,"content":3140,"level":155},"/v1.0.6/guides/aggregates#aliases",[1668,3124],{"id":19890,"title":3143,"titles":19891,"content":3145,"level":136},"/v1.0.6/guides/aggregates#group-by",[1668],{"id":19893,"title":3148,"titles":19894,"content":3150,"level":136},"/v1.0.6/guides/aggregates#having",[1668],{"id":19896,"title":3153,"titles":19897,"content":3155,"level":155},"/v1.0.6/guides/aggregates#simple-having",[1668,3148],{"id":19899,"title":3158,"titles":19900,"content":3160,"level":155},"/v1.0.6/guides/aggregates#aggregate-having",[1668,3148],{"id":19902,"title":3163,"titles":19903,"content":3165,"level":155},"/v1.0.6/guides/aggregates#having-helpers",[1668,3148],{"id":19905,"title":3168,"titles":19906,"content":3170,"level":136},"/v1.0.6/guides/aggregates#filter-clause",[1668],{"id":19908,"title":3173,"titles":19909,"content":3175,"level":136},"/v1.0.6/guides/aggregates#window-functions",[1668],{"id":19911,"title":3178,"titles":19912,"content":3180,"level":155},"/v1.0.6/guides/aggregates#basic-window-functions",[1668,3173],{"id":19914,"title":3183,"titles":19915,"content":3185,"level":155},"/v1.0.6/guides/aggregates#window-function-types",[1668,3173],{"id":19917,"title":3188,"titles":19918,"content":3190,"level":155},"/v1.0.6/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":19920,"title":3193,"titles":19921,"content":3195,"level":155},"/v1.0.6/guides/aggregates#window-specification",[1668,3173],{"id":19923,"title":3198,"titles":19924,"content":3200,"level":155},"/v1.0.6/guides/aggregates#frame-bounds",[1668,3173],{"id":19926,"title":3203,"titles":19927,"content":99,"level":136},"/v1.0.6/guides/aggregates#math-functions",[1668],{"id":19929,"title":3207,"titles":19930,"content":3209,"level":155},"/v1.0.6/guides/aggregates#available-functions",[1668,3203],{"id":19932,"title":3212,"titles":19933,"content":3214,"level":155},"/v1.0.6/guides/aggregates#example",[1668,3203],{"id":19935,"title":1270,"titles":19936,"content":3218,"level":136},"/v1.0.6/guides/aggregates#case-expressions",[1668],{"id":19938,"title":3221,"titles":19939,"content":3223,"level":136},"/v1.0.6/guides/aggregates#type-casting",[1668],{"id":19941,"title":3226,"titles":19942,"content":3228,"level":136},"/v1.0.6/guides/aggregates#coalesce-and-nullif",[1668],{"id":19944,"title":1675,"titles":19945,"content":3232,"level":107},"/v1.0.6/guides/testing",[],{"id":19947,"title":1675,"titles":19948,"content":3236,"level":107},"/v1.0.6/guides/testing#testing",[],{"id":19950,"title":3239,"titles":19951,"content":99,"level":136},"/v1.0.6/guides/testing#testing-query-output",[1675],{"id":19953,"title":3243,"titles":19954,"content":6459,"level":155},"/v1.0.6/guides/testing#basic-output-testing",[1675,3239],{"id":19956,"title":3248,"titles":19957,"content":3250,"level":155},"/v1.0.6/guides/testing#test-instance-setup",[1675,3239],{"id":19959,"title":3253,"titles":19960,"content":99,"level":136},"/v1.0.6/guides/testing#table-driven-tests",[1675],{"id":19962,"title":3257,"titles":19963,"content":6469,"level":155},"/v1.0.6/guides/testing#testing-multiple-queries",[1675,3253],{"id":19965,"title":3262,"titles":19966,"content":99,"level":136},"/v1.0.6/guides/testing#testing-validation",[1675],{"id":19968,"title":3266,"titles":19969,"content":3268,"level":155},"/v1.0.6/guides/testing#testing-invalid-input",[1675,3262],{"id":19971,"title":3271,"titles":19972,"content":3273,"level":155},"/v1.0.6/guides/testing#testing-try-variants",[1675,3262],{"id":19974,"title":3276,"titles":19975,"content":99,"level":136},"/v1.0.6/guides/testing#testing-error-cases",[1675],{"id":19977,"title":3280,"titles":19978,"content":6485,"level":155},"/v1.0.6/guides/testing#builder-errors",[1675,3276],{"id":19980,"title":3285,"titles":19981,"content":99,"level":136},"/v1.0.6/guides/testing#testing-complex-queries",[1675],{"id":19983,"title":3289,"titles":19984,"content":6492,"level":155},"/v1.0.6/guides/testing#join-tests",[1675,3285],{"id":19986,"title":3294,"titles":19987,"content":6496,"level":155},"/v1.0.6/guides/testing#subquery-tests",[1675,3285],{"id":19989,"title":3299,"titles":19990,"content":3301,"level":136},"/v1.0.6/guides/testing#snapshot-testing",[1675],{"id":19992,"title":3304,"titles":19993,"content":99,"level":136},"/v1.0.6/guides/testing#best-practices",[1675],{"id":19995,"title":3308,"titles":19996,"content":3310,"level":155},"/v1.0.6/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":19998,"title":3313,"titles":19999,"content":3315,"level":155},"/v1.0.6/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":20001,"title":3318,"titles":20002,"content":3320,"level":155},"/v1.0.6/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":20004,"title":3323,"titles":20005,"content":6515,"level":155},"/v1.0.6/guides/testing#_4-test-edge-cases",[1675,3304],{"id":20007,"title":1688,"titles":20008,"content":3329,"level":107},"/v1.0.6/cookbook/pagination",[],{"id":20010,"title":1688,"titles":20011,"content":3333,"level":107},"/v1.0.6/cookbook/pagination#pagination",[],{"id":20013,"title":3336,"titles":20014,"content":6525,"level":136},"/v1.0.6/cookbook/pagination#offset-pagination",[1688],{"id":20016,"title":3341,"titles":20017,"content":3343,"level":155},"/v1.0.6/cookbook/pagination#usage",[1688,3336],{"id":20019,"title":3346,"titles":20020,"content":6532,"level":155},"/v1.0.6/cookbook/pagination#with-total-count",[1688,3336],{"id":20022,"title":3351,"titles":20023,"content":3353,"level":155},"/v1.0.6/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":20025,"title":3356,"titles":20026,"content":6539,"level":136},"/v1.0.6/cookbook/pagination#cursor-pagination",[1688],{"id":20028,"title":3341,"titles":20029,"content":3362,"level":155},"/v1.0.6/cookbook/pagination#usage-1",[1688,3356],{"id":20031,"title":3365,"titles":20032,"content":6546,"level":155},"/v1.0.6/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":20034,"title":3370,"titles":20035,"content":6550,"level":155},"/v1.0.6/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":20037,"title":3375,"titles":20038,"content":6554,"level":136},"/v1.0.6/cookbook/pagination#filtering-with-pagination",[1688],{"id":20040,"title":3380,"titles":20041,"content":6558,"level":136},"/v1.0.6/cookbook/pagination#pagination-with-joins",[1688],{"id":20043,"title":3304,"titles":20044,"content":99,"level":136},"/v1.0.6/cookbook/pagination#best-practices",[1688],{"id":20046,"title":3388,"titles":20047,"content":6565,"level":155},"/v1.0.6/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":20049,"title":3393,"titles":20050,"content":3395,"level":155},"/v1.0.6/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":20052,"title":3398,"titles":20053,"content":3400,"level":155},"/v1.0.6/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":20055,"title":3403,"titles":20056,"content":3405,"level":155},"/v1.0.6/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":20058,"title":1695,"titles":20059,"content":3409,"level":107},"/v1.0.6/cookbook/vector-search",[],{"id":20061,"title":1695,"titles":20062,"content":3413,"level":107},"/v1.0.6/cookbook/vector-search#vector-search",[],{"id":20064,"title":3416,"titles":20065,"content":3418,"level":136},"/v1.0.6/cookbook/vector-search#schema-setup",[1695],{"id":20067,"title":3421,"titles":20068,"content":3423,"level":136},"/v1.0.6/cookbook/vector-search#distance-operators",[1695],{"id":20070,"title":3426,"titles":20071,"content":3428,"level":136},"/v1.0.6/cookbook/vector-search#basic-similarity-search",[1695],{"id":20073,"title":3431,"titles":20074,"content":3433,"level":155},"/v1.0.6/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":20076,"title":17962,"titles":20077,"content":19024,"level":136},"/v1.0.6/cookbook/vector-search#selecting-distance-as-a-column",[1695],{"id":20079,"title":3436,"titles":20080,"content":3438,"level":136},"/v1.0.6/cookbook/vector-search#cosine-similarity",[1695],{"id":20082,"title":3441,"titles":20083,"content":3443,"level":136},"/v1.0.6/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":20085,"title":3446,"titles":20086,"content":3448,"level":136},"/v1.0.6/cookbook/vector-search#filtered-vector-search",[1695],{"id":20088,"title":3451,"titles":20089,"content":3453,"level":136},"/v1.0.6/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":20091,"title":3456,"titles":20092,"content":3458,"level":136},"/v1.0.6/cookbook/vector-search#hybrid-search",[1695],{"id":20094,"title":3461,"titles":20095,"content":3463,"level":136},"/v1.0.6/cookbook/vector-search#multi-vector-search",[1695],{"id":20097,"title":3466,"titles":20098,"content":3468,"level":136},"/v1.0.6/cookbook/vector-search#indexing-recommendations",[1695],{"id":20100,"title":3304,"titles":20101,"content":99,"level":136},"/v1.0.6/cookbook/vector-search#best-practices",[1695],{"id":20103,"title":3474,"titles":20104,"content":3476,"level":155},"/v1.0.6/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":20106,"title":3479,"titles":20107,"content":3481,"level":155},"/v1.0.6/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":20109,"title":3484,"titles":20110,"content":3486,"level":155},"/v1.0.6/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":20112,"title":1702,"titles":20113,"content":3490,"level":107},"/v1.0.6/cookbook/upserts",[],{"id":20115,"title":1702,"titles":20116,"content":3494,"level":107},"/v1.0.6/cookbook/upserts#upserts",[],{"id":20118,"title":3497,"titles":20119,"content":6635,"level":136},"/v1.0.6/cookbook/upserts#basic-upsert",[1702],{"id":20121,"title":3502,"titles":20122,"content":6639,"level":136},"/v1.0.6/cookbook/upserts#do-nothing",[1702],{"id":20124,"title":3507,"titles":20125,"content":6643,"level":136},"/v1.0.6/cookbook/upserts#multi-column-conflict",[1702],{"id":20127,"title":3512,"titles":20128,"content":6647,"level":136},"/v1.0.6/cookbook/upserts#returning-with-upsert",[1702],{"id":20130,"title":3517,"titles":20131,"content":6651,"level":136},"/v1.0.6/cookbook/upserts#batch-upsert",[1702],{"id":20133,"title":3522,"titles":20134,"content":6655,"level":136},"/v1.0.6/cookbook/upserts#conditional-upsert",[1702],{"id":20136,"title":3527,"titles":20137,"content":6659,"level":136},"/v1.0.6/cookbook/upserts#sync-pattern",[1702],{"id":20139,"title":3532,"titles":20140,"content":6663,"level":136},"/v1.0.6/cookbook/upserts#upsert-with-timestamps",[1702],{"id":20142,"title":3304,"titles":20143,"content":99,"level":136},"/v1.0.6/cookbook/upserts#best-practices",[1702],{"id":20145,"title":3540,"titles":20146,"content":3542,"level":155},"/v1.0.6/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":20148,"title":3545,"titles":20149,"content":3547,"level":155},"/v1.0.6/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":20151,"title":3550,"titles":20152,"content":3552,"level":155},"/v1.0.6/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":20154,"title":3555,"titles":20155,"content":3557,"level":155},"/v1.0.6/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":20157,"title":1709,"titles":20158,"content":6682,"level":107},"/v1.0.6/cookbook/orm-foundation",[],{"id":20160,"title":1709,"titles":20161,"content":6686,"level":107},"/v1.0.6/cookbook/orm-foundation#orm-foundation",[],{"id":20163,"title":6689,"titles":20164,"content":6691,"level":136},"/v1.0.6/cookbook/orm-foundation#the-result",[1709],{"id":20166,"title":6694,"titles":20167,"content":6696,"level":136},"/v1.0.6/cookbook/orm-foundation#the-architecture",[1709],{"id":20169,"title":6699,"titles":20170,"content":6701,"level":136},"/v1.0.6/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":20172,"title":6704,"titles":20173,"content":6706,"level":155},"/v1.0.6/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":20175,"title":6709,"titles":20176,"content":6711,"level":155},"/v1.0.6/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":20178,"title":6714,"titles":20179,"content":6716,"level":155},"/v1.0.6/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":20181,"title":6719,"titles":20182,"content":6721,"level":155},"/v1.0.6/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":20184,"title":6724,"titles":20185,"content":6726,"level":136},"/v1.0.6/cookbook/orm-foundation#the-security-model",[1709],{"id":20187,"title":6729,"titles":20188,"content":6731,"level":136},"/v1.0.6/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":20190,"title":6734,"titles":20191,"content":6736,"level":136},"/v1.0.6/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":20193,"title":6739,"titles":20194,"content":6741,"level":155},"/v1.0.6/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":20196,"title":6744,"titles":20197,"content":6746,"level":155},"/v1.0.6/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":20199,"title":6749,"titles":20200,"content":6751,"level":155},"/v1.0.6/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":20202,"title":6754,"titles":20203,"content":6756,"level":155},"/v1.0.6/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":20205,"title":6759,"titles":20206,"content":6761,"level":136},"/v1.0.6/cookbook/orm-foundation#see-also",[1709],{"id":20208,"title":3560,"titles":20209,"content":3562,"level":107},"/v1.0.6/reference/api",[],{"id":20211,"title":3560,"titles":20212,"content":3566,"level":107},"/v1.0.6/reference/api#api-reference",[],{"id":20214,"title":3569,"titles":20215,"content":99,"level":136},"/v1.0.6/reference/api#instance-creation",[3560],{"id":20217,"title":856,"titles":20218,"content":3574,"level":155},"/v1.0.6/reference/api#newfromdbml",[3560,3569],{"id":20220,"title":3577,"titles":20221,"content":99,"level":136},"/v1.0.6/reference/api#instance-methods",[3560],{"id":20223,"title":119,"titles":20224,"content":3582,"level":155},"/v1.0.6/reference/api#t",[3560,3577],{"id":20226,"title":3585,"titles":20227,"content":3587,"level":155},"/v1.0.6/reference/api#tryt",[3560,3577],{"id":20229,"title":169,"titles":20230,"content":3591,"level":155},"/v1.0.6/reference/api#f",[3560,3577],{"id":20232,"title":3594,"titles":20233,"content":3596,"level":155},"/v1.0.6/reference/api#tryf",[3560,3577],{"id":20235,"title":316,"titles":20236,"content":3600,"level":155},"/v1.0.6/reference/api#p",[3560,3577],{"id":20238,"title":3603,"titles":20239,"content":3605,"level":155},"/v1.0.6/reference/api#tryp",[3560,3577],{"id":20241,"title":284,"titles":20242,"content":3609,"level":155},"/v1.0.6/reference/api#c",[3560,3577],{"id":20244,"title":3612,"titles":20245,"content":3614,"level":155},"/v1.0.6/reference/api#tryc",[3560,3577],{"id":20247,"title":3617,"titles":20248,"content":3619,"level":155},"/v1.0.6/reference/api#and",[3560,3577],{"id":20250,"title":3622,"titles":20251,"content":3624,"level":155},"/v1.0.6/reference/api#or",[3560,3577],{"id":20253,"title":3627,"titles":20254,"content":3629,"level":155},"/v1.0.6/reference/api#null",[3560,3577],{"id":20256,"title":3632,"titles":20257,"content":3634,"level":155},"/v1.0.6/reference/api#notnull",[3560,3577],{"id":20259,"title":3637,"titles":20260,"content":3639,"level":155},"/v1.0.6/reference/api#withtable",[3560,3577],{"id":20262,"title":3642,"titles":20263,"content":3644,"level":155},"/v1.0.6/reference/api#trywithtable",[3560,3577],{"id":20265,"title":3647,"titles":20266,"content":3649,"level":155},"/v1.0.6/reference/api#aggc",[3560,3577],{"id":20268,"title":3652,"titles":20269,"content":3654,"level":155},"/v1.0.6/reference/api#tryaggc",[3560,3577],{"id":20271,"title":3657,"titles":20272,"content":3659,"level":155},"/v1.0.6/reference/api#valuemap",[3560,3577],{"id":20274,"title":18162,"titles":20275,"content":18164,"level":155},"/v1.0.6/reference/api#jsonbtext",[3560,3577],{"id":20277,"title":18167,"titles":20278,"content":18169,"level":155},"/v1.0.6/reference/api#jsonbpath",[3560,3577],{"id":20280,"title":3662,"titles":20281,"content":99,"level":136},"/v1.0.6/reference/api#query-builders",[3560],{"id":20283,"title":219,"titles":20284,"content":3667,"level":155},"/v1.0.6/reference/api#select",[3560,3662],{"id":20286,"title":3670,"titles":20287,"content":3672,"level":155},"/v1.0.6/reference/api#insert",[3560,3662],{"id":20289,"title":3675,"titles":20290,"content":3677,"level":155},"/v1.0.6/reference/api#update",[3560,3662],{"id":20292,"title":3680,"titles":20293,"content":3682,"level":155},"/v1.0.6/reference/api#delete",[3560,3662],{"id":20295,"title":3685,"titles":20296,"content":3687,"level":155},"/v1.0.6/reference/api#count",[3560,3662],{"id":20298,"title":3690,"titles":20299,"content":99,"level":136},"/v1.0.6/reference/api#builder-methods",[3560],{"id":20301,"title":2665,"titles":20302,"content":3695,"level":155},"/v1.0.6/reference/api#fields",[3560,3690],{"id":20304,"title":3698,"titles":20305,"content":3700,"level":155},"/v1.0.6/reference/api#where",[3560,3690],{"id":20307,"title":3703,"titles":20308,"content":3705,"level":155},"/v1.0.6/reference/api#wherefield",[3560,3690],{"id":20310,"title":3708,"titles":20311,"content":3710,"level":155},"/v1.0.6/reference/api#orderby",[3560,3690],{"id":20313,"title":3713,"titles":20314,"content":3715,"level":155},"/v1.0.6/reference/api#orderbynulls",[3560,3690],{"id":20316,"title":3718,"titles":20317,"content":3720,"level":155},"/v1.0.6/reference/api#orderbyexpr",[3560,3690],{"id":20319,"title":3723,"titles":20320,"content":5734,"level":155},"/v1.0.6/reference/api#limit",[3560,3690],{"id":20322,"title":5737,"titles":20323,"content":5739,"level":155},"/v1.0.6/reference/api#limitparam",[3560,3690],{"id":20325,"title":3728,"titles":20326,"content":5743,"level":155},"/v1.0.6/reference/api#offset",[3560,3690],{"id":20328,"title":5746,"titles":20329,"content":5748,"level":155},"/v1.0.6/reference/api#offsetparam",[3560,3690],{"id":20331,"title":3733,"titles":20332,"content":3735,"level":155},"/v1.0.6/reference/api#set",[3560,3690],{"id":20334,"title":20335,"titles":20336,"content":20337,"level":155},"/v1.0.6/reference/api#setexpr","SetExpr",[3560,3690],"func (b *Builder) SetExpr(f types.Field, expr types.FieldExpression) *Builder Adds a field update with an expression value. UPDATE only. Use this for computed assignments like atomic increments. // Returns: \"items_completed\" = \"items_completed\" + :increment\n.SetExpr(instance.F(\"items_completed\"), types.FieldExpression{\n    Binary: &types.BinaryExpression{\n        Field:    instance.F(\"items_completed\"),\n        Operator: \"+\",\n        Param:    instance.P(\"increment\"),\n    },\n})",{"id":20339,"title":3738,"titles":20340,"content":3740,"level":155},"/v1.0.6/reference/api#values",[3560,3690],{"id":20342,"title":3743,"titles":20343,"content":3745,"level":155},"/v1.0.6/reference/api#returning",[3560,3690],{"id":20345,"title":3748,"titles":20346,"content":3750,"level":155},"/v1.0.6/reference/api#distinct",[3560,3690],{"id":20348,"title":3753,"titles":20349,"content":3755,"level":155},"/v1.0.6/reference/api#distincton",[3560,3690],{"id":20351,"title":3758,"titles":20352,"content":3760,"level":155},"/v1.0.6/reference/api#groupby",[3560,3690],{"id":20354,"title":3763,"titles":20355,"content":3765,"level":155},"/v1.0.6/reference/api#having",[3560,3690],{"id":20357,"title":3768,"titles":20358,"content":3770,"level":155},"/v1.0.6/reference/api#havingagg",[3560,3690],{"id":20360,"title":3773,"titles":20361,"content":3775,"level":155},"/v1.0.6/reference/api#selectexpr",[3560,3690],{"id":20363,"title":19306,"titles":20364,"content":19308,"level":155},"/v1.0.6/reference/api#selectbinaryexpr",[3560,3690],{"id":20366,"title":3778,"titles":20367,"content":3780,"level":155},"/v1.0.6/reference/api#onconflict",[3560,3690],{"id":20369,"title":3783,"titles":20370,"content":3785,"level":155},"/v1.0.6/reference/api#join-methods",[3560,3690],{"id":20372,"title":3788,"titles":20373,"content":3790,"level":155},"/v1.0.6/reference/api#row-locking",[3560,3690],{"id":20375,"title":3793,"titles":20376,"content":3795,"level":155},"/v1.0.6/reference/api#build",[3560,3690],{"id":20378,"title":3798,"titles":20379,"content":3800,"level":155},"/v1.0.6/reference/api#mustbuild",[3560,3690],{"id":20381,"title":350,"titles":20382,"content":6924,"level":155},"/v1.0.6/reference/api#render",[3560,3690],{"id":20384,"title":3807,"titles":20385,"content":6928,"level":155},"/v1.0.6/reference/api#mustrender",[3560,3690],{"id":20387,"title":3812,"titles":20388,"content":99,"level":136},"/v1.0.6/reference/api#set-operations",[3560],{"id":20390,"title":3816,"titles":20391,"content":3818,"level":155},"/v1.0.6/reference/api#union-unionall",[3560,3812],{"id":20393,"title":3821,"titles":20394,"content":3823,"level":155},"/v1.0.6/reference/api#intersect-intersectall",[3560,3812],{"id":20396,"title":3826,"titles":20397,"content":3828,"level":155},"/v1.0.6/reference/api#except-exceptall",[3560,3812],{"id":20399,"title":3831,"titles":20400,"content":6944,"level":136},"/v1.0.6/reference/api#rendering",[3560],{"id":20402,"title":3844,"titles":20403,"content":99,"level":136},"/v1.0.6/reference/api#expression-functions",[3560],{"id":20405,"title":1668,"titles":20406,"content":3849,"level":155},"/v1.0.6/reference/api#aggregates",[3560,3844],{"id":20408,"title":3852,"titles":20409,"content":3854,"level":155},"/v1.0.6/reference/api#filter-aggregates",[3560,3844],{"id":20411,"title":18295,"titles":20412,"content":19357,"level":155},"/v1.0.6/reference/api#binary-expressions",[3560,3844],{"id":20414,"title":1251,"titles":20415,"content":3858,"level":155},"/v1.0.6/reference/api#conditions",[3560,3844],{"id":20417,"title":3006,"titles":20418,"content":3862,"level":155},"/v1.0.6/reference/api#subqueries",[3560,3844],{"id":20420,"title":3865,"titles":20421,"content":3867,"level":155},"/v1.0.6/reference/api#case-expression",[3560,3844],{"id":20423,"title":3870,"titles":20424,"content":3872,"level":155},"/v1.0.6/reference/api#null-handling",[3560,3844],{"id":20426,"title":3203,"titles":20427,"content":3876,"level":155},"/v1.0.6/reference/api#math-functions",[3560,3844],{"id":20429,"title":5855,"titles":20430,"content":5857,"level":155},"/v1.0.6/reference/api#string-functions",[3560,3844],{"id":20432,"title":5860,"titles":20433,"content":5862,"level":155},"/v1.0.6/reference/api#date-functions",[3560,3844],{"id":20435,"title":3221,"titles":20436,"content":3880,"level":155},"/v1.0.6/reference/api#type-casting",[3560,3844],{"id":20438,"title":3173,"titles":20439,"content":3884,"level":155},"/v1.0.6/reference/api#window-functions",[3560,3844],{"id":20441,"title":3193,"titles":20442,"content":3888,"level":155},"/v1.0.6/reference/api#window-specification",[3560,3844],{"id":20444,"title":3891,"titles":20445,"content":3893,"level":155},"/v1.0.6/reference/api#windowbuilder-methods",[3560,3844],{"id":20447,"title":3896,"titles":20448,"content":3898,"level":155},"/v1.0.6/reference/api#expression-alias",[3560,3844],{"id":20450,"title":3163,"titles":20451,"content":3902,"level":155},"/v1.0.6/reference/api#having-helpers",[3560,3844],{"id":20453,"title":3905,"titles":20454,"content":99,"level":136},"/v1.0.6/reference/api#types",[3560],{"id":20456,"title":3909,"titles":20457,"content":3911,"level":155},"/v1.0.6/reference/api#queryresult",[3560,3905],{"id":20459,"title":3914,"titles":20460,"content":3916,"level":155},"/v1.0.6/reference/api#direction",[3560,3905],{"id":20462,"title":3919,"titles":20463,"content":3921,"level":155},"/v1.0.6/reference/api#nullsordering",[3560,3905],{"id":20465,"title":3924,"titles":20466,"content":5896,"level":155},"/v1.0.6/reference/api#operation",[3560,3905],{"id":20468,"title":5899,"titles":20469,"content":99,"level":136},"/v1.0.6/reference/api#providers",[3560],{"id":20471,"title":5903,"titles":20472,"content":13180,"level":155},"/v1.0.6/reference/api#renderer-interface",[3560,5899],{"id":20474,"title":1187,"titles":20475,"content":14214,"level":155},"/v1.0.6/reference/api#capabilities",[3560,5899],{"id":20477,"title":5908,"titles":20478,"content":15253,"level":155},"/v1.0.6/reference/api#postgresql-provider",[3560,5899],{"id":20480,"title":5913,"titles":20481,"content":18367,"level":155},"/v1.0.6/reference/api#sqlite-provider",[3560,5899],{"id":20483,"title":12159,"titles":20484,"content":18371,"level":155},"/v1.0.6/reference/api#mariadb-provider",[3560,5899],{"id":20486,"title":5923,"titles":20487,"content":18375,"level":155},"/v1.0.6/reference/api#sql-server-provider",[3560,5899],{"id":20489,"title":3929,"titles":20490,"content":3931,"level":107},"/v1.0.6/reference/operators",[],{"id":20492,"title":3929,"titles":20493,"content":3935,"level":107},"/v1.0.6/reference/operators#operators-reference",[],{"id":20495,"title":2959,"titles":20496,"content":3939,"level":136},"/v1.0.6/reference/operators#comparison-operators",[3929],{"id":20498,"title":3341,"titles":20499,"content":3943,"level":155},"/v1.0.6/reference/operators#usage",[3929,2959],{"id":20501,"title":2964,"titles":20502,"content":3947,"level":136},"/v1.0.6/reference/operators#pattern-matching",[3929],{"id":20504,"title":3341,"titles":20505,"content":3951,"level":155},"/v1.0.6/reference/operators#usage-1",[3929,2964],{"id":20507,"title":3954,"titles":20508,"content":3956,"level":136},"/v1.0.6/reference/operators#null-operators",[3929],{"id":20510,"title":3341,"titles":20511,"content":3960,"level":155},"/v1.0.6/reference/operators#usage-2",[3929,3954],{"id":20513,"title":2974,"titles":20514,"content":3964,"level":136},"/v1.0.6/reference/operators#array-operators",[3929],{"id":20516,"title":3341,"titles":20517,"content":3968,"level":155},"/v1.0.6/reference/operators#usage-3",[3929,2974],{"id":20519,"title":3971,"titles":20520,"content":3973,"level":155},"/v1.0.6/reference/operators#with-sqlx",[3929,2974],{"id":20522,"title":3976,"titles":20523,"content":3978,"level":136},"/v1.0.6/reference/operators#subquery-operators",[3929],{"id":20525,"title":3341,"titles":20526,"content":3982,"level":155},"/v1.0.6/reference/operators#usage-4",[3929,3976],{"id":20528,"title":3985,"titles":20529,"content":3987,"level":136},"/v1.0.6/reference/operators#regex-operators",[3929],{"id":20531,"title":3341,"titles":20532,"content":3991,"level":155},"/v1.0.6/reference/operators#usage-5",[3929,3985],{"id":20534,"title":3994,"titles":20535,"content":3996,"level":136},"/v1.0.6/reference/operators#postgresql-array-operators",[3929],{"id":20537,"title":3341,"titles":20538,"content":4000,"level":155},"/v1.0.6/reference/operators#usage-6",[3929,3994],{"id":20540,"title":18429,"titles":20541,"content":18431,"level":136},"/v1.0.6/reference/operators#jsonb-field-access-postgresql",[3929],{"id":20543,"title":3341,"titles":20544,"content":18435,"level":155},"/v1.0.6/reference/operators#usage-7",[3929,18429],{"id":20546,"title":4003,"titles":20547,"content":4005,"level":136},"/v1.0.6/reference/operators#vector-operators-pgvector",[3929],{"id":20549,"title":3341,"titles":20550,"content":4009,"level":155},"/v1.0.6/reference/operators#usage-8",[3929,4003],{"id":20552,"title":4012,"titles":20553,"content":4014,"level":155},"/v1.0.6/reference/operators#with-pgvector",[3929,4003],{"id":20555,"title":4017,"titles":20556,"content":4019,"level":136},"/v1.0.6/reference/operators#operator-selection-guide",[3929],{"id":20558,"title":3124,"titles":20559,"content":4023,"level":136},"/v1.0.6/reference/operators#aggregate-functions",[3929],{"id":20561,"title":3173,"titles":20562,"content":4027,"level":136},"/v1.0.6/reference/operators#window-functions",[3929],{"id":20564,"title":3198,"titles":20565,"content":4031,"level":136},"/v1.0.6/reference/operators#frame-bounds",[3929],{"id":20567,"title":4034,"titles":20568,"content":4036,"level":136},"/v1.0.6/reference/operators#cast-types",[3929],{"id":20570,"title":1614,"titles":20571,"content":2581,"level":107},"/v1.0.7/overview",[],{"id":20573,"title":1614,"titles":20574,"content":14309,"level":107},"/v1.0.7/overview#overview",[],{"id":20576,"title":1237,"titles":20577,"content":2589,"level":136},"/v1.0.7/overview#architecture",[1614],{"id":20579,"title":2592,"titles":20580,"content":2594,"level":136},"/v1.0.7/overview#philosophy",[1614],{"id":20582,"title":1187,"titles":20583,"content":2598,"level":136},"/v1.0.7/overview#capabilities",[1614],{"id":20585,"title":2601,"titles":20586,"content":99,"level":136},"/v1.0.7/overview#priorities",[1614],{"id":20588,"title":1782,"titles":20589,"content":2606,"level":155},"/v1.0.7/overview#security",[1614,2601],{"id":20591,"title":2609,"titles":20592,"content":6026,"level":155},"/v1.0.7/overview#ergonomics",[1614,2601],{"id":20594,"title":5002,"titles":20595,"content":14331,"level":155},"/v1.0.7/overview#multi-provider-architecture",[1614,2601],{"id":20597,"title":1628,"titles":20598,"content":2620,"level":107},"/v1.0.7/learn/quickstart",[],{"id":20600,"title":1628,"titles":20601,"content":99,"level":107},"/v1.0.7/learn/quickstart#quickstart",[],{"id":20603,"title":2626,"titles":20604,"content":6040,"level":136},"/v1.0.7/learn/quickstart#requirements",[1628],{"id":20606,"title":2631,"titles":20607,"content":2633,"level":136},"/v1.0.7/learn/quickstart#installation",[1628],{"id":20609,"title":2636,"titles":20610,"content":14347,"level":136},"/v1.0.7/learn/quickstart#basic-usage",[1628],{"id":20612,"title":2641,"titles":20613,"content":6051,"level":136},"/v1.0.7/learn/quickstart#whats-happening",[1628],{"id":20615,"title":2646,"titles":20616,"content":20617,"level":136},"/v1.0.7/learn/quickstart#using-with-sqlx",[1628],"The output is designed for use with sqlx named queries: result, _ := astql.Select(instance.T(\"users\")).\n    Fields(instance.F(\"username\"), instance.F(\"email\")).\n    Where(instance.C(instance.F(\"active\"), astql.EQ, instance.P(\"is_active\"))).\n    Render(postgres.New())\n\n// Execute with sqlx\nparams := map[string]any{\"is_active\": true}\nrows, err := db.NamedQuery(result.SQL, params) html pre.shiki code .sUt3r, html code.shiki .sUt3r{--shiki-default:var(--shiki-keyword)}html pre.shiki code .sYBwO, html code.shiki .sYBwO{--shiki-default:var(--shiki-type)}html pre.shiki code .soy-K, html code.shiki .soy-K{--shiki-default:#BBBBBB}html pre.shiki code .sxAnc, html code.shiki .sxAnc{--shiki-default:var(--shiki-string)}html pre.shiki code .s5klm, html code.shiki .s5klm{--shiki-default:var(--shiki-function)}html pre.shiki code .sq5bi, html code.shiki .sq5bi{--shiki-default:var(--shiki-punctuation)}html pre.shiki code .sLkEo, html code.shiki .sLkEo{--shiki-default:var(--shiki-comment)}html pre.shiki code .sh8_p, html code.shiki .sh8_p{--shiki-default:var(--shiki-text)}html pre.shiki code .sW3Qg, html code.shiki .sW3Qg{--shiki-default:var(--shiki-operator)}html pre.shiki code .skxcq, html code.shiki .skxcq{--shiki-default:var(--shiki-builtin)}html pre.shiki code .sMAmT, html code.shiki .sMAmT{--shiki-default:var(--shiki-number)}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"id":20619,"title":2651,"titles":20620,"content":2653,"level":107},"/v1.0.7/learn/concepts",[],{"id":20622,"title":2651,"titles":20623,"content":2657,"level":107},"/v1.0.7/learn/concepts#core-concepts",[],{"id":20625,"title":2660,"titles":20626,"content":2662,"level":136},"/v1.0.7/learn/concepts#tables",[2651],{"id":20628,"title":2665,"titles":20629,"content":2667,"level":136},"/v1.0.7/learn/concepts#fields",[2651],{"id":20631,"title":2670,"titles":20632,"content":2672,"level":155},"/v1.0.7/learn/concepts#field-validation",[2651,2665],{"id":20634,"title":2675,"titles":20635,"content":2677,"level":136},"/v1.0.7/learn/concepts#params",[2651],{"id":20637,"title":2680,"titles":20638,"content":2682,"level":155},"/v1.0.7/learn/concepts#parameter-validation",[2651,2675],{"id":20640,"title":1251,"titles":20641,"content":2686,"level":136},"/v1.0.7/learn/concepts#conditions",[2651],{"id":20643,"title":1727,"titles":20644,"content":2690,"level":155},"/v1.0.7/learn/concepts#operators",[2651,1251],{"id":20646,"title":2693,"titles":20647,"content":2695,"level":155},"/v1.0.7/learn/concepts#combining-conditions",[2651,1251],{"id":20649,"title":2698,"titles":20650,"content":2700,"level":155},"/v1.0.7/learn/concepts#nested-conditions",[2651,1251],{"id":20652,"title":2703,"titles":20653,"content":2705,"level":155},"/v1.0.7/learn/concepts#null-conditions",[2651,1251],{"id":20655,"title":2708,"titles":20656,"content":2710,"level":155},"/v1.0.7/learn/concepts#field-comparisons",[2651,1251],{"id":20658,"title":2713,"titles":20659,"content":2715,"level":136},"/v1.0.7/learn/concepts#builders",[2651],{"id":20661,"title":2718,"titles":20662,"content":6101,"level":155},"/v1.0.7/learn/concepts#fluent-api",[2651,2713],{"id":20664,"title":2723,"titles":20665,"content":6105,"level":155},"/v1.0.7/learn/concepts#build-vs-render",[2651,2713],{"id":20667,"title":2728,"titles":20668,"content":6109,"level":155},"/v1.0.7/learn/concepts#must-variants",[2651,2713],{"id":20670,"title":2733,"titles":20671,"content":2735,"level":136},"/v1.0.7/learn/concepts#try-variants",[2651],{"id":20673,"title":2738,"titles":20674,"content":2740,"level":136},"/v1.0.7/learn/concepts#query-result",[2651],{"id":20676,"title":1237,"titles":20677,"content":2744,"level":107},"/v1.0.7/learn/architecture",[],{"id":20679,"title":1237,"titles":20680,"content":2748,"level":107},"/v1.0.7/learn/architecture#architecture",[],{"id":20682,"title":2751,"titles":20683,"content":2753,"level":136},"/v1.0.7/learn/architecture#pipeline-overview",[1237],{"id":20685,"title":2756,"titles":20686,"content":99,"level":136},"/v1.0.7/learn/architecture#validation-layer",[1237],{"id":20688,"title":1215,"titles":20689,"content":2761,"level":155},"/v1.0.7/learn/architecture#schema-validation",[1237,2756],{"id":20691,"title":2764,"titles":20692,"content":2766,"level":155},"/v1.0.7/learn/architecture#identifier-validation",[1237,2756],{"id":20694,"title":2769,"titles":20695,"content":2771,"level":155},"/v1.0.7/learn/architecture#alias-restrictions",[1237,2756],{"id":20697,"title":2774,"titles":20698,"content":5107,"level":136},"/v1.0.7/learn/architecture#ast-structure",[1237],{"id":20700,"title":2779,"titles":20701,"content":2781,"level":155},"/v1.0.7/learn/architecture#internal-types",[1237,2774],{"id":20703,"title":2784,"titles":20704,"content":2786,"level":155},"/v1.0.7/learn/architecture#condition-types",[1237,2774],{"id":20706,"title":2789,"titles":20707,"content":2791,"level":136},"/v1.0.7/learn/architecture#render-engine",[1237],{"id":20709,"title":2794,"titles":20710,"content":2796,"level":155},"/v1.0.7/learn/architecture#identifier-quoting",[1237,2789],{"id":20712,"title":2799,"titles":20713,"content":2801,"level":155},"/v1.0.7/learn/architecture#parameter-placeholders",[1237,2789],{"id":20715,"title":2804,"titles":20716,"content":2806,"level":155},"/v1.0.7/learn/architecture#parameter-namespacing",[1237,2789],{"id":20718,"title":5128,"titles":20719,"content":12390,"level":136},"/v1.0.7/learn/architecture#provider-architecture",[1237],{"id":20721,"title":5133,"titles":20722,"content":14459,"level":155},"/v1.0.7/learn/architecture#available-providers",[1237,5128],{"id":20724,"title":3341,"titles":20725,"content":14463,"level":155},"/v1.0.7/learn/architecture#usage",[1237,5128],{"id":20727,"title":5142,"titles":20728,"content":11369,"level":155},"/v1.0.7/learn/architecture#dialect-differences",[1237,5128],{"id":20730,"title":2809,"titles":20731,"content":11373,"level":136},"/v1.0.7/learn/architecture#file-structure",[1237],{"id":20733,"title":2814,"titles":20734,"content":2816,"level":136},"/v1.0.7/learn/architecture#security-layers",[1237],{"id":20736,"title":2819,"titles":20737,"content":99,"level":136},"/v1.0.7/learn/architecture#extension-points",[1237],{"id":20739,"title":2823,"titles":20740,"content":2825,"level":155},"/v1.0.7/learn/architecture#custom-expressions",[1237,2819],{"id":20742,"title":2828,"titles":20743,"content":2830,"level":155},"/v1.0.7/learn/architecture#compound-queries",[1237,2819],{"id":20745,"title":2833,"titles":20746,"content":6191,"level":155},"/v1.0.7/learn/architecture#direct-ast-access",[1237,2819],{"id":20748,"title":1215,"titles":20749,"content":2839,"level":107},"/v1.0.7/guides/schema-validation",[],{"id":20751,"title":1215,"titles":20752,"content":2843,"level":107},"/v1.0.7/guides/schema-validation#schema-validation",[],{"id":20754,"title":2846,"titles":20755,"content":2848,"level":136},"/v1.0.7/guides/schema-validation#defining-a-schema",[1215],{"id":20757,"title":2851,"titles":20758,"content":2853,"level":136},"/v1.0.7/guides/schema-validation#creating-an-instance",[1215],{"id":20760,"title":2856,"titles":20761,"content":99,"level":136},"/v1.0.7/guides/schema-validation#validation-behavior",[1215],{"id":20763,"title":2860,"titles":20764,"content":2862,"level":155},"/v1.0.7/guides/schema-validation#table-validation",[1215,2856],{"id":20766,"title":2670,"titles":20767,"content":2866,"level":155},"/v1.0.7/guides/schema-validation#field-validation",[1215,2856],{"id":20769,"title":2680,"titles":20770,"content":2870,"level":155},"/v1.0.7/guides/schema-validation#parameter-validation",[1215,2856],{"id":20772,"title":2873,"titles":20773,"content":2875,"level":136},"/v1.0.7/guides/schema-validation#panic-vs-error",[1215],{"id":20775,"title":2733,"titles":20776,"content":2879,"level":155},"/v1.0.7/guides/schema-validation#try-variants",[1215,2873],{"id":20778,"title":2882,"titles":20779,"content":2884,"level":155},"/v1.0.7/guides/schema-validation#when-to-use-each",[1215,2873],{"id":20781,"title":2887,"titles":20782,"content":2889,"level":136},"/v1.0.7/guides/schema-validation#table-aliases",[1215],{"id":20784,"title":2769,"titles":20785,"content":2893,"level":155},"/v1.0.7/guides/schema-validation#alias-restrictions",[1215,2887],{"id":20787,"title":2896,"titles":20788,"content":2898,"level":155},"/v1.0.7/guides/schema-validation#using-aliases-with-fields",[1215,2887],{"id":20790,"title":2901,"titles":20791,"content":99,"level":136},"/v1.0.7/guides/schema-validation#schema-organization",[1215],{"id":20793,"title":2905,"titles":20794,"content":6240,"level":155},"/v1.0.7/guides/schema-validation#single-schema-instance",[1215,2901],{"id":20796,"title":2910,"titles":20797,"content":2912,"level":155},"/v1.0.7/guides/schema-validation#multiple-schemas",[1215,2901],{"id":20799,"title":2915,"titles":20800,"content":99,"level":136},"/v1.0.7/guides/schema-validation#dynamic-queries",[1215],{"id":20802,"title":2919,"titles":20803,"content":6250,"level":155},"/v1.0.7/guides/schema-validation#safe-dynamic-field-selection",[1215,2915],{"id":20805,"title":2924,"titles":20806,"content":2926,"level":155},"/v1.0.7/guides/schema-validation#dynamic-conditions",[1215,2915],{"id":20808,"title":2929,"titles":20809,"content":99,"level":136},"/v1.0.7/guides/schema-validation#validation-errors",[1215],{"id":20811,"title":2933,"titles":20812,"content":2935,"level":155},"/v1.0.7/guides/schema-validation#error-types",[1215,2929],{"id":20814,"title":2938,"titles":20815,"content":6263,"level":155},"/v1.0.7/guides/schema-validation#handling-errors",[1215,2929],{"id":20817,"title":1251,"titles":20818,"content":2944,"level":107},"/v1.0.7/guides/conditions",[],{"id":20820,"title":1251,"titles":20821,"content":2948,"level":107},"/v1.0.7/guides/conditions#conditions",[],{"id":20823,"title":2951,"titles":20824,"content":2953,"level":136},"/v1.0.7/guides/conditions#basic-conditions",[1251],{"id":20826,"title":1727,"titles":20827,"content":99,"level":136},"/v1.0.7/guides/conditions#operators",[1251],{"id":20829,"title":2959,"titles":20830,"content":2961,"level":155},"/v1.0.7/guides/conditions#comparison-operators",[1251,1727],{"id":20832,"title":2964,"titles":20833,"content":2966,"level":155},"/v1.0.7/guides/conditions#pattern-matching",[1251,1727],{"id":20835,"title":2969,"titles":20836,"content":2971,"level":155},"/v1.0.7/guides/conditions#null-checks",[1251,1727],{"id":20838,"title":2974,"titles":20839,"content":2976,"level":155},"/v1.0.7/guides/conditions#array-operators",[1251,1727],{"id":20841,"title":2693,"titles":20842,"content":99,"level":136},"/v1.0.7/guides/conditions#combining-conditions",[1251],{"id":20844,"title":2982,"titles":20845,"content":2984,"level":155},"/v1.0.7/guides/conditions#and",[1251,2693],{"id":20847,"title":2987,"titles":20848,"content":2989,"level":155},"/v1.0.7/guides/conditions#or",[1251,2693],{"id":20850,"title":2992,"titles":20851,"content":2994,"level":155},"/v1.0.7/guides/conditions#nested-logic",[1251,2693],{"id":20853,"title":2997,"titles":20854,"content":2999,"level":136},"/v1.0.7/guides/conditions#between",[1251],{"id":20856,"title":2708,"titles":20857,"content":3003,"level":136},"/v1.0.7/guides/conditions#field-comparisons",[1251],{"id":20859,"title":3006,"titles":20860,"content":99,"level":136},"/v1.0.7/guides/conditions#subqueries",[1251],{"id":20862,"title":3010,"titles":20863,"content":3012,"level":155},"/v1.0.7/guides/conditions#in-subquery",[1251,3006],{"id":20865,"title":3015,"titles":20866,"content":3017,"level":155},"/v1.0.7/guides/conditions#not-in-subquery",[1251,3006],{"id":20868,"title":3020,"titles":20869,"content":3022,"level":155},"/v1.0.7/guides/conditions#exists",[1251,3006],{"id":20871,"title":3025,"titles":20872,"content":3027,"level":155},"/v1.0.7/guides/conditions#not-exists",[1251,3006],{"id":20874,"title":2804,"titles":20875,"content":3031,"level":155},"/v1.0.7/guides/conditions#parameter-namespacing",[1251,3006],{"id":20877,"title":3034,"titles":20878,"content":3036,"level":136},"/v1.0.7/guides/conditions#multiple-where-clauses",[1251],{"id":20880,"title":3039,"titles":20881,"content":3041,"level":136},"/v1.0.7/guides/conditions#wherefield-shorthand",[1251],{"id":20883,"title":3044,"titles":20884,"content":3046,"level":136},"/v1.0.7/guides/conditions#building-conditions-dynamically",[1251],{"id":20886,"title":1265,"titles":20887,"content":3050,"level":107},"/v1.0.7/guides/joins",[],{"id":20889,"title":1265,"titles":20890,"content":3054,"level":107},"/v1.0.7/guides/joins#joins",[],{"id":20892,"title":3057,"titles":20893,"content":3059,"level":136},"/v1.0.7/guides/joins#join-types",[1265],{"id":20895,"title":3062,"titles":20896,"content":3064,"level":136},"/v1.0.7/guides/joins#basic-join",[1265],{"id":20898,"title":2887,"titles":20899,"content":3068,"level":136},"/v1.0.7/guides/joins#table-aliases",[1265],{"id":20901,"title":3071,"titles":20902,"content":3073,"level":136},"/v1.0.7/guides/joins#left-join",[1265],{"id":20904,"title":3076,"titles":20905,"content":3078,"level":136},"/v1.0.7/guides/joins#right-join",[1265],{"id":20907,"title":3081,"titles":20908,"content":3083,"level":136},"/v1.0.7/guides/joins#full-outer-join",[1265],{"id":20910,"title":3086,"titles":20911,"content":3088,"level":136},"/v1.0.7/guides/joins#cross-join",[1265],{"id":20913,"title":3091,"titles":20914,"content":3093,"level":136},"/v1.0.7/guides/joins#multiple-joins",[1265],{"id":20916,"title":3096,"titles":20917,"content":3098,"level":136},"/v1.0.7/guides/joins#complex-on-conditions",[1265],{"id":20919,"title":3101,"titles":20920,"content":3103,"level":136},"/v1.0.7/guides/joins#self-joins",[1265],{"id":20922,"title":3106,"titles":20923,"content":3108,"level":136},"/v1.0.7/guides/joins#joins-with-count",[1265],{"id":20925,"title":3111,"titles":20926,"content":3113,"level":136},"/v1.0.7/guides/joins#join-validation",[1265],{"id":20928,"title":1668,"titles":20929,"content":3117,"level":107},"/v1.0.7/guides/aggregates",[],{"id":20931,"title":1668,"titles":20932,"content":3121,"level":107},"/v1.0.7/guides/aggregates#aggregates",[],{"id":20934,"title":3124,"titles":20935,"content":99,"level":136},"/v1.0.7/guides/aggregates#aggregate-functions",[1668],{"id":20937,"title":3128,"titles":20938,"content":3130,"level":155},"/v1.0.7/guides/aggregates#basic-aggregates",[1668,3124],{"id":20940,"title":3133,"titles":20941,"content":3135,"level":155},"/v1.0.7/guides/aggregates#using-aggregates",[1668,3124],{"id":20943,"title":3138,"titles":20944,"content":3140,"level":155},"/v1.0.7/guides/aggregates#aliases",[1668,3124],{"id":20946,"title":3143,"titles":20947,"content":3145,"level":136},"/v1.0.7/guides/aggregates#group-by",[1668],{"id":20949,"title":3148,"titles":20950,"content":3150,"level":136},"/v1.0.7/guides/aggregates#having",[1668],{"id":20952,"title":3153,"titles":20953,"content":3155,"level":155},"/v1.0.7/guides/aggregates#simple-having",[1668,3148],{"id":20955,"title":3158,"titles":20956,"content":3160,"level":155},"/v1.0.7/guides/aggregates#aggregate-having",[1668,3148],{"id":20958,"title":3163,"titles":20959,"content":3165,"level":155},"/v1.0.7/guides/aggregates#having-helpers",[1668,3148],{"id":20961,"title":3168,"titles":20962,"content":3170,"level":136},"/v1.0.7/guides/aggregates#filter-clause",[1668],{"id":20964,"title":3173,"titles":20965,"content":3175,"level":136},"/v1.0.7/guides/aggregates#window-functions",[1668],{"id":20967,"title":3178,"titles":20968,"content":3180,"level":155},"/v1.0.7/guides/aggregates#basic-window-functions",[1668,3173],{"id":20970,"title":3183,"titles":20971,"content":3185,"level":155},"/v1.0.7/guides/aggregates#window-function-types",[1668,3173],{"id":20973,"title":3188,"titles":20974,"content":3190,"level":155},"/v1.0.7/guides/aggregates#aggregate-window-functions",[1668,3173],{"id":20976,"title":3193,"titles":20977,"content":3195,"level":155},"/v1.0.7/guides/aggregates#window-specification",[1668,3173],{"id":20979,"title":3198,"titles":20980,"content":3200,"level":155},"/v1.0.7/guides/aggregates#frame-bounds",[1668,3173],{"id":20982,"title":3203,"titles":20983,"content":99,"level":136},"/v1.0.7/guides/aggregates#math-functions",[1668],{"id":20985,"title":3207,"titles":20986,"content":3209,"level":155},"/v1.0.7/guides/aggregates#available-functions",[1668,3203],{"id":20988,"title":3212,"titles":20989,"content":3214,"level":155},"/v1.0.7/guides/aggregates#example",[1668,3203],{"id":20991,"title":1270,"titles":20992,"content":3218,"level":136},"/v1.0.7/guides/aggregates#case-expressions",[1668],{"id":20994,"title":3221,"titles":20995,"content":3223,"level":136},"/v1.0.7/guides/aggregates#type-casting",[1668],{"id":20997,"title":3226,"titles":20998,"content":3228,"level":136},"/v1.0.7/guides/aggregates#coalesce-and-nullif",[1668],{"id":21000,"title":1675,"titles":21001,"content":3232,"level":107},"/v1.0.7/guides/testing",[],{"id":21003,"title":1675,"titles":21004,"content":3236,"level":107},"/v1.0.7/guides/testing#testing",[],{"id":21006,"title":3239,"titles":21007,"content":99,"level":136},"/v1.0.7/guides/testing#testing-query-output",[1675],{"id":21009,"title":3243,"titles":21010,"content":6459,"level":155},"/v1.0.7/guides/testing#basic-output-testing",[1675,3239],{"id":21012,"title":3248,"titles":21013,"content":3250,"level":155},"/v1.0.7/guides/testing#test-instance-setup",[1675,3239],{"id":21015,"title":3253,"titles":21016,"content":99,"level":136},"/v1.0.7/guides/testing#table-driven-tests",[1675],{"id":21018,"title":3257,"titles":21019,"content":6469,"level":155},"/v1.0.7/guides/testing#testing-multiple-queries",[1675,3253],{"id":21021,"title":3262,"titles":21022,"content":99,"level":136},"/v1.0.7/guides/testing#testing-validation",[1675],{"id":21024,"title":3266,"titles":21025,"content":3268,"level":155},"/v1.0.7/guides/testing#testing-invalid-input",[1675,3262],{"id":21027,"title":3271,"titles":21028,"content":3273,"level":155},"/v1.0.7/guides/testing#testing-try-variants",[1675,3262],{"id":21030,"title":3276,"titles":21031,"content":99,"level":136},"/v1.0.7/guides/testing#testing-error-cases",[1675],{"id":21033,"title":3280,"titles":21034,"content":6485,"level":155},"/v1.0.7/guides/testing#builder-errors",[1675,3276],{"id":21036,"title":3285,"titles":21037,"content":99,"level":136},"/v1.0.7/guides/testing#testing-complex-queries",[1675],{"id":21039,"title":3289,"titles":21040,"content":6492,"level":155},"/v1.0.7/guides/testing#join-tests",[1675,3285],{"id":21042,"title":3294,"titles":21043,"content":6496,"level":155},"/v1.0.7/guides/testing#subquery-tests",[1675,3285],{"id":21045,"title":3299,"titles":21046,"content":3301,"level":136},"/v1.0.7/guides/testing#snapshot-testing",[1675],{"id":21048,"title":3304,"titles":21049,"content":99,"level":136},"/v1.0.7/guides/testing#best-practices",[1675],{"id":21051,"title":3308,"titles":21052,"content":3310,"level":155},"/v1.0.7/guides/testing#_1-test-query-structure-not-exact-strings",[1675,3304],{"id":21054,"title":3313,"titles":21055,"content":3315,"level":155},"/v1.0.7/guides/testing#_2-test-parameter-lists",[1675,3304],{"id":21057,"title":3318,"titles":21058,"content":3320,"level":155},"/v1.0.7/guides/testing#_3-isolate-test-schemas",[1675,3304],{"id":21060,"title":3323,"titles":21061,"content":6515,"level":155},"/v1.0.7/guides/testing#_4-test-edge-cases",[1675,3304],{"id":21063,"title":1688,"titles":21064,"content":3329,"level":107},"/v1.0.7/cookbook/pagination",[],{"id":21066,"title":1688,"titles":21067,"content":3333,"level":107},"/v1.0.7/cookbook/pagination#pagination",[],{"id":21069,"title":3336,"titles":21070,"content":6525,"level":136},"/v1.0.7/cookbook/pagination#offset-pagination",[1688],{"id":21072,"title":3341,"titles":21073,"content":3343,"level":155},"/v1.0.7/cookbook/pagination#usage",[1688,3336],{"id":21075,"title":3346,"titles":21076,"content":6532,"level":155},"/v1.0.7/cookbook/pagination#with-total-count",[1688,3336],{"id":21078,"title":3351,"titles":21079,"content":3353,"level":155},"/v1.0.7/cookbook/pagination#limitations-of-offset-pagination",[1688,3336],{"id":21081,"title":3356,"titles":21082,"content":6539,"level":136},"/v1.0.7/cookbook/pagination#cursor-pagination",[1688],{"id":21084,"title":3341,"titles":21085,"content":3362,"level":155},"/v1.0.7/cookbook/pagination#usage-1",[1688,3356],{"id":21087,"title":3365,"titles":21088,"content":6546,"level":155},"/v1.0.7/cookbook/pagination#bidirectional-cursor",[1688,3356],{"id":21090,"title":3370,"titles":21091,"content":6550,"level":155},"/v1.0.7/cookbook/pagination#multi-column-cursor",[1688,3356],{"id":21093,"title":3375,"titles":21094,"content":6554,"level":136},"/v1.0.7/cookbook/pagination#filtering-with-pagination",[1688],{"id":21096,"title":3380,"titles":21097,"content":6558,"level":136},"/v1.0.7/cookbook/pagination#pagination-with-joins",[1688],{"id":21099,"title":3304,"titles":21100,"content":99,"level":136},"/v1.0.7/cookbook/pagination#best-practices",[1688],{"id":21102,"title":3388,"titles":21103,"content":6565,"level":155},"/v1.0.7/cookbook/pagination#_1-always-include-order-by",[1688,3304],{"id":21105,"title":3393,"titles":21106,"content":3395,"level":155},"/v1.0.7/cookbook/pagination#_2-use-indexed-columns-for-cursors",[1688,3304],{"id":21108,"title":3398,"titles":21109,"content":3400,"level":155},"/v1.0.7/cookbook/pagination#_3-fetch-n1-for-has-more",[1688,3304],{"id":21111,"title":3403,"titles":21112,"content":3405,"level":155},"/v1.0.7/cookbook/pagination#_4-consider-distinct-on-for-deduplication",[1688,3304],{"id":21114,"title":1695,"titles":21115,"content":3409,"level":107},"/v1.0.7/cookbook/vector-search",[],{"id":21117,"title":1695,"titles":21118,"content":3413,"level":107},"/v1.0.7/cookbook/vector-search#vector-search",[],{"id":21120,"title":3416,"titles":21121,"content":3418,"level":136},"/v1.0.7/cookbook/vector-search#schema-setup",[1695],{"id":21123,"title":3421,"titles":21124,"content":3423,"level":136},"/v1.0.7/cookbook/vector-search#distance-operators",[1695],{"id":21126,"title":3426,"titles":21127,"content":3428,"level":136},"/v1.0.7/cookbook/vector-search#basic-similarity-search",[1695],{"id":21129,"title":3431,"titles":21130,"content":3433,"level":155},"/v1.0.7/cookbook/vector-search#execution-with-sqlx",[1695,3426],{"id":21132,"title":17962,"titles":21133,"content":19024,"level":136},"/v1.0.7/cookbook/vector-search#selecting-distance-as-a-column",[1695],{"id":21135,"title":3436,"titles":21136,"content":3438,"level":136},"/v1.0.7/cookbook/vector-search#cosine-similarity",[1695],{"id":21138,"title":3441,"titles":21139,"content":3443,"level":136},"/v1.0.7/cookbook/vector-search#inner-product-for-maximum-similarity",[1695],{"id":21141,"title":3446,"titles":21142,"content":3448,"level":136},"/v1.0.7/cookbook/vector-search#filtered-vector-search",[1695],{"id":21144,"title":3451,"titles":21145,"content":3453,"level":136},"/v1.0.7/cookbook/vector-search#k-nearest-neighbors-with-distance-threshold",[1695],{"id":21147,"title":3456,"titles":21148,"content":3458,"level":136},"/v1.0.7/cookbook/vector-search#hybrid-search",[1695],{"id":21150,"title":3461,"titles":21151,"content":3463,"level":136},"/v1.0.7/cookbook/vector-search#multi-vector-search",[1695],{"id":21153,"title":3466,"titles":21154,"content":3468,"level":136},"/v1.0.7/cookbook/vector-search#indexing-recommendations",[1695],{"id":21156,"title":3304,"titles":21157,"content":99,"level":136},"/v1.0.7/cookbook/vector-search#best-practices",[1695],{"id":21159,"title":3474,"titles":21160,"content":3476,"level":155},"/v1.0.7/cookbook/vector-search#_1-normalize-embeddings-for-cosine",[1695,3304],{"id":21162,"title":3479,"titles":21163,"content":3481,"level":155},"/v1.0.7/cookbook/vector-search#_2-use-appropriate-limits",[1695,3304],{"id":21165,"title":3484,"titles":21166,"content":3486,"level":155},"/v1.0.7/cookbook/vector-search#_3-pre-filter-when-possible",[1695,3304],{"id":21168,"title":1702,"titles":21169,"content":3490,"level":107},"/v1.0.7/cookbook/upserts",[],{"id":21171,"title":1702,"titles":21172,"content":3494,"level":107},"/v1.0.7/cookbook/upserts#upserts",[],{"id":21174,"title":3497,"titles":21175,"content":6635,"level":136},"/v1.0.7/cookbook/upserts#basic-upsert",[1702],{"id":21177,"title":3502,"titles":21178,"content":6639,"level":136},"/v1.0.7/cookbook/upserts#do-nothing",[1702],{"id":21180,"title":3507,"titles":21181,"content":6643,"level":136},"/v1.0.7/cookbook/upserts#multi-column-conflict",[1702],{"id":21183,"title":3512,"titles":21184,"content":6647,"level":136},"/v1.0.7/cookbook/upserts#returning-with-upsert",[1702],{"id":21186,"title":3517,"titles":21187,"content":6651,"level":136},"/v1.0.7/cookbook/upserts#batch-upsert",[1702],{"id":21189,"title":3522,"titles":21190,"content":6655,"level":136},"/v1.0.7/cookbook/upserts#conditional-upsert",[1702],{"id":21192,"title":3527,"titles":21193,"content":6659,"level":136},"/v1.0.7/cookbook/upserts#sync-pattern",[1702],{"id":21195,"title":3532,"titles":21196,"content":6663,"level":136},"/v1.0.7/cookbook/upserts#upsert-with-timestamps",[1702],{"id":21198,"title":3304,"titles":21199,"content":99,"level":136},"/v1.0.7/cookbook/upserts#best-practices",[1702],{"id":21201,"title":3540,"titles":21202,"content":3542,"level":155},"/v1.0.7/cookbook/upserts#_1-always-use-unique-constraints",[1702,3304],{"id":21204,"title":3545,"titles":21205,"content":3547,"level":155},"/v1.0.7/cookbook/upserts#_2-be-explicit-about-updated-fields",[1702,3304],{"id":21207,"title":3550,"titles":21208,"content":3552,"level":155},"/v1.0.7/cookbook/upserts#_3-use-returning-to-avoid-extra-queries",[1702,3304],{"id":21210,"title":3555,"titles":21211,"content":3557,"level":155},"/v1.0.7/cookbook/upserts#_4-consider-do-nothing-for-idempotency",[1702,3304],{"id":21213,"title":1709,"titles":21214,"content":6682,"level":107},"/v1.0.7/cookbook/orm-foundation",[],{"id":21216,"title":1709,"titles":21217,"content":6686,"level":107},"/v1.0.7/cookbook/orm-foundation#orm-foundation",[],{"id":21219,"title":6689,"titles":21220,"content":6691,"level":136},"/v1.0.7/cookbook/orm-foundation#the-result",[1709],{"id":21222,"title":6694,"titles":21223,"content":6696,"level":136},"/v1.0.7/cookbook/orm-foundation#the-architecture",[1709],{"id":21225,"title":6699,"titles":21226,"content":6701,"level":136},"/v1.0.7/cookbook/orm-foundation#how-astql-enables-this",[1709],{"id":21228,"title":6704,"titles":21229,"content":6706,"level":155},"/v1.0.7/cookbook/orm-foundation#_1-sentinel-extracts-metadata",[1709,6699],{"id":21231,"title":6709,"titles":21232,"content":6711,"level":155},"/v1.0.7/cookbook/orm-foundation#_2-cereal-builds-dbml-schema",[1709,6699],{"id":21234,"title":6714,"titles":21235,"content":6716,"level":155},"/v1.0.7/cookbook/orm-foundation#_3-astql-creates-validated-instance",[1709,6699],{"id":21237,"title":6719,"titles":21238,"content":6721,"level":155},"/v1.0.7/cookbook/orm-foundation#_4-queries-use-astql-builders",[1709,6699],{"id":21240,"title":6724,"titles":21241,"content":6726,"level":136},"/v1.0.7/cookbook/orm-foundation#the-security-model",[1709],{"id":21243,"title":6729,"titles":21244,"content":6731,"level":136},"/v1.0.7/cookbook/orm-foundation#escape-hatch-to-astql",[1709],{"id":21246,"title":6734,"titles":21247,"content":6736,"level":136},"/v1.0.7/cookbook/orm-foundation#building-your-own-orm",[1709],{"id":21249,"title":6739,"titles":21250,"content":6741,"level":155},"/v1.0.7/cookbook/orm-foundation#_1-extract-schema-from-your-source",[1709,6734],{"id":21252,"title":6744,"titles":21253,"content":6746,"level":155},"/v1.0.7/cookbook/orm-foundation#_2-create-astql-instance",[1709,6734],{"id":21255,"title":6749,"titles":21256,"content":6751,"level":155},"/v1.0.7/cookbook/orm-foundation#_3-wrap-query-builders",[1709,6734],{"id":21258,"title":6754,"titles":21259,"content":6756,"level":155},"/v1.0.7/cookbook/orm-foundation#_4-render-with-provider",[1709,6734],{"id":21261,"title":6759,"titles":21262,"content":6761,"level":136},"/v1.0.7/cookbook/orm-foundation#see-also",[1709],{"id":21264,"title":3560,"titles":21265,"content":3562,"level":107},"/v1.0.7/reference/api",[],{"id":21267,"title":3560,"titles":21268,"content":3566,"level":107},"/v1.0.7/reference/api#api-reference",[],{"id":21270,"title":3569,"titles":21271,"content":99,"level":136},"/v1.0.7/reference/api#instance-creation",[3560],{"id":21273,"title":856,"titles":21274,"content":3574,"level":155},"/v1.0.7/reference/api#newfromdbml",[3560,3569],{"id":21276,"title":3577,"titles":21277,"content":99,"level":136},"/v1.0.7/reference/api#instance-methods",[3560],{"id":21279,"title":119,"titles":21280,"content":3582,"level":155},"/v1.0.7/reference/api#t",[3560,3577],{"id":21282,"title":3585,"titles":21283,"content":3587,"level":155},"/v1.0.7/reference/api#tryt",[3560,3577],{"id":21285,"title":169,"titles":21286,"content":3591,"level":155},"/v1.0.7/reference/api#f",[3560,3577],{"id":21288,"title":3594,"titles":21289,"content":3596,"level":155},"/v1.0.7/reference/api#tryf",[3560,3577],{"id":21291,"title":316,"titles":21292,"content":3600,"level":155},"/v1.0.7/reference/api#p",[3560,3577],{"id":21294,"title":3603,"titles":21295,"content":3605,"level":155},"/v1.0.7/reference/api#tryp",[3560,3577],{"id":21297,"title":284,"titles":21298,"content":3609,"level":155},"/v1.0.7/reference/api#c",[3560,3577],{"id":21300,"title":3612,"titles":21301,"content":3614,"level":155},"/v1.0.7/reference/api#tryc",[3560,3577],{"id":21303,"title":3617,"titles":21304,"content":3619,"level":155},"/v1.0.7/reference/api#and",[3560,3577],{"id":21306,"title":3622,"titles":21307,"content":3624,"level":155},"/v1.0.7/reference/api#or",[3560,3577],{"id":21309,"title":3627,"titles":21310,"content":3629,"level":155},"/v1.0.7/reference/api#null",[3560,3577],{"id":21312,"title":3632,"titles":21313,"content":3634,"level":155},"/v1.0.7/reference/api#notnull",[3560,3577],{"id":21315,"title":3637,"titles":21316,"content":3639,"level":155},"/v1.0.7/reference/api#withtable",[3560,3577],{"id":21318,"title":3642,"titles":21319,"content":3644,"level":155},"/v1.0.7/reference/api#trywithtable",[3560,3577],{"id":21321,"title":3647,"titles":21322,"content":3649,"level":155},"/v1.0.7/reference/api#aggc",[3560,3577],{"id":21324,"title":3652,"titles":21325,"content":3654,"level":155},"/v1.0.7/reference/api#tryaggc",[3560,3577],{"id":21327,"title":3657,"titles":21328,"content":3659,"level":155},"/v1.0.7/reference/api#valuemap",[3560,3577],{"id":21330,"title":18162,"titles":21331,"content":18164,"level":155},"/v1.0.7/reference/api#jsonbtext",[3560,3577],{"id":21333,"title":18167,"titles":21334,"content":18169,"level":155},"/v1.0.7/reference/api#jsonbpath",[3560,3577],{"id":21336,"title":3662,"titles":21337,"content":99,"level":136},"/v1.0.7/reference/api#query-builders",[3560],{"id":21339,"title":219,"titles":21340,"content":3667,"level":155},"/v1.0.7/reference/api#select",[3560,3662],{"id":21342,"title":3670,"titles":21343,"content":3672,"level":155},"/v1.0.7/reference/api#insert",[3560,3662],{"id":21345,"title":3675,"titles":21346,"content":3677,"level":155},"/v1.0.7/reference/api#update",[3560,3662],{"id":21348,"title":3680,"titles":21349,"content":3682,"level":155},"/v1.0.7/reference/api#delete",[3560,3662],{"id":21351,"title":3685,"titles":21352,"content":3687,"level":155},"/v1.0.7/reference/api#count",[3560,3662],{"id":21354,"title":3690,"titles":21355,"content":99,"level":136},"/v1.0.7/reference/api#builder-methods",[3560],{"id":21357,"title":2665,"titles":21358,"content":3695,"level":155},"/v1.0.7/reference/api#fields",[3560,3690],{"id":21360,"title":3698,"titles":21361,"content":3700,"level":155},"/v1.0.7/reference/api#where",[3560,3690],{"id":21363,"title":3703,"titles":21364,"content":3705,"level":155},"/v1.0.7/reference/api#wherefield",[3560,3690],{"id":21366,"title":3708,"titles":21367,"content":3710,"level":155},"/v1.0.7/reference/api#orderby",[3560,3690],{"id":21369,"title":3713,"titles":21370,"content":3715,"level":155},"/v1.0.7/reference/api#orderbynulls",[3560,3690],{"id":21372,"title":3718,"titles":21373,"content":3720,"level":155},"/v1.0.7/reference/api#orderbyexpr",[3560,3690],{"id":21375,"title":3723,"titles":21376,"content":5734,"level":155},"/v1.0.7/reference/api#limit",[3560,3690],{"id":21378,"title":5737,"titles":21379,"content":5739,"level":155},"/v1.0.7/reference/api#limitparam",[3560,3690],{"id":21381,"title":3728,"titles":21382,"content":5743,"level":155},"/v1.0.7/reference/api#offset",[3560,3690],{"id":21384,"title":5746,"titles":21385,"content":5748,"level":155},"/v1.0.7/reference/api#offsetparam",[3560,3690],{"id":21387,"title":3733,"titles":21388,"content":3735,"level":155},"/v1.0.7/reference/api#set",[3560,3690],{"id":21390,"title":20335,"titles":21391,"content":20337,"level":155},"/v1.0.7/reference/api#setexpr",[3560,3690],{"id":21393,"title":3738,"titles":21394,"content":3740,"level":155},"/v1.0.7/reference/api#values",[3560,3690],{"id":21396,"title":3743,"titles":21397,"content":3745,"level":155},"/v1.0.7/reference/api#returning",[3560,3690],{"id":21399,"title":3748,"titles":21400,"content":3750,"level":155},"/v1.0.7/reference/api#distinct",[3560,3690],{"id":21402,"title":3753,"titles":21403,"content":3755,"level":155},"/v1.0.7/reference/api#distincton",[3560,3690],{"id":21405,"title":3758,"titles":21406,"content":3760,"level":155},"/v1.0.7/reference/api#groupby",[3560,3690],{"id":21408,"title":3763,"titles":21409,"content":3765,"level":155},"/v1.0.7/reference/api#having",[3560,3690],{"id":21411,"title":3768,"titles":21412,"content":3770,"level":155},"/v1.0.7/reference/api#havingagg",[3560,3690],{"id":21414,"title":3773,"titles":21415,"content":3775,"level":155},"/v1.0.7/reference/api#selectexpr",[3560,3690],{"id":21417,"title":19306,"titles":21418,"content":19308,"level":155},"/v1.0.7/reference/api#selectbinaryexpr",[3560,3690],{"id":21420,"title":3778,"titles":21421,"content":3780,"level":155},"/v1.0.7/reference/api#onconflict",[3560,3690],{"id":21423,"title":3783,"titles":21424,"content":3785,"level":155},"/v1.0.7/reference/api#join-methods",[3560,3690],{"id":21426,"title":3788,"titles":21427,"content":3790,"level":155},"/v1.0.7/reference/api#row-locking",[3560,3690],{"id":21429,"title":3793,"titles":21430,"content":3795,"level":155},"/v1.0.7/reference/api#build",[3560,3690],{"id":21432,"title":3798,"titles":21433,"content":3800,"level":155},"/v1.0.7/reference/api#mustbuild",[3560,3690],{"id":21435,"title":350,"titles":21436,"content":6924,"level":155},"/v1.0.7/reference/api#render",[3560,3690],{"id":21438,"title":3807,"titles":21439,"content":6928,"level":155},"/v1.0.7/reference/api#mustrender",[3560,3690],{"id":21441,"title":3812,"titles":21442,"content":99,"level":136},"/v1.0.7/reference/api#set-operations",[3560],{"id":21444,"title":3816,"titles":21445,"content":3818,"level":155},"/v1.0.7/reference/api#union-unionall",[3560,3812],{"id":21447,"title":3821,"titles":21448,"content":3823,"level":155},"/v1.0.7/reference/api#intersect-intersectall",[3560,3812],{"id":21450,"title":3826,"titles":21451,"content":3828,"level":155},"/v1.0.7/reference/api#except-exceptall",[3560,3812],{"id":21453,"title":3831,"titles":21454,"content":6944,"level":136},"/v1.0.7/reference/api#rendering",[3560],{"id":21456,"title":3844,"titles":21457,"content":99,"level":136},"/v1.0.7/reference/api#expression-functions",[3560],{"id":21459,"title":1668,"titles":21460,"content":3849,"level":155},"/v1.0.7/reference/api#aggregates",[3560,3844],{"id":21462,"title":3852,"titles":21463,"content":3854,"level":155},"/v1.0.7/reference/api#filter-aggregates",[3560,3844],{"id":21465,"title":18295,"titles":21466,"content":19357,"level":155},"/v1.0.7/reference/api#binary-expressions",[3560,3844],{"id":21468,"title":1251,"titles":21469,"content":3858,"level":155},"/v1.0.7/reference/api#conditions",[3560,3844],{"id":21471,"title":3006,"titles":21472,"content":3862,"level":155},"/v1.0.7/reference/api#subqueries",[3560,3844],{"id":21474,"title":3865,"titles":21475,"content":3867,"level":155},"/v1.0.7/reference/api#case-expression",[3560,3844],{"id":21477,"title":3870,"titles":21478,"content":3872,"level":155},"/v1.0.7/reference/api#null-handling",[3560,3844],{"id":21480,"title":3203,"titles":21481,"content":3876,"level":155},"/v1.0.7/reference/api#math-functions",[3560,3844],{"id":21483,"title":5855,"titles":21484,"content":5857,"level":155},"/v1.0.7/reference/api#string-functions",[3560,3844],{"id":21486,"title":5860,"titles":21487,"content":5862,"level":155},"/v1.0.7/reference/api#date-functions",[3560,3844],{"id":21489,"title":3221,"titles":21490,"content":3880,"level":155},"/v1.0.7/reference/api#type-casting",[3560,3844],{"id":21492,"title":3173,"titles":21493,"content":3884,"level":155},"/v1.0.7/reference/api#window-functions",[3560,3844],{"id":21495,"title":3193,"titles":21496,"content":3888,"level":155},"/v1.0.7/reference/api#window-specification",[3560,3844],{"id":21498,"title":3891,"titles":21499,"content":3893,"level":155},"/v1.0.7/reference/api#windowbuilder-methods",[3560,3844],{"id":21501,"title":3896,"titles":21502,"content":3898,"level":155},"/v1.0.7/reference/api#expression-alias",[3560,3844],{"id":21504,"title":3163,"titles":21505,"content":3902,"level":155},"/v1.0.7/reference/api#having-helpers",[3560,3844],{"id":21507,"title":3905,"titles":21508,"content":99,"level":136},"/v1.0.7/reference/api#types",[3560],{"id":21510,"title":3909,"titles":21511,"content":3911,"level":155},"/v1.0.7/reference/api#queryresult",[3560,3905],{"id":21513,"title":3914,"titles":21514,"content":3916,"level":155},"/v1.0.7/reference/api#direction",[3560,3905],{"id":21516,"title":3919,"titles":21517,"content":3921,"level":155},"/v1.0.7/reference/api#nullsordering",[3560,3905],{"id":21519,"title":3924,"titles":21520,"content":5896,"level":155},"/v1.0.7/reference/api#operation",[3560,3905],{"id":21522,"title":5899,"titles":21523,"content":99,"level":136},"/v1.0.7/reference/api#providers",[3560],{"id":21525,"title":5903,"titles":21526,"content":13180,"level":155},"/v1.0.7/reference/api#renderer-interface",[3560,5899],{"id":21528,"title":1187,"titles":21529,"content":14214,"level":155},"/v1.0.7/reference/api#capabilities",[3560,5899],{"id":21531,"title":5908,"titles":21532,"content":15253,"level":155},"/v1.0.7/reference/api#postgresql-provider",[3560,5899],{"id":21534,"title":5913,"titles":21535,"content":18367,"level":155},"/v1.0.7/reference/api#sqlite-provider",[3560,5899],{"id":21537,"title":12159,"titles":21538,"content":18371,"level":155},"/v1.0.7/reference/api#mariadb-provider",[3560,5899],{"id":21540,"title":5923,"titles":21541,"content":18375,"level":155},"/v1.0.7/reference/api#sql-server-provider",[3560,5899],{"id":21543,"title":3929,"titles":21544,"content":3931,"level":107},"/v1.0.7/reference/operators",[],{"id":21546,"title":3929,"titles":21547,"content":3935,"level":107},"/v1.0.7/reference/operators#operators-reference",[],{"id":21549,"title":2959,"titles":21550,"content":3939,"level":136},"/v1.0.7/reference/operators#comparison-operators",[3929],{"id":21552,"title":3341,"titles":21553,"content":3943,"level":155},"/v1.0.7/reference/operators#usage",[3929,2959],{"id":21555,"title":2964,"titles":21556,"content":3947,"level":136},"/v1.0.7/reference/operators#pattern-matching",[3929],{"id":21558,"title":3341,"titles":21559,"content":3951,"level":155},"/v1.0.7/reference/operators#usage-1",[3929,2964],{"id":21561,"title":3954,"titles":21562,"content":3956,"level":136},"/v1.0.7/reference/operators#null-operators",[3929],{"id":21564,"title":3341,"titles":21565,"content":3960,"level":155},"/v1.0.7/reference/operators#usage-2",[3929,3954],{"id":21567,"title":2974,"titles":21568,"content":3964,"level":136},"/v1.0.7/reference/operators#array-operators",[3929],{"id":21570,"title":3341,"titles":21571,"content":3968,"level":155},"/v1.0.7/reference/operators#usage-3",[3929,2974],{"id":21573,"title":3971,"titles":21574,"content":3973,"level":155},"/v1.0.7/reference/operators#with-sqlx",[3929,2974],{"id":21576,"title":3976,"titles":21577,"content":3978,"level":136},"/v1.0.7/reference/operators#subquery-operators",[3929],{"id":21579,"title":3341,"titles":21580,"content":3982,"level":155},"/v1.0.7/reference/operators#usage-4",[3929,3976],{"id":21582,"title":3985,"titles":21583,"content":3987,"level":136},"/v1.0.7/reference/operators#regex-operators",[3929],{"id":21585,"title":3341,"titles":21586,"content":3991,"level":155},"/v1.0.7/reference/operators#usage-5",[3929,3985],{"id":21588,"title":3994,"titles":21589,"content":3996,"level":136},"/v1.0.7/reference/operators#postgresql-array-operators",[3929],{"id":21591,"title":3341,"titles":21592,"content":4000,"level":155},"/v1.0.7/reference/operators#usage-6",[3929,3994],{"id":21594,"title":18429,"titles":21595,"content":18431,"level":136},"/v1.0.7/reference/operators#jsonb-field-access-postgresql",[3929],{"id":21597,"title":3341,"titles":21598,"content":18435,"level":155},"/v1.0.7/reference/operators#usage-7",[3929,18429],{"id":21600,"title":4003,"titles":21601,"content":4005,"level":136},"/v1.0.7/reference/operators#vector-operators-pgvector",[3929],{"id":21603,"title":3341,"titles":21604,"content":4009,"level":155},"/v1.0.7/reference/operators#usage-8",[3929,4003],{"id":21606,"title":4012,"titles":21607,"content":4014,"level":155},"/v1.0.7/reference/operators#with-pgvector",[3929,4003],{"id":21609,"title":4017,"titles":21610,"content":4019,"level":136},"/v1.0.7/reference/operators#operator-selection-guide",[3929],{"id":21612,"title":3124,"titles":21613,"content":4023,"level":136},"/v1.0.7/reference/operators#aggregate-functions",[3929],{"id":21615,"title":3173,"titles":21616,"content":4027,"level":136},"/v1.0.7/reference/operators#window-functions",[3929],{"id":21618,"title":3198,"titles":21619,"content":4031,"level":136},"/v1.0.7/reference/operators#frame-bounds",[3929],{"id":21621,"title":4034,"titles":21622,"content":4036,"level":136},"/v1.0.7/reference/operators#cast-types",[3929],[21624,21674,21723,21772,21823,21874,21925,21976,22027,22078,22129,22180,22231,22282,22333,22384,22435,22486],{"title":21625,"path":21626,"stem":21627,"children":21628,"page":21641},"V0014","/v0.0.14","v0.0.14",[21629,21631,21642,21656,21666],{"title":1614,"path":2579,"stem":21630,"description":2581},"v0.0.14/1.overview",{"title":1620,"path":21632,"stem":21633,"children":21634,"page":21641},"/v0.0.14/learn","v0.0.14/2.learn",[21635,21637,21639],{"title":1628,"path":2618,"stem":21636,"description":2620},"v0.0.14/2.learn/1.quickstart",{"title":2651,"path":2650,"stem":21638,"description":2653},"v0.0.14/2.learn/2.concepts",{"title":1237,"path":2742,"stem":21640,"description":2744},"v0.0.14/2.learn/3.architecture",false,{"title":1645,"path":21643,"stem":21644,"children":21645,"page":21641},"/v0.0.14/guides","v0.0.14/3.guides",[21646,21648,21650,21652,21654],{"title":1215,"path":2837,"stem":21647,"description":2839},"v0.0.14/3.guides/1.schema-validation",{"title":1251,"path":2942,"stem":21649,"description":2944},"v0.0.14/3.guides/2.conditions",{"title":1265,"path":3048,"stem":21651,"description":3050},"v0.0.14/3.guides/3.joins",{"title":1668,"path":3115,"stem":21653,"description":3117},"v0.0.14/3.guides/4.aggregates",{"title":1675,"path":3230,"stem":21655,"description":3232},"v0.0.14/3.guides/5.testing",{"title":1680,"path":21657,"stem":21658,"children":21659,"page":21641},"/v0.0.14/cookbook","v0.0.14/4.cookbook",[21660,21662,21664],{"title":1688,"path":3327,"stem":21661,"description":3329},"v0.0.14/4.cookbook/1.pagination",{"title":1695,"path":3407,"stem":21663,"description":3409},"v0.0.14/4.cookbook/2.vector-search",{"title":1702,"path":3488,"stem":21665,"description":3490},"v0.0.14/4.cookbook/3.upserts",{"title":1714,"path":21667,"stem":21668,"children":21669,"page":21641},"/v0.0.14/reference","v0.0.14/5.reference",[21670,21672],{"title":3560,"path":3559,"stem":21671,"description":3562},"v0.0.14/5.reference/1.api",{"title":3929,"path":3928,"stem":21673,"description":3931},"v0.0.14/5.reference/2.operators",{"title":21675,"path":21676,"stem":21677,"children":21678,"page":21641},"V0015","/v0.0.15","v0.0.15",[21679,21681,21691,21705,21715],{"title":1614,"path":4038,"stem":21680,"description":2581},"v0.0.15/1.overview",{"title":1620,"path":21682,"stem":21683,"children":21684,"page":21641},"/v0.0.15/learn","v0.0.15/2.learn",[21685,21687,21689],{"title":1628,"path":4065,"stem":21686,"description":2620},"v0.0.15/2.learn/1.quickstart",{"title":2651,"path":4086,"stem":21688,"description":2653},"v0.0.15/2.learn/2.concepts",{"title":1237,"path":4143,"stem":21690,"description":2744},"v0.0.15/2.learn/3.architecture",{"title":1645,"path":21692,"stem":21693,"children":21694,"page":21641},"/v0.0.15/guides","v0.0.15/3.guides",[21695,21697,21699,21701,21703],{"title":1215,"path":4203,"stem":21696,"description":2839},"v0.0.15/3.guides/1.schema-validation",{"title":1251,"path":4272,"stem":21698,"description":2944},"v0.0.15/3.guides/2.conditions",{"title":1265,"path":4341,"stem":21700,"description":3050},"v0.0.15/3.guides/3.joins",{"title":1668,"path":4383,"stem":21702,"description":3117},"v0.0.15/3.guides/4.aggregates",{"title":1675,"path":4455,"stem":21704,"description":3232},"v0.0.15/3.guides/5.testing",{"title":1680,"path":21706,"stem":21707,"children":21708,"page":21641},"/v0.0.15/cookbook","v0.0.15/4.cookbook",[21709,21711,21713],{"title":1688,"path":4518,"stem":21710,"description":3329},"v0.0.15/4.cookbook/1.pagination",{"title":1695,"path":4569,"stem":21712,"description":3409},"v0.0.15/4.cookbook/2.vector-search",{"title":1702,"path":4620,"stem":21714,"description":3490},"v0.0.15/4.cookbook/3.upserts",{"title":1714,"path":21716,"stem":21717,"children":21718,"page":21641},"/v0.0.15/reference","v0.0.15/5.reference",[21719,21721],{"title":3560,"path":4665,"stem":21720,"description":3562},"v0.0.15/5.reference/1.api",{"title":3929,"path":4902,"stem":21722,"description":3931},"v0.0.15/5.reference/2.operators",{"title":21724,"path":21725,"stem":21726,"children":21727,"page":21641},"V0016","/v0.0.16","v0.0.16",[21728,21730,21740,21754,21764],{"title":1614,"path":4977,"stem":21729,"description":2581},"v0.0.16/1.overview",{"title":1620,"path":21731,"stem":21732,"children":21733,"page":21641},"/v0.0.16/learn","v0.0.16/2.learn",[21734,21736,21738],{"title":1628,"path":5006,"stem":21735,"description":2620},"v0.0.16/2.learn/1.quickstart",{"title":2651,"path":5027,"stem":21737,"description":2653},"v0.0.16/2.learn/2.concepts",{"title":1237,"path":5084,"stem":21739,"description":2744},"v0.0.16/2.learn/3.architecture",{"title":1645,"path":21741,"stem":21742,"children":21743,"page":21641},"/v0.0.16/guides","v0.0.16/3.guides",[21744,21746,21748,21750,21752],{"title":1215,"path":5165,"stem":21745,"description":2839},"v0.0.16/3.guides/1.schema-validation",{"title":1251,"path":5234,"stem":21747,"description":2944},"v0.0.16/3.guides/2.conditions",{"title":1265,"path":5303,"stem":21749,"description":3050},"v0.0.16/3.guides/3.joins",{"title":1668,"path":5345,"stem":21751,"description":3117},"v0.0.16/3.guides/4.aggregates",{"title":1675,"path":5417,"stem":21753,"description":3232},"v0.0.16/3.guides/5.testing",{"title":1680,"path":21755,"stem":21756,"children":21757,"page":21641},"/v0.0.16/cookbook","v0.0.16/4.cookbook",[21758,21760,21762],{"title":1688,"path":5480,"stem":21759,"description":3329},"v0.0.16/4.cookbook/1.pagination",{"title":1695,"path":5531,"stem":21761,"description":3409},"v0.0.16/4.cookbook/2.vector-search",{"title":1702,"path":5582,"stem":21763,"description":3490},"v0.0.16/4.cookbook/3.upserts",{"title":1714,"path":21765,"stem":21766,"children":21767,"page":21641},"/v0.0.16/reference","v0.0.16/5.reference",[21768,21770],{"title":3560,"path":5627,"stem":21769,"description":3562},"v0.0.16/5.reference/1.api",{"title":3929,"path":5927,"stem":21771,"description":3931},"v0.0.16/5.reference/2.operators",{"title":21773,"path":21774,"stem":21775,"children":21776,"page":21641},"V0017","/v0.0.17","v0.0.17",[21777,21779,21789,21803,21815],{"title":1614,"path":6002,"stem":21778,"description":2581},"v0.0.17/1.overview",{"title":1620,"path":21780,"stem":21781,"children":21782,"page":21641},"/v0.0.17/learn","v0.0.17/2.learn",[21783,21785,21787],{"title":1628,"path":6032,"stem":21784,"description":2620},"v0.0.17/2.learn/1.quickstart",{"title":2651,"path":6057,"stem":21786,"description":2653},"v0.0.17/2.learn/2.concepts",{"title":1237,"path":6117,"stem":21788,"description":2744},"v0.0.17/2.learn/3.architecture",{"title":1645,"path":21790,"stem":21791,"children":21792,"page":21641},"/v0.0.17/guides","v0.0.17/3.guides",[21793,21795,21797,21799,21801],{"title":1215,"path":6193,"stem":21794,"description":2839},"v0.0.17/3.guides/1.schema-validation",{"title":1251,"path":6265,"stem":21796,"description":2944},"v0.0.17/3.guides/2.conditions",{"title":1265,"path":6334,"stem":21798,"description":3050},"v0.0.17/3.guides/3.joins",{"title":1668,"path":6376,"stem":21800,"description":3117},"v0.0.17/3.guides/4.aggregates",{"title":1675,"path":6448,"stem":21802,"description":3232},"v0.0.17/3.guides/5.testing",{"title":1680,"path":21804,"stem":21805,"children":21806,"page":21641},"/v0.0.17/cookbook","v0.0.17/4.cookbook",[21807,21809,21811,21813],{"title":1688,"path":6517,"stem":21808,"description":3329},"v0.0.17/4.cookbook/1.pagination",{"title":1695,"path":6576,"stem":21810,"description":3409},"v0.0.17/4.cookbook/2.vector-search",{"title":1702,"path":6627,"stem":21812,"description":3490},"v0.0.17/4.cookbook/3.upserts",{"title":1709,"path":6680,"stem":21814,"description":6682},"v0.0.17/4.cookbook/4.orm-foundation",{"title":1714,"path":21816,"stem":21817,"children":21818,"page":21641},"/v0.0.17/reference","v0.0.17/5.reference",[21819,21821],{"title":3560,"path":6763,"stem":21820,"description":3562},"v0.0.17/5.reference/1.api",{"title":3929,"path":7031,"stem":21822,"description":3931},"v0.0.17/5.reference/2.operators",{"title":21824,"path":21825,"stem":21826,"children":21827,"page":21641},"V0018","/v0.0.18","v0.0.18",[21828,21830,21840,21854,21866],{"title":1614,"path":7106,"stem":21829,"description":2581},"v0.0.18/1.overview",{"title":1620,"path":21831,"stem":21832,"children":21833,"page":21641},"/v0.0.18/learn","v0.0.18/2.learn",[21834,21836,21838],{"title":1628,"path":7133,"stem":21835,"description":2620},"v0.0.18/2.learn/1.quickstart",{"title":2651,"path":7154,"stem":21837,"description":2653},"v0.0.18/2.learn/2.concepts",{"title":1237,"path":7211,"stem":21839,"description":2744},"v0.0.18/2.learn/3.architecture",{"title":1645,"path":21841,"stem":21842,"children":21843,"page":21641},"/v0.0.18/guides","v0.0.18/3.guides",[21844,21846,21848,21850,21852],{"title":1215,"path":7283,"stem":21845,"description":2839},"v0.0.18/3.guides/1.schema-validation",{"title":1251,"path":7352,"stem":21847,"description":2944},"v0.0.18/3.guides/2.conditions",{"title":1265,"path":7421,"stem":21849,"description":3050},"v0.0.18/3.guides/3.joins",{"title":1668,"path":7463,"stem":21851,"description":3117},"v0.0.18/3.guides/4.aggregates",{"title":1675,"path":7535,"stem":21853,"description":3232},"v0.0.18/3.guides/5.testing",{"title":1680,"path":21855,"stem":21856,"children":21857,"page":21641},"/v0.0.18/cookbook","v0.0.18/4.cookbook",[21858,21860,21862,21864],{"title":1688,"path":7598,"stem":21859,"description":3329},"v0.0.18/4.cookbook/1.pagination",{"title":1695,"path":7649,"stem":21861,"description":3409},"v0.0.18/4.cookbook/2.vector-search",{"title":1702,"path":7700,"stem":21863,"description":3490},"v0.0.18/4.cookbook/3.upserts",{"title":1709,"path":7745,"stem":21865,"description":6682},"v0.0.18/4.cookbook/4.orm-foundation",{"title":1714,"path":21867,"stem":21868,"children":21869,"page":21641},"/v0.0.18/reference","v0.0.18/5.reference",[21870,21872],{"title":3560,"path":7796,"stem":21871,"description":3562},"v0.0.18/5.reference/1.api",{"title":3929,"path":8057,"stem":21873,"description":3931},"v0.0.18/5.reference/2.operators",{"title":21875,"path":21876,"stem":21877,"children":21878,"page":21641},"V0019","/v0.0.19","v0.0.19",[21879,21881,21891,21905,21917],{"title":1614,"path":8132,"stem":21880,"description":2581},"v0.0.19/1.overview",{"title":1620,"path":21882,"stem":21883,"children":21884,"page":21641},"/v0.0.19/learn","v0.0.19/2.learn",[21885,21887,21889],{"title":1628,"path":8159,"stem":21886,"description":2620},"v0.0.19/2.learn/1.quickstart",{"title":2651,"path":8180,"stem":21888,"description":2653},"v0.0.19/2.learn/2.concepts",{"title":1237,"path":8237,"stem":21890,"description":2744},"v0.0.19/2.learn/3.architecture",{"title":1645,"path":21892,"stem":21893,"children":21894,"page":21641},"/v0.0.19/guides","v0.0.19/3.guides",[21895,21897,21899,21901,21903],{"title":1215,"path":8309,"stem":21896,"description":2839},"v0.0.19/3.guides/1.schema-validation",{"title":1251,"path":8378,"stem":21898,"description":2944},"v0.0.19/3.guides/2.conditions",{"title":1265,"path":8447,"stem":21900,"description":3050},"v0.0.19/3.guides/3.joins",{"title":1668,"path":8489,"stem":21902,"description":3117},"v0.0.19/3.guides/4.aggregates",{"title":1675,"path":8561,"stem":21904,"description":3232},"v0.0.19/3.guides/5.testing",{"title":1680,"path":21906,"stem":21907,"children":21908,"page":21641},"/v0.0.19/cookbook","v0.0.19/4.cookbook",[21909,21911,21913,21915],{"title":1688,"path":8624,"stem":21910,"description":3329},"v0.0.19/4.cookbook/1.pagination",{"title":1695,"path":8675,"stem":21912,"description":3409},"v0.0.19/4.cookbook/2.vector-search",{"title":1702,"path":8726,"stem":21914,"description":3490},"v0.0.19/4.cookbook/3.upserts",{"title":1709,"path":8771,"stem":21916,"description":6682},"v0.0.19/4.cookbook/4.orm-foundation",{"title":1714,"path":21918,"stem":21919,"children":21920,"page":21641},"/v0.0.19/reference","v0.0.19/5.reference",[21921,21923],{"title":3560,"path":8822,"stem":21922,"description":3562},"v0.0.19/5.reference/1.api",{"title":3929,"path":9083,"stem":21924,"description":3931},"v0.0.19/5.reference/2.operators",{"title":21926,"path":21927,"stem":21928,"children":21929,"page":21641},"V010","/v0.1.0","v0.1.0",[21930,21932,21942,21956,21968],{"title":1614,"path":9158,"stem":21931,"description":2581},"v0.1.0/1.overview",{"title":1620,"path":21933,"stem":21934,"children":21935,"page":21641},"/v0.1.0/learn","v0.1.0/2.learn",[21936,21938,21940],{"title":1628,"path":9185,"stem":21937,"description":2620},"v0.1.0/2.learn/1.quickstart",{"title":2651,"path":9206,"stem":21939,"description":2653},"v0.1.0/2.learn/2.concepts",{"title":1237,"path":9263,"stem":21941,"description":2744},"v0.1.0/2.learn/3.architecture",{"title":1645,"path":21943,"stem":21944,"children":21945,"page":21641},"/v0.1.0/guides","v0.1.0/3.guides",[21946,21948,21950,21952,21954],{"title":1215,"path":9335,"stem":21947,"description":2839},"v0.1.0/3.guides/1.schema-validation",{"title":1251,"path":9404,"stem":21949,"description":2944},"v0.1.0/3.guides/2.conditions",{"title":1265,"path":9473,"stem":21951,"description":3050},"v0.1.0/3.guides/3.joins",{"title":1668,"path":9515,"stem":21953,"description":3117},"v0.1.0/3.guides/4.aggregates",{"title":1675,"path":9587,"stem":21955,"description":3232},"v0.1.0/3.guides/5.testing",{"title":1680,"path":21957,"stem":21958,"children":21959,"page":21641},"/v0.1.0/cookbook","v0.1.0/4.cookbook",[21960,21962,21964,21966],{"title":1688,"path":9650,"stem":21961,"description":3329},"v0.1.0/4.cookbook/1.pagination",{"title":1695,"path":9701,"stem":21963,"description":3409},"v0.1.0/4.cookbook/2.vector-search",{"title":1702,"path":9752,"stem":21965,"description":3490},"v0.1.0/4.cookbook/3.upserts",{"title":1709,"path":9797,"stem":21967,"description":6682},"v0.1.0/4.cookbook/4.orm-foundation",{"title":1714,"path":21969,"stem":21970,"children":21971,"page":21641},"/v0.1.0/reference","v0.1.0/5.reference",[21972,21974],{"title":3560,"path":9848,"stem":21973,"description":3562},"v0.1.0/5.reference/1.api",{"title":3929,"path":10109,"stem":21975,"description":3931},"v0.1.0/5.reference/2.operators",{"title":21977,"path":21978,"stem":21979,"children":21980,"page":21641},"V011","/v0.1.1","v0.1.1",[21981,21983,21993,22007,22019],{"title":1614,"path":10184,"stem":21982,"description":2581},"v0.1.1/1.overview",{"title":1620,"path":21984,"stem":21985,"children":21986,"page":21641},"/v0.1.1/learn","v0.1.1/2.learn",[21987,21989,21991],{"title":1628,"path":10211,"stem":21988,"description":2620},"v0.1.1/2.learn/1.quickstart",{"title":2651,"path":10232,"stem":21990,"description":2653},"v0.1.1/2.learn/2.concepts",{"title":1237,"path":10289,"stem":21992,"description":2744},"v0.1.1/2.learn/3.architecture",{"title":1645,"path":21994,"stem":21995,"children":21996,"page":21641},"/v0.1.1/guides","v0.1.1/3.guides",[21997,21999,22001,22003,22005],{"title":1215,"path":10361,"stem":21998,"description":2839},"v0.1.1/3.guides/1.schema-validation",{"title":1251,"path":10430,"stem":22000,"description":2944},"v0.1.1/3.guides/2.conditions",{"title":1265,"path":10499,"stem":22002,"description":3050},"v0.1.1/3.guides/3.joins",{"title":1668,"path":10541,"stem":22004,"description":3117},"v0.1.1/3.guides/4.aggregates",{"title":1675,"path":10613,"stem":22006,"description":3232},"v0.1.1/3.guides/5.testing",{"title":1680,"path":22008,"stem":22009,"children":22010,"page":21641},"/v0.1.1/cookbook","v0.1.1/4.cookbook",[22011,22013,22015,22017],{"title":1688,"path":10676,"stem":22012,"description":3329},"v0.1.1/4.cookbook/1.pagination",{"title":1695,"path":10727,"stem":22014,"description":3409},"v0.1.1/4.cookbook/2.vector-search",{"title":1702,"path":10778,"stem":22016,"description":3490},"v0.1.1/4.cookbook/3.upserts",{"title":1709,"path":10823,"stem":22018,"description":6682},"v0.1.1/4.cookbook/4.orm-foundation",{"title":1714,"path":22020,"stem":22021,"children":22022,"page":21641},"/v0.1.1/reference","v0.1.1/5.reference",[22023,22025],{"title":3560,"path":10874,"stem":22024,"description":3562},"v0.1.1/5.reference/1.api",{"title":3929,"path":11135,"stem":22026,"description":3931},"v0.1.1/5.reference/2.operators",{"title":22028,"path":22029,"stem":22030,"children":22031,"page":21641},"V012","/v0.1.2","v0.1.2",[22032,22034,22044,22058,22070],{"title":1614,"path":11210,"stem":22033,"description":2581},"v0.1.2/1.overview",{"title":1620,"path":22035,"stem":22036,"children":22037,"page":21641},"/v0.1.2/learn","v0.1.2/2.learn",[22038,22040,22042],{"title":1628,"path":11237,"stem":22039,"description":2620},"v0.1.2/2.learn/1.quickstart",{"title":2651,"path":11258,"stem":22041,"description":2653},"v0.1.2/2.learn/2.concepts",{"title":1237,"path":11315,"stem":22043,"description":2744},"v0.1.2/2.learn/3.architecture",{"title":1645,"path":22045,"stem":22046,"children":22047,"page":21641},"/v0.1.2/guides","v0.1.2/3.guides",[22048,22050,22052,22054,22056],{"title":1215,"path":11390,"stem":22049,"description":2839},"v0.1.2/3.guides/1.schema-validation",{"title":1251,"path":11459,"stem":22051,"description":2944},"v0.1.2/3.guides/2.conditions",{"title":1265,"path":11528,"stem":22053,"description":3050},"v0.1.2/3.guides/3.joins",{"title":1668,"path":11570,"stem":22055,"description":3117},"v0.1.2/3.guides/4.aggregates",{"title":1675,"path":11642,"stem":22057,"description":3232},"v0.1.2/3.guides/5.testing",{"title":1680,"path":22059,"stem":22060,"children":22061,"page":21641},"/v0.1.2/cookbook","v0.1.2/4.cookbook",[22062,22064,22066,22068],{"title":1688,"path":11705,"stem":22063,"description":3329},"v0.1.2/4.cookbook/1.pagination",{"title":1695,"path":11756,"stem":22065,"description":3409},"v0.1.2/4.cookbook/2.vector-search",{"title":1702,"path":11807,"stem":22067,"description":3490},"v0.1.2/4.cookbook/3.upserts",{"title":1709,"path":11852,"stem":22069,"description":6682},"v0.1.2/4.cookbook/4.orm-foundation",{"title":1714,"path":22071,"stem":22072,"children":22073,"page":21641},"/v0.1.2/reference","v0.1.2/5.reference",[22074,22076],{"title":3560,"path":11903,"stem":22075,"description":3562},"v0.1.2/5.reference/1.api",{"title":3929,"path":12166,"stem":22077,"description":3931},"v0.1.2/5.reference/2.operators",{"title":22079,"path":22080,"stem":22081,"children":22082,"page":21641},"V013","/v0.1.3","v0.1.3",[22083,22085,22095,22109,22121],{"title":1614,"path":12241,"stem":22084,"description":2581},"v0.1.3/1.overview",{"title":1620,"path":22086,"stem":22087,"children":22088,"page":21641},"/v0.1.3/learn","v0.1.3/2.learn",[22089,22091,22093],{"title":1628,"path":12268,"stem":22090,"description":2620},"v0.1.3/2.learn/1.quickstart",{"title":2651,"path":12289,"stem":22092,"description":2653},"v0.1.3/2.learn/2.concepts",{"title":1237,"path":12346,"stem":22094,"description":2744},"v0.1.3/2.learn/3.architecture",{"title":1645,"path":22096,"stem":22097,"children":22098,"page":21641},"/v0.1.3/guides","v0.1.3/3.guides",[22099,22101,22103,22105,22107],{"title":1215,"path":12419,"stem":22100,"description":2839},"v0.1.3/3.guides/1.schema-validation",{"title":1251,"path":12488,"stem":22102,"description":2944},"v0.1.3/3.guides/2.conditions",{"title":1265,"path":12557,"stem":22104,"description":3050},"v0.1.3/3.guides/3.joins",{"title":1668,"path":12599,"stem":22106,"description":3117},"v0.1.3/3.guides/4.aggregates",{"title":1675,"path":12671,"stem":22108,"description":3232},"v0.1.3/3.guides/5.testing",{"title":1680,"path":22110,"stem":22111,"children":22112,"page":21641},"/v0.1.3/cookbook","v0.1.3/4.cookbook",[22113,22115,22117,22119],{"title":1688,"path":12734,"stem":22114,"description":3329},"v0.1.3/4.cookbook/1.pagination",{"title":1695,"path":12785,"stem":22116,"description":3409},"v0.1.3/4.cookbook/2.vector-search",{"title":1702,"path":12836,"stem":22118,"description":3490},"v0.1.3/4.cookbook/3.upserts",{"title":1709,"path":12881,"stem":22120,"description":6682},"v0.1.3/4.cookbook/4.orm-foundation",{"title":1714,"path":22122,"stem":22123,"children":22124,"page":21641},"/v0.1.3/reference","v0.1.3/5.reference",[22125,22127],{"title":3560,"path":12932,"stem":22126,"description":3562},"v0.1.3/5.reference/1.api",{"title":3929,"path":13198,"stem":22128,"description":3931},"v0.1.3/5.reference/2.operators",{"title":22130,"path":22131,"stem":22132,"children":22133,"page":21641},"V014","/v0.1.4","v0.1.4",[22134,22136,22146,22160,22172],{"title":1614,"path":13273,"stem":22135,"description":2581},"v0.1.4/1.overview",{"title":1620,"path":22137,"stem":22138,"children":22139,"page":21641},"/v0.1.4/learn","v0.1.4/2.learn",[22140,22142,22144],{"title":1628,"path":13300,"stem":22141,"description":2620},"v0.1.4/2.learn/1.quickstart",{"title":2651,"path":13321,"stem":22143,"description":2653},"v0.1.4/2.learn/2.concepts",{"title":1237,"path":13378,"stem":22145,"description":2744},"v0.1.4/2.learn/3.architecture",{"title":1645,"path":22147,"stem":22148,"children":22149,"page":21641},"/v0.1.4/guides","v0.1.4/3.guides",[22150,22152,22154,22156,22158],{"title":1215,"path":13450,"stem":22151,"description":2839},"v0.1.4/3.guides/1.schema-validation",{"title":1251,"path":13519,"stem":22153,"description":2944},"v0.1.4/3.guides/2.conditions",{"title":1265,"path":13588,"stem":22155,"description":3050},"v0.1.4/3.guides/3.joins",{"title":1668,"path":13630,"stem":22157,"description":3117},"v0.1.4/3.guides/4.aggregates",{"title":1675,"path":13702,"stem":22159,"description":3232},"v0.1.4/3.guides/5.testing",{"title":1680,"path":22161,"stem":22162,"children":22163,"page":21641},"/v0.1.4/cookbook","v0.1.4/4.cookbook",[22164,22166,22168,22170],{"title":1688,"path":13765,"stem":22165,"description":3329},"v0.1.4/4.cookbook/1.pagination",{"title":1695,"path":13816,"stem":22167,"description":3409},"v0.1.4/4.cookbook/2.vector-search",{"title":1702,"path":13867,"stem":22169,"description":3490},"v0.1.4/4.cookbook/3.upserts",{"title":1709,"path":13912,"stem":22171,"description":6682},"v0.1.4/4.cookbook/4.orm-foundation",{"title":1714,"path":22173,"stem":22174,"children":22175,"page":21641},"/v0.1.4/reference","v0.1.4/5.reference",[22176,22178],{"title":3560,"path":13963,"stem":22177,"description":3562},"v0.1.4/5.reference/1.api",{"title":3929,"path":14229,"stem":22179,"description":3931},"v0.1.4/5.reference/2.operators",{"title":22181,"path":22182,"stem":22183,"children":22184,"page":21641},"V101","/v1.0.1","v1.0.1",[22185,22187,22197,22211,22223],{"title":1614,"path":14304,"stem":22186,"description":2581},"v1.0.1/1.overview",{"title":1620,"path":22188,"stem":22189,"children":22190,"page":21641},"/v1.0.1/learn","v1.0.1/2.learn",[22191,22193,22195],{"title":1628,"path":14333,"stem":22192,"description":2620},"v1.0.1/2.learn/1.quickstart",{"title":2651,"path":14355,"stem":22194,"description":2653},"v1.0.1/2.learn/2.concepts",{"title":1237,"path":14412,"stem":22196,"description":2744},"v1.0.1/2.learn/3.architecture",{"title":1645,"path":22198,"stem":22199,"children":22200,"page":21641},"/v1.0.1/guides","v1.0.1/3.guides",[22201,22203,22205,22207,22209],{"title":1215,"path":14486,"stem":22202,"description":2839},"v1.0.1/3.guides/1.schema-validation",{"title":1251,"path":14555,"stem":22204,"description":2944},"v1.0.1/3.guides/2.conditions",{"title":1265,"path":14624,"stem":22206,"description":3050},"v1.0.1/3.guides/3.joins",{"title":1668,"path":14666,"stem":22208,"description":3117},"v1.0.1/3.guides/4.aggregates",{"title":1675,"path":14738,"stem":22210,"description":3232},"v1.0.1/3.guides/5.testing",{"title":1680,"path":22212,"stem":22213,"children":22214,"page":21641},"/v1.0.1/cookbook","v1.0.1/4.cookbook",[22215,22217,22219,22221],{"title":1688,"path":14801,"stem":22216,"description":3329},"v1.0.1/4.cookbook/1.pagination",{"title":1695,"path":14852,"stem":22218,"description":3409},"v1.0.1/4.cookbook/2.vector-search",{"title":1702,"path":14903,"stem":22220,"description":3490},"v1.0.1/4.cookbook/3.upserts",{"title":1709,"path":14948,"stem":22222,"description":6682},"v1.0.1/4.cookbook/4.orm-foundation",{"title":1714,"path":22224,"stem":22225,"children":22226,"page":21641},"/v1.0.1/reference","v1.0.1/5.reference",[22227,22229],{"title":3560,"path":14999,"stem":22228,"description":3562},"v1.0.1/5.reference/1.api",{"title":3929,"path":15267,"stem":22230,"description":3931},"v1.0.1/5.reference/2.operators",{"title":22232,"path":22233,"stem":22234,"children":22235,"page":21641},"V102","/v1.0.2","v1.0.2",[22236,22238,22248,22262,22274],{"title":1614,"path":15342,"stem":22237,"description":2581},"v1.0.2/1.overview",{"title":1620,"path":22239,"stem":22240,"children":22241,"page":21641},"/v1.0.2/learn","v1.0.2/2.learn",[22242,22244,22246],{"title":1628,"path":15369,"stem":22243,"description":2620},"v1.0.2/2.learn/1.quickstart",{"title":2651,"path":15390,"stem":22245,"description":2653},"v1.0.2/2.learn/2.concepts",{"title":1237,"path":15447,"stem":22247,"description":2744},"v1.0.2/2.learn/3.architecture",{"title":1645,"path":22249,"stem":22250,"children":22251,"page":21641},"/v1.0.2/guides","v1.0.2/3.guides",[22252,22254,22256,22258,22260],{"title":1215,"path":15519,"stem":22253,"description":2839},"v1.0.2/3.guides/1.schema-validation",{"title":1251,"path":15588,"stem":22255,"description":2944},"v1.0.2/3.guides/2.conditions",{"title":1265,"path":15657,"stem":22257,"description":3050},"v1.0.2/3.guides/3.joins",{"title":1668,"path":15699,"stem":22259,"description":3117},"v1.0.2/3.guides/4.aggregates",{"title":1675,"path":15771,"stem":22261,"description":3232},"v1.0.2/3.guides/5.testing",{"title":1680,"path":22263,"stem":22264,"children":22265,"page":21641},"/v1.0.2/cookbook","v1.0.2/4.cookbook",[22266,22268,22270,22272],{"title":1688,"path":15834,"stem":22267,"description":3329},"v1.0.2/4.cookbook/1.pagination",{"title":1695,"path":15885,"stem":22269,"description":3409},"v1.0.2/4.cookbook/2.vector-search",{"title":1702,"path":15936,"stem":22271,"description":3490},"v1.0.2/4.cookbook/3.upserts",{"title":1709,"path":15981,"stem":22273,"description":6682},"v1.0.2/4.cookbook/4.orm-foundation",{"title":1714,"path":22275,"stem":22276,"children":22277,"page":21641},"/v1.0.2/reference","v1.0.2/5.reference",[22278,22280],{"title":3560,"path":16032,"stem":22279,"description":3562},"v1.0.2/5.reference/1.api",{"title":3929,"path":16296,"stem":22281,"description":3931},"v1.0.2/5.reference/2.operators",{"title":22283,"path":22284,"stem":22285,"children":22286,"page":21641},"V103","/v1.0.3","v1.0.3",[22287,22289,22299,22313,22325],{"title":1614,"path":16371,"stem":22288,"description":2581},"v1.0.3/1.overview",{"title":1620,"path":22290,"stem":22291,"children":22292,"page":21641},"/v1.0.3/learn","v1.0.3/2.learn",[22293,22295,22297],{"title":1628,"path":16398,"stem":22294,"description":2620},"v1.0.3/2.learn/1.quickstart",{"title":2651,"path":16419,"stem":22296,"description":2653},"v1.0.3/2.learn/2.concepts",{"title":1237,"path":16476,"stem":22298,"description":2744},"v1.0.3/2.learn/3.architecture",{"title":1645,"path":22300,"stem":22301,"children":22302,"page":21641},"/v1.0.3/guides","v1.0.3/3.guides",[22303,22305,22307,22309,22311],{"title":1215,"path":16548,"stem":22304,"description":2839},"v1.0.3/3.guides/1.schema-validation",{"title":1251,"path":16617,"stem":22306,"description":2944},"v1.0.3/3.guides/2.conditions",{"title":1265,"path":16686,"stem":22308,"description":3050},"v1.0.3/3.guides/3.joins",{"title":1668,"path":16728,"stem":22310,"description":3117},"v1.0.3/3.guides/4.aggregates",{"title":1675,"path":16800,"stem":22312,"description":3232},"v1.0.3/3.guides/5.testing",{"title":1680,"path":22314,"stem":22315,"children":22316,"page":21641},"/v1.0.3/cookbook","v1.0.3/4.cookbook",[22317,22319,22321,22323],{"title":1688,"path":16863,"stem":22318,"description":3329},"v1.0.3/4.cookbook/1.pagination",{"title":1695,"path":16914,"stem":22320,"description":3409},"v1.0.3/4.cookbook/2.vector-search",{"title":1702,"path":16965,"stem":22322,"description":3490},"v1.0.3/4.cookbook/3.upserts",{"title":1709,"path":17010,"stem":22324,"description":6682},"v1.0.3/4.cookbook/4.orm-foundation",{"title":1714,"path":22326,"stem":22327,"children":22328,"page":21641},"/v1.0.3/reference","v1.0.3/5.reference",[22329,22331],{"title":3560,"path":17061,"stem":22330,"description":3562},"v1.0.3/5.reference/1.api",{"title":3929,"path":17325,"stem":22332,"description":3931},"v1.0.3/5.reference/2.operators",{"title":22334,"path":22335,"stem":22336,"children":22337,"page":21641},"V104","/v1.0.4","v1.0.4",[22338,22340,22350,22364,22376],{"title":1614,"path":17400,"stem":22339,"description":2581},"v1.0.4/1.overview",{"title":1620,"path":22341,"stem":22342,"children":22343,"page":21641},"/v1.0.4/learn","v1.0.4/2.learn",[22344,22346,22348],{"title":1628,"path":17427,"stem":22345,"description":2620},"v1.0.4/2.learn/1.quickstart",{"title":2651,"path":17448,"stem":22347,"description":2653},"v1.0.4/2.learn/2.concepts",{"title":1237,"path":17505,"stem":22349,"description":2744},"v1.0.4/2.learn/3.architecture",{"title":1645,"path":22351,"stem":22352,"children":22353,"page":21641},"/v1.0.4/guides","v1.0.4/3.guides",[22354,22356,22358,22360,22362],{"title":1215,"path":17577,"stem":22355,"description":2839},"v1.0.4/3.guides/1.schema-validation",{"title":1251,"path":17646,"stem":22357,"description":2944},"v1.0.4/3.guides/2.conditions",{"title":1265,"path":17715,"stem":22359,"description":3050},"v1.0.4/3.guides/3.joins",{"title":1668,"path":17757,"stem":22361,"description":3117},"v1.0.4/3.guides/4.aggregates",{"title":1675,"path":17829,"stem":22363,"description":3232},"v1.0.4/3.guides/5.testing",{"title":1680,"path":22365,"stem":22366,"children":22367,"page":21641},"/v1.0.4/cookbook","v1.0.4/4.cookbook",[22368,22370,22372,22374],{"title":1688,"path":17892,"stem":22369,"description":3329},"v1.0.4/4.cookbook/1.pagination",{"title":1695,"path":17943,"stem":22371,"description":3409},"v1.0.4/4.cookbook/2.vector-search",{"title":1702,"path":17999,"stem":22373,"description":3490},"v1.0.4/4.cookbook/3.upserts",{"title":1709,"path":18044,"stem":22375,"description":6682},"v1.0.4/4.cookbook/4.orm-foundation",{"title":1714,"path":22377,"stem":22378,"children":22379,"page":21641},"/v1.0.4/reference","v1.0.4/5.reference",[22380,22382],{"title":3560,"path":18095,"stem":22381,"description":3562},"v1.0.4/5.reference/1.api",{"title":3929,"path":18377,"stem":22383,"description":3931},"v1.0.4/5.reference/2.operators",{"title":22385,"path":22386,"stem":22387,"children":22388,"page":21641},"V105","/v1.0.5","v1.0.5",[22389,22391,22401,22415,22427],{"title":1614,"path":18461,"stem":22390,"description":2581},"v1.0.5/1.overview",{"title":1620,"path":22392,"stem":22393,"children":22394,"page":21641},"/v1.0.5/learn","v1.0.5/2.learn",[22395,22397,22399],{"title":1628,"path":18488,"stem":22396,"description":2620},"v1.0.5/2.learn/1.quickstart",{"title":2651,"path":18509,"stem":22398,"description":2653},"v1.0.5/2.learn/2.concepts",{"title":1237,"path":18566,"stem":22400,"description":2744},"v1.0.5/2.learn/3.architecture",{"title":1645,"path":22402,"stem":22403,"children":22404,"page":21641},"/v1.0.5/guides","v1.0.5/3.guides",[22405,22407,22409,22411,22413],{"title":1215,"path":18638,"stem":22406,"description":2839},"v1.0.5/3.guides/1.schema-validation",{"title":1251,"path":18707,"stem":22408,"description":2944},"v1.0.5/3.guides/2.conditions",{"title":1265,"path":18776,"stem":22410,"description":3050},"v1.0.5/3.guides/3.joins",{"title":1668,"path":18818,"stem":22412,"description":3117},"v1.0.5/3.guides/4.aggregates",{"title":1675,"path":18890,"stem":22414,"description":3232},"v1.0.5/3.guides/5.testing",{"title":1680,"path":22416,"stem":22417,"children":22418,"page":21641},"/v1.0.5/cookbook","v1.0.5/4.cookbook",[22419,22421,22423,22425],{"title":1688,"path":18953,"stem":22420,"description":3329},"v1.0.5/4.cookbook/1.pagination",{"title":1695,"path":19004,"stem":22422,"description":3409},"v1.0.5/4.cookbook/2.vector-search",{"title":1702,"path":19059,"stem":22424,"description":3490},"v1.0.5/4.cookbook/3.upserts",{"title":1709,"path":19104,"stem":22426,"description":6682},"v1.0.5/4.cookbook/4.orm-foundation",{"title":1714,"path":22428,"stem":22429,"children":22430,"page":21641},"/v1.0.5/reference","v1.0.5/5.reference",[22431,22433],{"title":3560,"path":19155,"stem":22432,"description":3562},"v1.0.5/5.reference/1.api",{"title":3929,"path":19434,"stem":22434,"description":3931},"v1.0.5/5.reference/2.operators",{"title":22436,"path":22437,"stem":22438,"children":22439,"page":21641},"V106","/v1.0.6","v1.0.6",[22440,22442,22452,22466,22478],{"title":1614,"path":19515,"stem":22441,"description":2581},"v1.0.6/1.overview",{"title":1620,"path":22443,"stem":22444,"children":22445,"page":21641},"/v1.0.6/learn","v1.0.6/2.learn",[22446,22448,22450],{"title":1628,"path":19542,"stem":22447,"description":2620},"v1.0.6/2.learn/1.quickstart",{"title":2651,"path":19563,"stem":22449,"description":2653},"v1.0.6/2.learn/2.concepts",{"title":1237,"path":19620,"stem":22451,"description":2744},"v1.0.6/2.learn/3.architecture",{"title":1645,"path":22453,"stem":22454,"children":22455,"page":21641},"/v1.0.6/guides","v1.0.6/3.guides",[22456,22458,22460,22462,22464],{"title":1215,"path":19692,"stem":22457,"description":2839},"v1.0.6/3.guides/1.schema-validation",{"title":1251,"path":19761,"stem":22459,"description":2944},"v1.0.6/3.guides/2.conditions",{"title":1265,"path":19830,"stem":22461,"description":3050},"v1.0.6/3.guides/3.joins",{"title":1668,"path":19872,"stem":22463,"description":3117},"v1.0.6/3.guides/4.aggregates",{"title":1675,"path":19944,"stem":22465,"description":3232},"v1.0.6/3.guides/5.testing",{"title":1680,"path":22467,"stem":22468,"children":22469,"page":21641},"/v1.0.6/cookbook","v1.0.6/4.cookbook",[22470,22472,22474,22476],{"title":1688,"path":20007,"stem":22471,"description":3329},"v1.0.6/4.cookbook/1.pagination",{"title":1695,"path":20058,"stem":22473,"description":3409},"v1.0.6/4.cookbook/2.vector-search",{"title":1702,"path":20112,"stem":22475,"description":3490},"v1.0.6/4.cookbook/3.upserts",{"title":1709,"path":20157,"stem":22477,"description":6682},"v1.0.6/4.cookbook/4.orm-foundation",{"title":1714,"path":22479,"stem":22480,"children":22481,"page":21641},"/v1.0.6/reference","v1.0.6/5.reference",[22482,22484],{"title":3560,"path":20208,"stem":22483,"description":3562},"v1.0.6/5.reference/1.api",{"title":3929,"path":20489,"stem":22485,"description":3931},"v1.0.6/5.reference/2.operators",{"title":22487,"path":22488,"stem":22489,"children":22490,"page":21641},"V107","/v1.0.7","v1.0.7",[22491,22493,22503,22517,22529],{"title":1614,"path":20570,"stem":22492,"description":2581},"v1.0.7/1.overview",{"title":1620,"path":22494,"stem":22495,"children":22496,"page":21641},"/v1.0.7/learn","v1.0.7/2.learn",[22497,22499,22501],{"title":1628,"path":20597,"stem":22498,"description":2620},"v1.0.7/2.learn/1.quickstart",{"title":2651,"path":20619,"stem":22500,"description":2653},"v1.0.7/2.learn/2.concepts",{"title":1237,"path":20676,"stem":22502,"description":2744},"v1.0.7/2.learn/3.architecture",{"title":1645,"path":22504,"stem":22505,"children":22506,"page":21641},"/v1.0.7/guides","v1.0.7/3.guides",[22507,22509,22511,22513,22515],{"title":1215,"path":20748,"stem":22508,"description":2839},"v1.0.7/3.guides/1.schema-validation",{"title":1251,"path":20817,"stem":22510,"description":2944},"v1.0.7/3.guides/2.conditions",{"title":1265,"path":20886,"stem":22512,"description":3050},"v1.0.7/3.guides/3.joins",{"title":1668,"path":20928,"stem":22514,"description":3117},"v1.0.7/3.guides/4.aggregates",{"title":1675,"path":21000,"stem":22516,"description":3232},"v1.0.7/3.guides/5.testing",{"title":1680,"path":22518,"stem":22519,"children":22520,"page":21641},"/v1.0.7/cookbook","v1.0.7/4.cookbook",[22521,22523,22525,22527],{"title":1688,"path":21063,"stem":22522,"description":3329},"v1.0.7/4.cookbook/1.pagination",{"title":1695,"path":21114,"stem":22524,"description":3409},"v1.0.7/4.cookbook/2.vector-search",{"title":1702,"path":21168,"stem":22526,"description":3490},"v1.0.7/4.cookbook/3.upserts",{"title":1709,"path":21213,"stem":22528,"description":6682},"v1.0.7/4.cookbook/4.orm-foundation",{"title":1714,"path":22530,"stem":22531,"children":22532,"page":21641},"/v1.0.7/reference","v1.0.7/5.reference",[22533,22535],{"title":3560,"path":21264,"stem":22534,"description":3562},"v1.0.7/5.reference/1.api",{"title":3929,"path":21543,"stem":22536,"description":3931},"v1.0.7/5.reference/2.operators",1774287138393]