[{"data":1,"prerenderedAt":3655},["ShallowReactive",2],{"navigation_docs_en":3,"-en-tauri-sqlite-orm-advanced-topics-query-debugging":237,"-en-tauri-sqlite-orm-advanced-topics-query-debugging-surround":3650},[4,15,69,122],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":14},"Getting Started with Docs","i-lucide-home","/en/getting-started","en/1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":6},"Introduction","/en/getting-started/introduction","en/1.getting-started/1.introduction",false,{"title":16,"path":17,"stem":18,"children":19,"page":14},"owo-ui Components","/en/owo-ui-components","en/2.owo-ui-components",[20,23],{"title":11,"path":21,"stem":22,"icon":6},"/en/owo-ui-components/introduction","en/2.owo-ui-components/2.introduction",{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":14},"Components","i-lucide-layout","/en/owo-ui-components/components","en/2.owo-ui-components/3.components",[29,33,37,41,45,49,53,57,61,65],{"title":30,"path":31,"stem":32},"Button","/en/owo-ui-components/components/button","en/2.owo-ui-components/3.components/button",{"title":34,"path":35,"stem":36},"Checkbox","/en/owo-ui-components/components/checkbox","en/2.owo-ui-components/3.components/checkbox",{"title":38,"path":39,"stem":40},"Collapsible Container","/en/owo-ui-components/components/collapsible-container","en/2.owo-ui-components/3.components/collapsible-container",{"title":42,"path":43,"stem":44},"Dropdown","/en/owo-ui-components/components/dropdown","en/2.owo-ui-components/3.components/dropdown",{"title":46,"path":47,"stem":48},"Flow Layout","/en/owo-ui-components/components/flow-layout","en/2.owo-ui-components/3.components/flow-layout",{"title":50,"path":51,"stem":52},"Grid Layout","/en/owo-ui-components/components/grid-layout","en/2.owo-ui-components/3.components/grid-layout",{"title":54,"path":55,"stem":56},"Label","/en/owo-ui-components/components/label","en/2.owo-ui-components/3.components/label",{"title":58,"path":59,"stem":60},"Scroll Container","/en/owo-ui-components/components/scroll-container","en/2.owo-ui-components/3.components/scroll-container",{"title":62,"path":63,"stem":64},"Slider","/en/owo-ui-components/components/slider","en/2.owo-ui-components/3.components/slider",{"title":66,"path":67,"stem":68},"Templates","/en/owo-ui-components/components/templates","en/2.owo-ui-components/3.components/templates",{"title":70,"path":71,"stem":72,"children":73,"page":14},"Nexus","/en/nexus","en/3.nexus",[74,77,82],{"title":11,"path":75,"stem":76,"icon":6},"/en/nexus/introduction","en/3.nexus/2.introduction",{"title":78,"path":79,"stem":80,"icon":81},"Deployment","/en/nexus/deployment","en/3.nexus/3.deployment","i-lucide-rocket",{"title":83,"path":84,"stem":85,"children":86,"page":14},"Endpoints","/en/nexus/endpoints","en/3.nexus/endpoints",[87,91,95,99,102,106,110,114,118],{"title":88,"path":89,"stem":90},"Authentication","/en/nexus/endpoints/authentication","en/3.nexus/endpoints/1.authentication",{"title":92,"path":93,"stem":94},"Rate Limiting","/en/nexus/endpoints/rate-limiting","en/3.nexus/endpoints/2.rate-limiting",{"title":96,"path":97,"stem":98},"Error Handling","/en/nexus/endpoints/error-handling","en/3.nexus/endpoints/3.error-handling",{"title":83,"path":100,"stem":101},"/en/nexus/endpoints/_dir","en/3.nexus/endpoints/_dir",{"title":103,"path":104,"stem":105},"Album","/en/nexus/endpoints/albums","en/3.nexus/endpoints/albums",{"title":107,"path":108,"stem":109},"Blog","/en/nexus/endpoints/blog","en/3.nexus/endpoints/blog",{"title":111,"path":112,"stem":113},"Comments","/en/nexus/endpoints/comments","en/3.nexus/endpoints/comments",{"title":115,"path":116,"stem":117},"File Management","/en/nexus/endpoints/file-management","en/3.nexus/endpoints/file-management",{"title":119,"path":120,"stem":121},"Photo Management","/en/nexus/endpoints/photos","en/3.nexus/endpoints/photos",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":14},"Tauri SQLite ORM","i-lucide-database","/en/tauri-sqlite-orm","en/4.tauri-sqlite-orm",[128,132,137,141,162,187,232],{"title":11,"path":129,"stem":130,"icon":131},"/en/tauri-sqlite-orm/introduction","en/4.tauri-sqlite-orm/1.introduction","i-lucide-book-open",{"title":133,"path":134,"stem":135,"icon":136},"Installation & Setup","/en/tauri-sqlite-orm/installation-and-setup","en/4.tauri-sqlite-orm/2.installation-and-setup","i-lucide-download",{"title":138,"path":139,"stem":140,"icon":81},"Your First Schema & Query","/en/tauri-sqlite-orm/your-first-schema-and-query","en/4.tauri-sqlite-orm/3.your-first-schema-and-query",{"title":142,"path":143,"stem":144,"children":145,"page":14},"Core Concepts","/en/tauri-sqlite-orm/core-concepts","en/4.tauri-sqlite-orm/4.core-concepts",[146,150,154,158],{"title":147,"path":148,"stem":149},"Defining Schemas","/en/tauri-sqlite-orm/core-concepts/defining-schemas","en/4.tauri-sqlite-orm/4.core-concepts/1.defining-schemas",{"title":151,"path":152,"stem":153},"Column Types & Modifiers","/en/tauri-sqlite-orm/core-concepts/column-types-and-modifiers","en/4.tauri-sqlite-orm/4.core-concepts/2.column-types-and-modifiers",{"title":155,"path":156,"stem":157},"The ORM Instance","/en/tauri-sqlite-orm/core-concepts/the-orm-instance","en/4.tauri-sqlite-orm/4.core-concepts/3.the-orm-instance",{"title":159,"path":160,"stem":161},"Migrations","/en/tauri-sqlite-orm/core-concepts/migrations","en/4.tauri-sqlite-orm/4.core-concepts/4.migrations",{"title":163,"path":164,"stem":165,"children":166,"page":14},"Querying Data","/en/tauri-sqlite-orm/querying-data","en/4.tauri-sqlite-orm/5.querying-data",[167,171,175,179,183],{"title":168,"path":169,"stem":170},"Select","/en/tauri-sqlite-orm/querying-data/selecting-data","en/4.tauri-sqlite-orm/5.querying-data/1.selecting-data",{"title":172,"path":173,"stem":174},"Insert","/en/tauri-sqlite-orm/querying-data/inserting-data","en/4.tauri-sqlite-orm/5.querying-data/2.inserting-data",{"title":176,"path":177,"stem":178},"Update","/en/tauri-sqlite-orm/querying-data/updating-data","en/4.tauri-sqlite-orm/5.querying-data/3.updating-data",{"title":180,"path":181,"stem":182},"Delete","/en/tauri-sqlite-orm/querying-data/deleting-data","en/4.tauri-sqlite-orm/5.querying-data/4.deleting-data",{"title":184,"path":185,"stem":186},"Conditions & Operators","/en/tauri-sqlite-orm/querying-data/conditions-and-operators","en/4.tauri-sqlite-orm/5.querying-data/5.conditions-and-operators",{"title":188,"path":189,"stem":190,"children":191,"page":14},"Advanced Topics","/en/tauri-sqlite-orm/advanced-topics","en/4.tauri-sqlite-orm/6.advanced-topics",[192,196,200,204,208,212,216,220,224,228],{"title":193,"path":194,"stem":195},"Relations","/en/tauri-sqlite-orm/advanced-topics/working-with-relations","en/4.tauri-sqlite-orm/6.advanced-topics/1.working-with-relations",{"title":197,"path":198,"stem":199},"Error Handling & Safety","/en/tauri-sqlite-orm/advanced-topics/error-handling-and-safety","en/4.tauri-sqlite-orm/6.advanced-topics/10.error-handling-and-safety",{"title":201,"path":202,"stem":203},"Joins","/en/tauri-sqlite-orm/advanced-topics/joins","en/4.tauri-sqlite-orm/6.advanced-topics/2.joins",{"title":205,"path":206,"stem":207},"Transactions","/en/tauri-sqlite-orm/advanced-topics/transactions","en/4.tauri-sqlite-orm/6.advanced-topics/3.transactions",{"title":209,"path":210,"stem":211},"Common Table Expressions","/en/tauri-sqlite-orm/advanced-topics/common-table-expressions","en/4.tauri-sqlite-orm/6.advanced-topics/4.common-table-expressions",{"title":213,"path":214,"stem":215},"Raw SQL","/en/tauri-sqlite-orm/advanced-topics/raw-sql","en/4.tauri-sqlite-orm/6.advanced-topics/5.raw-sql",{"title":217,"path":218,"stem":219},"Type Safety & Inference","/en/tauri-sqlite-orm/advanced-topics/type-safety-and-inference","en/4.tauri-sqlite-orm/6.advanced-topics/6.type-safety-and-inference",{"title":221,"path":222,"stem":223},"Schema Management","/en/tauri-sqlite-orm/advanced-topics/manual-schema-management","en/4.tauri-sqlite-orm/6.advanced-topics/7.manual-schema-management",{"title":225,"path":226,"stem":227},"Query Debugging","/en/tauri-sqlite-orm/advanced-topics/query-debugging","en/4.tauri-sqlite-orm/6.advanced-topics/8.query-debugging",{"title":229,"path":230,"stem":231},"Subqueries & Aggregates","/en/tauri-sqlite-orm/advanced-topics/subqueries-and-aggregates","en/4.tauri-sqlite-orm/6.advanced-topics/9.subqueries-and-aggregates",{"title":233,"path":234,"stem":235,"icon":236},"API Reference","/en/tauri-sqlite-orm/api-reference","en/4.tauri-sqlite-orm/7.api-reference","i-lucide-book",{"id":238,"title":225,"body":239,"description":3644,"extension":3645,"links":3646,"meta":3647,"navigation":369,"path":226,"seo":3648,"stem":227,"__hash__":3649},"docs_en/en/4.tauri-sqlite-orm/6.advanced-topics/8.query-debugging.md",{"type":240,"value":241,"toc":3621},"minimark",[242,251,256,262,610,614,619,818,822,948,952,1109,1113,1225,1229,1233,1236,1616,1620,1623,1938,1942,1945,2142,2146,2149,2318,2322,2325,2574,2578,2582,2588,2671,2675,2681,2762,2766,2772,2959,2963,2998,3002,3612,3617],[243,244,245,246,250],"p",{},"The ",[247,248,249],"code",{},".toSQL()"," method allows you to inspect the SQL and parameters that will be executed without actually running the query. This is essential for debugging, logging, and understanding what SQL your ORM is generating.",[252,253,255],"h2",{"id":254},"basic-usage","Basic Usage",[243,257,258,259,261],{},"Every query builder has a ",[247,260,249],{}," method that returns the SQL string and parameter array:",[263,264,269],"pre",{"className":265,"code":266,"language":267,"meta":268,"style":268},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { db } from '$lib/db';\nimport { users } from '$lib/db/schema';\nimport { eq, and, gt } from '@type32/tauri-sqlite-orm';\n\n// Build a query\nconst query = db.select(users)\n  .where(eq(users._.columns.email, 'john@example.com'));\n\n// Inspect without executing\nconst { sql, params } = query.toSQL();\n\nconsole.log('SQL:', sql);\n// SELECT users.id AS \"users.id\", users.name AS \"users.name\", users.email AS \"users.email\" \n// FROM users users WHERE users.email = ?\n\nconsole.log('Params:', params);\n// ['john@example.com']\n\n// Execute when ready\nconst results = await query.all();\n","ts","",[247,270,271,307,330,364,371,378,403,450,455,461,495,500,527,533,539,544,569,575,580,586],{"__ignoreMap":268},[272,273,276,280,284,288,291,294,297,301,304],"span",{"class":274,"line":275},"line",1,[272,277,279],{"class":278},"s7zQu","import",[272,281,283],{"class":282},"sMK4o"," {",[272,285,287],{"class":286},"sTEyZ"," db",[272,289,290],{"class":282}," }",[272,292,293],{"class":278}," from",[272,295,296],{"class":282}," '",[272,298,300],{"class":299},"sfazB","$lib/db",[272,302,303],{"class":282},"'",[272,305,306],{"class":282},";\n",[272,308,310,312,314,317,319,321,323,326,328],{"class":274,"line":309},2,[272,311,279],{"class":278},[272,313,283],{"class":282},[272,315,316],{"class":286}," users",[272,318,290],{"class":282},[272,320,293],{"class":278},[272,322,296],{"class":282},[272,324,325],{"class":299},"$lib/db/schema",[272,327,303],{"class":282},[272,329,306],{"class":282},[272,331,333,335,337,340,343,346,348,351,353,355,357,360,362],{"class":274,"line":332},3,[272,334,279],{"class":278},[272,336,283],{"class":282},[272,338,339],{"class":286}," eq",[272,341,342],{"class":282},",",[272,344,345],{"class":286}," and",[272,347,342],{"class":282},[272,349,350],{"class":286}," gt",[272,352,290],{"class":282},[272,354,293],{"class":278},[272,356,296],{"class":282},[272,358,359],{"class":299},"@type32/tauri-sqlite-orm",[272,361,303],{"class":282},[272,363,306],{"class":282},[272,365,367],{"class":274,"line":366},4,[272,368,370],{"emptyLinePlaceholder":369},true,"\n",[272,372,374],{"class":274,"line":373},5,[272,375,377],{"class":376},"sHwdD","// Build a query\n",[272,379,381,385,388,391,393,396,400],{"class":274,"line":380},6,[272,382,384],{"class":383},"spNyl","const",[272,386,387],{"class":286}," query ",[272,389,390],{"class":282},"=",[272,392,287],{"class":286},[272,394,395],{"class":282},".",[272,397,399],{"class":398},"s2Zo4","select",[272,401,402],{"class":286},"(users)\n",[272,404,406,409,412,415,418,421,423,426,428,431,433,436,438,440,443,445,448],{"class":274,"line":405},7,[272,407,408],{"class":282},"  .",[272,410,411],{"class":398},"where",[272,413,414],{"class":286},"(",[272,416,417],{"class":398},"eq",[272,419,420],{"class":286},"(users",[272,422,395],{"class":282},[272,424,425],{"class":286},"_",[272,427,395],{"class":282},[272,429,430],{"class":286},"columns",[272,432,395],{"class":282},[272,434,435],{"class":286},"email",[272,437,342],{"class":282},[272,439,296],{"class":282},[272,441,442],{"class":299},"john@example.com",[272,444,303],{"class":282},[272,446,447],{"class":286},"))",[272,449,306],{"class":282},[272,451,453],{"class":274,"line":452},8,[272,454,370],{"emptyLinePlaceholder":369},[272,456,458],{"class":274,"line":457},9,[272,459,460],{"class":376},"// Inspect without executing\n",[272,462,464,466,468,471,473,476,479,482,485,487,490,493],{"class":274,"line":463},10,[272,465,384],{"class":383},[272,467,283],{"class":282},[272,469,470],{"class":286}," sql",[272,472,342],{"class":282},[272,474,475],{"class":286}," params ",[272,477,478],{"class":282},"}",[272,480,481],{"class":282}," =",[272,483,484],{"class":286}," query",[272,486,395],{"class":282},[272,488,489],{"class":398},"toSQL",[272,491,492],{"class":286},"()",[272,494,306],{"class":282},[272,496,498],{"class":274,"line":497},11,[272,499,370],{"emptyLinePlaceholder":369},[272,501,503,506,508,511,513,515,518,520,522,525],{"class":274,"line":502},12,[272,504,505],{"class":286},"console",[272,507,395],{"class":282},[272,509,510],{"class":398},"log",[272,512,414],{"class":286},[272,514,303],{"class":282},[272,516,517],{"class":299},"SQL:",[272,519,303],{"class":282},[272,521,342],{"class":282},[272,523,524],{"class":286}," sql)",[272,526,306],{"class":282},[272,528,530],{"class":274,"line":529},13,[272,531,532],{"class":376},"// SELECT users.id AS \"users.id\", users.name AS \"users.name\", users.email AS \"users.email\" \n",[272,534,536],{"class":274,"line":535},14,[272,537,538],{"class":376},"// FROM users users WHERE users.email = ?\n",[272,540,542],{"class":274,"line":541},15,[272,543,370],{"emptyLinePlaceholder":369},[272,545,547,549,551,553,555,557,560,562,564,567],{"class":274,"line":546},16,[272,548,505],{"class":286},[272,550,395],{"class":282},[272,552,510],{"class":398},[272,554,414],{"class":286},[272,556,303],{"class":282},[272,558,559],{"class":299},"Params:",[272,561,303],{"class":282},[272,563,342],{"class":282},[272,565,566],{"class":286}," params)",[272,568,306],{"class":282},[272,570,572],{"class":274,"line":571},17,[272,573,574],{"class":376},"// ['john@example.com']\n",[272,576,578],{"class":274,"line":577},18,[272,579,370],{"emptyLinePlaceholder":369},[272,581,583],{"class":274,"line":582},19,[272,584,585],{"class":376},"// Execute when ready\n",[272,587,589,591,594,596,599,601,603,606,608],{"class":274,"line":588},20,[272,590,384],{"class":383},[272,592,593],{"class":286}," results ",[272,595,390],{"class":282},[272,597,598],{"class":278}," await",[272,600,484],{"class":286},[272,602,395],{"class":282},[272,604,605],{"class":398},"all",[272,607,492],{"class":286},[272,609,306],{"class":282},[252,611,613],{"id":612},"works-with-all-query-types","Works with All Query Types",[615,616,618],"h3",{"id":617},"select-queries","SELECT Queries",[263,620,622],{"className":265,"code":621,"language":267,"meta":268,"style":268},"const selectQuery = db.select(users)\n  .where(and(\n    eq(users._.columns.isActive, true),\n    gt(users._.columns.loginCount, 10)\n  ))\n  .orderBy(users._.columns.createdAt, 'DESC')\n  .limit(10);\n\nconst { sql, params } = selectQuery.toSQL();\nconsole.log(sql, params);\n",[247,623,624,641,655,687,716,721,754,770,774,801],{"__ignoreMap":268},[272,625,626,628,631,633,635,637,639],{"class":274,"line":275},[272,627,384],{"class":383},[272,629,630],{"class":286}," selectQuery ",[272,632,390],{"class":282},[272,634,287],{"class":286},[272,636,395],{"class":282},[272,638,399],{"class":398},[272,640,402],{"class":286},[272,642,643,645,647,649,652],{"class":274,"line":309},[272,644,408],{"class":282},[272,646,411],{"class":398},[272,648,414],{"class":286},[272,650,651],{"class":398},"and",[272,653,654],{"class":286},"(\n",[272,656,657,660,662,664,666,668,670,672,675,677,681,684],{"class":274,"line":332},[272,658,659],{"class":398},"    eq",[272,661,420],{"class":286},[272,663,395],{"class":282},[272,665,425],{"class":286},[272,667,395],{"class":282},[272,669,430],{"class":286},[272,671,395],{"class":282},[272,673,674],{"class":286},"isActive",[272,676,342],{"class":282},[272,678,680],{"class":679},"sfNiH"," true",[272,682,683],{"class":286},")",[272,685,686],{"class":282},",\n",[272,688,689,692,694,696,698,700,702,704,707,709,713],{"class":274,"line":366},[272,690,691],{"class":398},"    gt",[272,693,420],{"class":286},[272,695,395],{"class":282},[272,697,425],{"class":286},[272,699,395],{"class":282},[272,701,430],{"class":286},[272,703,395],{"class":282},[272,705,706],{"class":286},"loginCount",[272,708,342],{"class":282},[272,710,712],{"class":711},"sbssI"," 10",[272,714,715],{"class":286},")\n",[272,717,718],{"class":274,"line":373},[272,719,720],{"class":286},"  ))\n",[272,722,723,725,728,730,732,734,736,738,740,743,745,747,750,752],{"class":274,"line":380},[272,724,408],{"class":282},[272,726,727],{"class":398},"orderBy",[272,729,420],{"class":286},[272,731,395],{"class":282},[272,733,425],{"class":286},[272,735,395],{"class":282},[272,737,430],{"class":286},[272,739,395],{"class":282},[272,741,742],{"class":286},"createdAt",[272,744,342],{"class":282},[272,746,296],{"class":282},[272,748,749],{"class":299},"DESC",[272,751,303],{"class":282},[272,753,715],{"class":286},[272,755,756,758,761,763,766,768],{"class":274,"line":405},[272,757,408],{"class":282},[272,759,760],{"class":398},"limit",[272,762,414],{"class":286},[272,764,765],{"class":711},"10",[272,767,683],{"class":286},[272,769,306],{"class":282},[272,771,772],{"class":274,"line":452},[272,773,370],{"emptyLinePlaceholder":369},[272,775,776,778,780,782,784,786,788,790,793,795,797,799],{"class":274,"line":457},[272,777,384],{"class":383},[272,779,283],{"class":282},[272,781,470],{"class":286},[272,783,342],{"class":282},[272,785,475],{"class":286},[272,787,478],{"class":282},[272,789,481],{"class":282},[272,791,792],{"class":286}," selectQuery",[272,794,395],{"class":282},[272,796,489],{"class":398},[272,798,492],{"class":286},[272,800,306],{"class":282},[272,802,803,805,807,809,812,814,816],{"class":274,"line":463},[272,804,505],{"class":286},[272,806,395],{"class":282},[272,808,510],{"class":398},[272,810,811],{"class":286},"(sql",[272,813,342],{"class":282},[272,815,566],{"class":286},[272,817,306],{"class":282},[615,819,821],{"id":820},"insert-queries","INSERT Queries",[263,823,825],{"className":265,"code":824,"language":267,"meta":268,"style":268},"const insertQuery = db.insert(users)\n  .values({ name: 'Alice', email: 'alice@example.com' });\n\nconst { sql, params } = insertQuery.toSQL();\nconsole.log(sql, params);\n// INSERT INTO users (name, email) VALUES (?, ?)\n// ['Alice', 'alice@example.com']\n",[247,826,827,845,891,895,922,938,943],{"__ignoreMap":268},[272,828,829,831,834,836,838,840,843],{"class":274,"line":275},[272,830,384],{"class":383},[272,832,833],{"class":286}," insertQuery ",[272,835,390],{"class":282},[272,837,287],{"class":286},[272,839,395],{"class":282},[272,841,842],{"class":398},"insert",[272,844,402],{"class":286},[272,846,847,849,852,854,857,861,864,866,869,871,873,876,878,880,883,885,887,889],{"class":274,"line":309},[272,848,408],{"class":282},[272,850,851],{"class":398},"values",[272,853,414],{"class":286},[272,855,856],{"class":282},"{",[272,858,860],{"class":859},"swJcz"," name",[272,862,863],{"class":282},":",[272,865,296],{"class":282},[272,867,868],{"class":299},"Alice",[272,870,303],{"class":282},[272,872,342],{"class":282},[272,874,875],{"class":859}," email",[272,877,863],{"class":282},[272,879,296],{"class":282},[272,881,882],{"class":299},"alice@example.com",[272,884,303],{"class":282},[272,886,290],{"class":282},[272,888,683],{"class":286},[272,890,306],{"class":282},[272,892,893],{"class":274,"line":332},[272,894,370],{"emptyLinePlaceholder":369},[272,896,897,899,901,903,905,907,909,911,914,916,918,920],{"class":274,"line":366},[272,898,384],{"class":383},[272,900,283],{"class":282},[272,902,470],{"class":286},[272,904,342],{"class":282},[272,906,475],{"class":286},[272,908,478],{"class":282},[272,910,481],{"class":282},[272,912,913],{"class":286}," insertQuery",[272,915,395],{"class":282},[272,917,489],{"class":398},[272,919,492],{"class":286},[272,921,306],{"class":282},[272,923,924,926,928,930,932,934,936],{"class":274,"line":373},[272,925,505],{"class":286},[272,927,395],{"class":282},[272,929,510],{"class":398},[272,931,811],{"class":286},[272,933,342],{"class":282},[272,935,566],{"class":286},[272,937,306],{"class":282},[272,939,940],{"class":274,"line":380},[272,941,942],{"class":376},"// INSERT INTO users (name, email) VALUES (?, ?)\n",[272,944,945],{"class":274,"line":405},[272,946,947],{"class":376},"// ['Alice', 'alice@example.com']\n",[615,949,951],{"id":950},"update-queries","UPDATE Queries",[263,953,955],{"className":265,"code":954,"language":267,"meta":268,"style":268},"const updateQuery = db.update(users)\n  .set({ name: 'Bob' })\n  .increment('loginCount')\n  .where(eq(users._.columns.id, 1));\n\nconst { sql, params } = updateQuery.toSQL();\nconsole.log(sql, params);\n// UPDATE users SET name = ?, login_count = login_count + ? WHERE id = ?\n// ['Bob', 1, 1]\n",[247,956,957,975,1001,1018,1052,1056,1083,1099,1104],{"__ignoreMap":268},[272,958,959,961,964,966,968,970,973],{"class":274,"line":275},[272,960,384],{"class":383},[272,962,963],{"class":286}," updateQuery ",[272,965,390],{"class":282},[272,967,287],{"class":286},[272,969,395],{"class":282},[272,971,972],{"class":398},"update",[272,974,402],{"class":286},[272,976,977,979,982,984,986,988,990,992,995,997,999],{"class":274,"line":309},[272,978,408],{"class":282},[272,980,981],{"class":398},"set",[272,983,414],{"class":286},[272,985,856],{"class":282},[272,987,860],{"class":859},[272,989,863],{"class":282},[272,991,296],{"class":282},[272,993,994],{"class":299},"Bob",[272,996,303],{"class":282},[272,998,290],{"class":282},[272,1000,715],{"class":286},[272,1002,1003,1005,1008,1010,1012,1014,1016],{"class":274,"line":332},[272,1004,408],{"class":282},[272,1006,1007],{"class":398},"increment",[272,1009,414],{"class":286},[272,1011,303],{"class":282},[272,1013,706],{"class":299},[272,1015,303],{"class":282},[272,1017,715],{"class":286},[272,1019,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1043,1045,1048,1050],{"class":274,"line":366},[272,1021,408],{"class":282},[272,1023,411],{"class":398},[272,1025,414],{"class":286},[272,1027,417],{"class":398},[272,1029,420],{"class":286},[272,1031,395],{"class":282},[272,1033,425],{"class":286},[272,1035,395],{"class":282},[272,1037,430],{"class":286},[272,1039,395],{"class":282},[272,1041,1042],{"class":286},"id",[272,1044,342],{"class":282},[272,1046,1047],{"class":711}," 1",[272,1049,447],{"class":286},[272,1051,306],{"class":282},[272,1053,1054],{"class":274,"line":373},[272,1055,370],{"emptyLinePlaceholder":369},[272,1057,1058,1060,1062,1064,1066,1068,1070,1072,1075,1077,1079,1081],{"class":274,"line":380},[272,1059,384],{"class":383},[272,1061,283],{"class":282},[272,1063,470],{"class":286},[272,1065,342],{"class":282},[272,1067,475],{"class":286},[272,1069,478],{"class":282},[272,1071,481],{"class":282},[272,1073,1074],{"class":286}," updateQuery",[272,1076,395],{"class":282},[272,1078,489],{"class":398},[272,1080,492],{"class":286},[272,1082,306],{"class":282},[272,1084,1085,1087,1089,1091,1093,1095,1097],{"class":274,"line":405},[272,1086,505],{"class":286},[272,1088,395],{"class":282},[272,1090,510],{"class":398},[272,1092,811],{"class":286},[272,1094,342],{"class":282},[272,1096,566],{"class":286},[272,1098,306],{"class":282},[272,1100,1101],{"class":274,"line":452},[272,1102,1103],{"class":376},"// UPDATE users SET name = ?, login_count = login_count + ? WHERE id = ?\n",[272,1105,1106],{"class":274,"line":457},[272,1107,1108],{"class":376},"// ['Bob', 1, 1]\n",[615,1110,1112],{"id":1111},"delete-queries","DELETE Queries",[263,1114,1116],{"className":265,"code":1115,"language":267,"meta":268,"style":268},"const deleteQuery = db.delete(users)\n  .where(eq(users._.columns.id, 1));\n\nconst { sql, params } = deleteQuery.toSQL();\nconsole.log(sql, params);\n// DELETE FROM users WHERE id = ?\n// [1]\n",[247,1117,1118,1136,1168,1172,1199,1215,1220],{"__ignoreMap":268},[272,1119,1120,1122,1125,1127,1129,1131,1134],{"class":274,"line":275},[272,1121,384],{"class":383},[272,1123,1124],{"class":286}," deleteQuery ",[272,1126,390],{"class":282},[272,1128,287],{"class":286},[272,1130,395],{"class":282},[272,1132,1133],{"class":398},"delete",[272,1135,402],{"class":286},[272,1137,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166],{"class":274,"line":309},[272,1139,408],{"class":282},[272,1141,411],{"class":398},[272,1143,414],{"class":286},[272,1145,417],{"class":398},[272,1147,420],{"class":286},[272,1149,395],{"class":282},[272,1151,425],{"class":286},[272,1153,395],{"class":282},[272,1155,430],{"class":286},[272,1157,395],{"class":282},[272,1159,1042],{"class":286},[272,1161,342],{"class":282},[272,1163,1047],{"class":711},[272,1165,447],{"class":286},[272,1167,306],{"class":282},[272,1169,1170],{"class":274,"line":332},[272,1171,370],{"emptyLinePlaceholder":369},[272,1173,1174,1176,1178,1180,1182,1184,1186,1188,1191,1193,1195,1197],{"class":274,"line":366},[272,1175,384],{"class":383},[272,1177,283],{"class":282},[272,1179,470],{"class":286},[272,1181,342],{"class":282},[272,1183,475],{"class":286},[272,1185,478],{"class":282},[272,1187,481],{"class":282},[272,1189,1190],{"class":286}," deleteQuery",[272,1192,395],{"class":282},[272,1194,489],{"class":398},[272,1196,492],{"class":286},[272,1198,306],{"class":282},[272,1200,1201,1203,1205,1207,1209,1211,1213],{"class":274,"line":373},[272,1202,505],{"class":286},[272,1204,395],{"class":282},[272,1206,510],{"class":398},[272,1208,811],{"class":286},[272,1210,342],{"class":282},[272,1212,566],{"class":286},[272,1214,306],{"class":282},[272,1216,1217],{"class":274,"line":380},[272,1218,1219],{"class":376},"// DELETE FROM users WHERE id = ?\n",[272,1221,1222],{"class":274,"line":405},[272,1223,1224],{"class":376},"// [1]\n",[252,1226,1228],{"id":1227},"use-cases","Use Cases",[615,1230,1232],{"id":1231},"_1-query-logging","1. Query Logging",[243,1234,1235],{},"Log all queries for debugging or audit purposes:",[263,1237,1239],{"className":265,"code":1238,"language":267,"meta":268,"style":268},"async function executeWithLogging\u003CT>(query: any): Promise\u003CT> {\n  const { sql, params } = query.toSQL();\n  const timestamp = new Date().toISOString();\n  \n  console.log(`[${timestamp}] SQL:`, sql);\n  console.log(`[${timestamp}] Params:`, params);\n  \n  const startTime = Date.now();\n  const result = await query.execute();\n  const duration = Date.now() - startTime;\n  \n  console.log(`[${timestamp}] Completed in ${duration}ms`);\n  return result;\n}\n\n// Usage\nconst users = await executeWithLogging(\n  db.select(users).where(eq(users._.columns.id, 1))\n);\n",[247,1240,1241,1287,1315,1341,1346,1384,1417,1421,1441,1463,1488,1492,1531,1540,1545,1549,1554,1569,1610],{"__ignoreMap":268},[272,1242,1243,1246,1249,1252,1255,1259,1262,1266,1268,1271,1274,1277,1279,1281,1284],{"class":274,"line":275},[272,1244,1245],{"class":383},"async",[272,1247,1248],{"class":383}," function",[272,1250,1251],{"class":398}," executeWithLogging",[272,1253,1254],{"class":282},"\u003C",[272,1256,1258],{"class":1257},"sBMFI","T",[272,1260,1261],{"class":282},">(",[272,1263,1265],{"class":1264},"sHdIc","query",[272,1267,863],{"class":282},[272,1269,1270],{"class":1257}," any",[272,1272,1273],{"class":282},"):",[272,1275,1276],{"class":1257}," Promise",[272,1278,1254],{"class":282},[272,1280,1258],{"class":1257},[272,1282,1283],{"class":282},">",[272,1285,1286],{"class":282}," {\n",[272,1288,1289,1292,1294,1296,1298,1301,1303,1305,1307,1309,1311,1313],{"class":274,"line":309},[272,1290,1291],{"class":383},"  const",[272,1293,283],{"class":282},[272,1295,470],{"class":286},[272,1297,342],{"class":282},[272,1299,1300],{"class":286}," params",[272,1302,290],{"class":282},[272,1304,481],{"class":282},[272,1306,484],{"class":286},[272,1308,395],{"class":282},[272,1310,489],{"class":398},[272,1312,492],{"class":859},[272,1314,306],{"class":282},[272,1316,1317,1319,1322,1324,1327,1330,1332,1334,1337,1339],{"class":274,"line":332},[272,1318,1291],{"class":383},[272,1320,1321],{"class":286}," timestamp",[272,1323,481],{"class":282},[272,1325,1326],{"class":282}," new",[272,1328,1329],{"class":398}," Date",[272,1331,492],{"class":859},[272,1333,395],{"class":282},[272,1335,1336],{"class":398},"toISOString",[272,1338,492],{"class":859},[272,1340,306],{"class":282},[272,1342,1343],{"class":274,"line":366},[272,1344,1345],{"class":859},"  \n",[272,1347,1348,1351,1353,1355,1357,1360,1363,1366,1369,1371,1374,1376,1378,1380,1382],{"class":274,"line":373},[272,1349,1350],{"class":286},"  console",[272,1352,395],{"class":282},[272,1354,510],{"class":398},[272,1356,414],{"class":859},[272,1358,1359],{"class":282},"`",[272,1361,1362],{"class":299},"[",[272,1364,1365],{"class":282},"${",[272,1367,1368],{"class":286},"timestamp",[272,1370,478],{"class":282},[272,1372,1373],{"class":299},"] SQL:",[272,1375,1359],{"class":282},[272,1377,342],{"class":282},[272,1379,470],{"class":286},[272,1381,683],{"class":859},[272,1383,306],{"class":282},[272,1385,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1407,1409,1411,1413,1415],{"class":274,"line":380},[272,1387,1350],{"class":286},[272,1389,395],{"class":282},[272,1391,510],{"class":398},[272,1393,414],{"class":859},[272,1395,1359],{"class":282},[272,1397,1362],{"class":299},[272,1399,1365],{"class":282},[272,1401,1368],{"class":286},[272,1403,478],{"class":282},[272,1405,1406],{"class":299},"] Params:",[272,1408,1359],{"class":282},[272,1410,342],{"class":282},[272,1412,1300],{"class":286},[272,1414,683],{"class":859},[272,1416,306],{"class":282},[272,1418,1419],{"class":274,"line":405},[272,1420,1345],{"class":859},[272,1422,1423,1425,1428,1430,1432,1434,1437,1439],{"class":274,"line":452},[272,1424,1291],{"class":383},[272,1426,1427],{"class":286}," startTime",[272,1429,481],{"class":282},[272,1431,1329],{"class":286},[272,1433,395],{"class":282},[272,1435,1436],{"class":398},"now",[272,1438,492],{"class":859},[272,1440,306],{"class":282},[272,1442,1443,1445,1448,1450,1452,1454,1456,1459,1461],{"class":274,"line":457},[272,1444,1291],{"class":383},[272,1446,1447],{"class":286}," result",[272,1449,481],{"class":282},[272,1451,598],{"class":278},[272,1453,484],{"class":286},[272,1455,395],{"class":282},[272,1457,1458],{"class":398},"execute",[272,1460,492],{"class":859},[272,1462,306],{"class":282},[272,1464,1465,1467,1470,1472,1474,1476,1478,1481,1484,1486],{"class":274,"line":463},[272,1466,1291],{"class":383},[272,1468,1469],{"class":286}," duration",[272,1471,481],{"class":282},[272,1473,1329],{"class":286},[272,1475,395],{"class":282},[272,1477,1436],{"class":398},[272,1479,1480],{"class":859},"() ",[272,1482,1483],{"class":282},"-",[272,1485,1427],{"class":286},[272,1487,306],{"class":282},[272,1489,1490],{"class":274,"line":497},[272,1491,1345],{"class":859},[272,1493,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1515,1517,1520,1522,1525,1527,1529],{"class":274,"line":502},[272,1495,1350],{"class":286},[272,1497,395],{"class":282},[272,1499,510],{"class":398},[272,1501,414],{"class":859},[272,1503,1359],{"class":282},[272,1505,1362],{"class":299},[272,1507,1365],{"class":282},[272,1509,1368],{"class":286},[272,1511,478],{"class":282},[272,1513,1514],{"class":299},"] Completed in ",[272,1516,1365],{"class":282},[272,1518,1519],{"class":286},"duration",[272,1521,478],{"class":282},[272,1523,1524],{"class":299},"ms",[272,1526,1359],{"class":282},[272,1528,683],{"class":859},[272,1530,306],{"class":282},[272,1532,1533,1536,1538],{"class":274,"line":529},[272,1534,1535],{"class":278},"  return",[272,1537,1447],{"class":286},[272,1539,306],{"class":282},[272,1541,1542],{"class":274,"line":535},[272,1543,1544],{"class":282},"}\n",[272,1546,1547],{"class":274,"line":541},[272,1548,370],{"emptyLinePlaceholder":369},[272,1550,1551],{"class":274,"line":546},[272,1552,1553],{"class":376},"// Usage\n",[272,1555,1556,1558,1561,1563,1565,1567],{"class":274,"line":571},[272,1557,384],{"class":383},[272,1559,1560],{"class":286}," users ",[272,1562,390],{"class":282},[272,1564,598],{"class":278},[272,1566,1251],{"class":398},[272,1568,654],{"class":286},[272,1570,1571,1574,1576,1578,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607],{"class":274,"line":577},[272,1572,1573],{"class":286},"  db",[272,1575,395],{"class":282},[272,1577,399],{"class":398},[272,1579,1580],{"class":286},"(users)",[272,1582,395],{"class":282},[272,1584,411],{"class":398},[272,1586,414],{"class":286},[272,1588,417],{"class":398},[272,1590,420],{"class":286},[272,1592,395],{"class":282},[272,1594,425],{"class":286},[272,1596,395],{"class":282},[272,1598,430],{"class":286},[272,1600,395],{"class":282},[272,1602,1042],{"class":286},[272,1604,342],{"class":282},[272,1606,1047],{"class":711},[272,1608,1609],{"class":286},"))\n",[272,1611,1612,1614],{"class":274,"line":582},[272,1613,683],{"class":286},[272,1615,306],{"class":282},[615,1617,1619],{"id":1618},"_2-testing","2. Testing",[243,1621,1622],{},"Verify that your ORM generates the expected SQL:",[263,1624,1626],{"className":265,"code":1625,"language":267,"meta":268,"style":268},"import { describe, test, expect } from 'vitest';\n\ndescribe('User queries', () => {\n  test('should generate correct SELECT query', () => {\n    const query = db.select(users)\n      .where(eq(users._.columns.email, 'test@example.com'));\n    \n    const { sql, params } = query.toSQL();\n    \n    expect(sql).toContain('SELECT');\n    expect(sql).toContain('WHERE');\n    expect(sql).toContain('email = ?');\n    expect(params).toEqual(['test@example.com']);\n  });\n});\n",[247,1627,1628,1660,1664,1688,1710,1732,1772,1777,1803,1807,1837,1864,1891,1921,1930],{"__ignoreMap":268},[272,1629,1630,1632,1634,1637,1639,1642,1644,1647,1649,1651,1653,1656,1658],{"class":274,"line":275},[272,1631,279],{"class":278},[272,1633,283],{"class":282},[272,1635,1636],{"class":286}," describe",[272,1638,342],{"class":282},[272,1640,1641],{"class":286}," test",[272,1643,342],{"class":282},[272,1645,1646],{"class":286}," expect",[272,1648,290],{"class":282},[272,1650,293],{"class":278},[272,1652,296],{"class":282},[272,1654,1655],{"class":299},"vitest",[272,1657,303],{"class":282},[272,1659,306],{"class":282},[272,1661,1662],{"class":274,"line":309},[272,1663,370],{"emptyLinePlaceholder":369},[272,1665,1666,1669,1671,1673,1676,1678,1680,1683,1686],{"class":274,"line":332},[272,1667,1668],{"class":398},"describe",[272,1670,414],{"class":286},[272,1672,303],{"class":282},[272,1674,1675],{"class":299},"User queries",[272,1677,303],{"class":282},[272,1679,342],{"class":282},[272,1681,1682],{"class":282}," ()",[272,1684,1685],{"class":383}," =>",[272,1687,1286],{"class":282},[272,1689,1690,1693,1695,1697,1700,1702,1704,1706,1708],{"class":274,"line":366},[272,1691,1692],{"class":398},"  test",[272,1694,414],{"class":859},[272,1696,303],{"class":282},[272,1698,1699],{"class":299},"should generate correct SELECT query",[272,1701,303],{"class":282},[272,1703,342],{"class":282},[272,1705,1682],{"class":282},[272,1707,1685],{"class":383},[272,1709,1286],{"class":282},[272,1711,1712,1715,1717,1719,1721,1723,1725,1727,1730],{"class":274,"line":373},[272,1713,1714],{"class":383},"    const",[272,1716,484],{"class":286},[272,1718,481],{"class":282},[272,1720,287],{"class":286},[272,1722,395],{"class":282},[272,1724,399],{"class":398},[272,1726,414],{"class":859},[272,1728,1729],{"class":286},"users",[272,1731,715],{"class":859},[272,1733,1734,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1766,1768,1770],{"class":274,"line":380},[272,1735,1736],{"class":282},"      .",[272,1738,411],{"class":398},[272,1740,414],{"class":859},[272,1742,417],{"class":398},[272,1744,414],{"class":859},[272,1746,1729],{"class":286},[272,1748,395],{"class":282},[272,1750,425],{"class":286},[272,1752,395],{"class":282},[272,1754,430],{"class":286},[272,1756,395],{"class":282},[272,1758,435],{"class":286},[272,1760,342],{"class":282},[272,1762,296],{"class":282},[272,1764,1765],{"class":299},"test@example.com",[272,1767,303],{"class":282},[272,1769,447],{"class":859},[272,1771,306],{"class":282},[272,1773,1774],{"class":274,"line":405},[272,1775,1776],{"class":859},"    \n",[272,1778,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801],{"class":274,"line":452},[272,1780,1714],{"class":383},[272,1782,283],{"class":282},[272,1784,470],{"class":286},[272,1786,342],{"class":282},[272,1788,1300],{"class":286},[272,1790,290],{"class":282},[272,1792,481],{"class":282},[272,1794,484],{"class":286},[272,1796,395],{"class":282},[272,1798,489],{"class":398},[272,1800,492],{"class":859},[272,1802,306],{"class":282},[272,1804,1805],{"class":274,"line":457},[272,1806,1776],{"class":859},[272,1808,1809,1812,1814,1817,1819,1821,1824,1826,1828,1831,1833,1835],{"class":274,"line":463},[272,1810,1811],{"class":398},"    expect",[272,1813,414],{"class":859},[272,1815,1816],{"class":286},"sql",[272,1818,683],{"class":859},[272,1820,395],{"class":282},[272,1822,1823],{"class":398},"toContain",[272,1825,414],{"class":859},[272,1827,303],{"class":282},[272,1829,1830],{"class":299},"SELECT",[272,1832,303],{"class":282},[272,1834,683],{"class":859},[272,1836,306],{"class":282},[272,1838,1839,1841,1843,1845,1847,1849,1851,1853,1855,1858,1860,1862],{"class":274,"line":497},[272,1840,1811],{"class":398},[272,1842,414],{"class":859},[272,1844,1816],{"class":286},[272,1846,683],{"class":859},[272,1848,395],{"class":282},[272,1850,1823],{"class":398},[272,1852,414],{"class":859},[272,1854,303],{"class":282},[272,1856,1857],{"class":299},"WHERE",[272,1859,303],{"class":282},[272,1861,683],{"class":859},[272,1863,306],{"class":282},[272,1865,1866,1868,1870,1872,1874,1876,1878,1880,1882,1885,1887,1889],{"class":274,"line":502},[272,1867,1811],{"class":398},[272,1869,414],{"class":859},[272,1871,1816],{"class":286},[272,1873,683],{"class":859},[272,1875,395],{"class":282},[272,1877,1823],{"class":398},[272,1879,414],{"class":859},[272,1881,303],{"class":282},[272,1883,1884],{"class":299},"email = ?",[272,1886,303],{"class":282},[272,1888,683],{"class":859},[272,1890,306],{"class":282},[272,1892,1893,1895,1897,1900,1902,1904,1907,1910,1912,1914,1916,1919],{"class":274,"line":529},[272,1894,1811],{"class":398},[272,1896,414],{"class":859},[272,1898,1899],{"class":286},"params",[272,1901,683],{"class":859},[272,1903,395],{"class":282},[272,1905,1906],{"class":398},"toEqual",[272,1908,1909],{"class":859},"([",[272,1911,303],{"class":282},[272,1913,1765],{"class":299},[272,1915,303],{"class":282},[272,1917,1918],{"class":859},"])",[272,1920,306],{"class":282},[272,1922,1923,1926,1928],{"class":274,"line":535},[272,1924,1925],{"class":282},"  }",[272,1927,683],{"class":859},[272,1929,306],{"class":282},[272,1931,1932,1934,1936],{"class":274,"line":541},[272,1933,478],{"class":282},[272,1935,683],{"class":286},[272,1937,306],{"class":282},[615,1939,1941],{"id":1940},"_3-performance-analysis","3. Performance Analysis",[243,1943,1944],{},"Copy the SQL to analyze with EXPLAIN:",[263,1946,1948],{"className":265,"code":1947,"language":267,"meta":268,"style":268},"const query = db.select(posts)\n  .where(gt(posts._.columns.views, 1000))\n  .orderBy(posts._.columns.createdAt, 'DESC');\n\nconst { sql, params } = query.toSQL();\n\n// Copy this SQL to analyze in a SQL tool\nconsole.log('Run this to analyze performance:');\nconsole.log(`EXPLAIN QUERY PLAN ${sql}`);\nconsole.log('With params:', params);\n",[247,1949,1950,1967,2001,2033,2037,2063,2067,2072,2093,2119],{"__ignoreMap":268},[272,1951,1952,1954,1956,1958,1960,1962,1964],{"class":274,"line":275},[272,1953,384],{"class":383},[272,1955,387],{"class":286},[272,1957,390],{"class":282},[272,1959,287],{"class":286},[272,1961,395],{"class":282},[272,1963,399],{"class":398},[272,1965,1966],{"class":286},"(posts)\n",[272,1968,1969,1971,1973,1975,1978,1981,1983,1985,1987,1989,1991,1994,1996,1999],{"class":274,"line":309},[272,1970,408],{"class":282},[272,1972,411],{"class":398},[272,1974,414],{"class":286},[272,1976,1977],{"class":398},"gt",[272,1979,1980],{"class":286},"(posts",[272,1982,395],{"class":282},[272,1984,425],{"class":286},[272,1986,395],{"class":282},[272,1988,430],{"class":286},[272,1990,395],{"class":282},[272,1992,1993],{"class":286},"views",[272,1995,342],{"class":282},[272,1997,1998],{"class":711}," 1000",[272,2000,1609],{"class":286},[272,2002,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031],{"class":274,"line":332},[272,2004,408],{"class":282},[272,2006,727],{"class":398},[272,2008,1980],{"class":286},[272,2010,395],{"class":282},[272,2012,425],{"class":286},[272,2014,395],{"class":282},[272,2016,430],{"class":286},[272,2018,395],{"class":282},[272,2020,742],{"class":286},[272,2022,342],{"class":282},[272,2024,296],{"class":282},[272,2026,749],{"class":299},[272,2028,303],{"class":282},[272,2030,683],{"class":286},[272,2032,306],{"class":282},[272,2034,2035],{"class":274,"line":366},[272,2036,370],{"emptyLinePlaceholder":369},[272,2038,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061],{"class":274,"line":373},[272,2040,384],{"class":383},[272,2042,283],{"class":282},[272,2044,470],{"class":286},[272,2046,342],{"class":282},[272,2048,475],{"class":286},[272,2050,478],{"class":282},[272,2052,481],{"class":282},[272,2054,484],{"class":286},[272,2056,395],{"class":282},[272,2058,489],{"class":398},[272,2060,492],{"class":286},[272,2062,306],{"class":282},[272,2064,2065],{"class":274,"line":380},[272,2066,370],{"emptyLinePlaceholder":369},[272,2068,2069],{"class":274,"line":405},[272,2070,2071],{"class":376},"// Copy this SQL to analyze in a SQL tool\n",[272,2073,2074,2076,2078,2080,2082,2084,2087,2089,2091],{"class":274,"line":452},[272,2075,505],{"class":286},[272,2077,395],{"class":282},[272,2079,510],{"class":398},[272,2081,414],{"class":286},[272,2083,303],{"class":282},[272,2085,2086],{"class":299},"Run this to analyze performance:",[272,2088,303],{"class":282},[272,2090,683],{"class":286},[272,2092,306],{"class":282},[272,2094,2095,2097,2099,2101,2103,2105,2108,2110,2112,2115,2117],{"class":274,"line":457},[272,2096,505],{"class":286},[272,2098,395],{"class":282},[272,2100,510],{"class":398},[272,2102,414],{"class":286},[272,2104,1359],{"class":282},[272,2106,2107],{"class":299},"EXPLAIN QUERY PLAN ",[272,2109,1365],{"class":282},[272,2111,1816],{"class":286},[272,2113,2114],{"class":282},"}`",[272,2116,683],{"class":286},[272,2118,306],{"class":282},[272,2120,2121,2123,2125,2127,2129,2131,2134,2136,2138,2140],{"class":274,"line":463},[272,2122,505],{"class":286},[272,2124,395],{"class":282},[272,2126,510],{"class":398},[272,2128,414],{"class":286},[272,2130,303],{"class":282},[272,2132,2133],{"class":299},"With params:",[272,2135,303],{"class":282},[272,2137,342],{"class":282},[272,2139,566],{"class":286},[272,2141,306],{"class":282},[615,2143,2145],{"id":2144},"_4-learning","4. Learning",[243,2147,2148],{},"Understand what SQL is being generated:",[263,2150,2152],{"className":265,"code":2151,"language":267,"meta":268,"style":268},"// Complex query with relations\nconst query = db.select(users)\n  .include({\n    posts: {\n      with: {\n        comments: true\n      }\n    }\n  })\n  .where(eq(users._.columns.isActive, true));\n\nconst { sql } = query.toSQL();\nconsole.log('Generated SQL:', sql);\n// See how the ORM handles JOINs and nested relations\n",[247,2153,2154,2159,2175,2187,2196,2205,2215,2220,2225,2231,2263,2267,2290,2313],{"__ignoreMap":268},[272,2155,2156],{"class":274,"line":275},[272,2157,2158],{"class":376},"// Complex query with relations\n",[272,2160,2161,2163,2165,2167,2169,2171,2173],{"class":274,"line":309},[272,2162,384],{"class":383},[272,2164,387],{"class":286},[272,2166,390],{"class":282},[272,2168,287],{"class":286},[272,2170,395],{"class":282},[272,2172,399],{"class":398},[272,2174,402],{"class":286},[272,2176,2177,2179,2182,2184],{"class":274,"line":332},[272,2178,408],{"class":282},[272,2180,2181],{"class":398},"include",[272,2183,414],{"class":286},[272,2185,2186],{"class":282},"{\n",[272,2188,2189,2192,2194],{"class":274,"line":366},[272,2190,2191],{"class":859},"    posts",[272,2193,863],{"class":282},[272,2195,1286],{"class":282},[272,2197,2198,2201,2203],{"class":274,"line":373},[272,2199,2200],{"class":859},"      with",[272,2202,863],{"class":282},[272,2204,1286],{"class":282},[272,2206,2207,2210,2212],{"class":274,"line":380},[272,2208,2209],{"class":859},"        comments",[272,2211,863],{"class":282},[272,2213,2214],{"class":679}," true\n",[272,2216,2217],{"class":274,"line":405},[272,2218,2219],{"class":282},"      }\n",[272,2221,2222],{"class":274,"line":452},[272,2223,2224],{"class":282},"    }\n",[272,2226,2227,2229],{"class":274,"line":457},[272,2228,1925],{"class":282},[272,2230,715],{"class":286},[272,2232,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261],{"class":274,"line":463},[272,2234,408],{"class":282},[272,2236,411],{"class":398},[272,2238,414],{"class":286},[272,2240,417],{"class":398},[272,2242,420],{"class":286},[272,2244,395],{"class":282},[272,2246,425],{"class":286},[272,2248,395],{"class":282},[272,2250,430],{"class":286},[272,2252,395],{"class":282},[272,2254,674],{"class":286},[272,2256,342],{"class":282},[272,2258,680],{"class":679},[272,2260,447],{"class":286},[272,2262,306],{"class":282},[272,2264,2265],{"class":274,"line":497},[272,2266,370],{"emptyLinePlaceholder":369},[272,2268,2269,2271,2273,2276,2278,2280,2282,2284,2286,2288],{"class":274,"line":502},[272,2270,384],{"class":383},[272,2272,283],{"class":282},[272,2274,2275],{"class":286}," sql ",[272,2277,478],{"class":282},[272,2279,481],{"class":282},[272,2281,484],{"class":286},[272,2283,395],{"class":282},[272,2285,489],{"class":398},[272,2287,492],{"class":286},[272,2289,306],{"class":282},[272,2291,2292,2294,2296,2298,2300,2302,2305,2307,2309,2311],{"class":274,"line":529},[272,2293,505],{"class":286},[272,2295,395],{"class":282},[272,2297,510],{"class":398},[272,2299,414],{"class":286},[272,2301,303],{"class":282},[272,2303,2304],{"class":299},"Generated SQL:",[272,2306,303],{"class":282},[272,2308,342],{"class":282},[272,2310,524],{"class":286},[272,2312,306],{"class":282},[272,2314,2315],{"class":274,"line":535},[272,2316,2317],{"class":376},"// See how the ORM handles JOINs and nested relations\n",[615,2319,2321],{"id":2320},"_5-debugging-production-issues","5. Debugging Production Issues",[243,2323,2324],{},"When a query fails in production, log the SQL to understand what went wrong:",[263,2326,2328],{"className":265,"code":2327,"language":267,"meta":268,"style":268},"try {\n  await db.update(users)\n    .set({ status: newStatus })\n    .where(eq(users._.columns.id, userId))\n    .execute();\n} catch (error) {\n  const { sql, params } = db.update(users)\n    .set({ status: newStatus })\n    .where(eq(users._.columns.id, userId))\n    .toSQL();\n  \n  console.error('Query failed:', { sql, params, error });\n  // Send to error tracking service\n}\n",[247,2329,2330,2337,2354,2377,2410,2420,2432,2460,2480,2512,2522,2526,2565,2570],{"__ignoreMap":268},[272,2331,2332,2335],{"class":274,"line":275},[272,2333,2334],{"class":278},"try",[272,2336,1286],{"class":282},[272,2338,2339,2342,2344,2346,2348,2350,2352],{"class":274,"line":309},[272,2340,2341],{"class":278},"  await",[272,2343,287],{"class":286},[272,2345,395],{"class":282},[272,2347,972],{"class":398},[272,2349,414],{"class":859},[272,2351,1729],{"class":286},[272,2353,715],{"class":859},[272,2355,2356,2359,2361,2363,2365,2368,2370,2373,2375],{"class":274,"line":332},[272,2357,2358],{"class":282},"    .",[272,2360,981],{"class":398},[272,2362,414],{"class":859},[272,2364,856],{"class":282},[272,2366,2367],{"class":859}," status",[272,2369,863],{"class":282},[272,2371,2372],{"class":286}," newStatus",[272,2374,290],{"class":282},[272,2376,715],{"class":859},[272,2378,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2408],{"class":274,"line":366},[272,2380,2358],{"class":282},[272,2382,411],{"class":398},[272,2384,414],{"class":859},[272,2386,417],{"class":398},[272,2388,414],{"class":859},[272,2390,1729],{"class":286},[272,2392,395],{"class":282},[272,2394,425],{"class":286},[272,2396,395],{"class":282},[272,2398,430],{"class":286},[272,2400,395],{"class":282},[272,2402,1042],{"class":286},[272,2404,342],{"class":282},[272,2406,2407],{"class":286}," userId",[272,2409,1609],{"class":859},[272,2411,2412,2414,2416,2418],{"class":274,"line":373},[272,2413,2358],{"class":282},[272,2415,1458],{"class":398},[272,2417,492],{"class":859},[272,2419,306],{"class":282},[272,2421,2422,2424,2427,2430],{"class":274,"line":380},[272,2423,478],{"class":282},[272,2425,2426],{"class":278}," catch",[272,2428,2429],{"class":286}," (error) ",[272,2431,2186],{"class":282},[272,2433,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458],{"class":274,"line":405},[272,2435,1291],{"class":383},[272,2437,283],{"class":282},[272,2439,470],{"class":286},[272,2441,342],{"class":282},[272,2443,1300],{"class":286},[272,2445,290],{"class":282},[272,2447,481],{"class":282},[272,2449,287],{"class":286},[272,2451,395],{"class":282},[272,2453,972],{"class":398},[272,2455,414],{"class":859},[272,2457,1729],{"class":286},[272,2459,715],{"class":859},[272,2461,2462,2464,2466,2468,2470,2472,2474,2476,2478],{"class":274,"line":452},[272,2463,2358],{"class":282},[272,2465,981],{"class":398},[272,2467,414],{"class":859},[272,2469,856],{"class":282},[272,2471,2367],{"class":859},[272,2473,863],{"class":282},[272,2475,2372],{"class":286},[272,2477,290],{"class":282},[272,2479,715],{"class":859},[272,2481,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510],{"class":274,"line":457},[272,2483,2358],{"class":282},[272,2485,411],{"class":398},[272,2487,414],{"class":859},[272,2489,417],{"class":398},[272,2491,414],{"class":859},[272,2493,1729],{"class":286},[272,2495,395],{"class":282},[272,2497,425],{"class":286},[272,2499,395],{"class":282},[272,2501,430],{"class":286},[272,2503,395],{"class":282},[272,2505,1042],{"class":286},[272,2507,342],{"class":282},[272,2509,2407],{"class":286},[272,2511,1609],{"class":859},[272,2513,2514,2516,2518,2520],{"class":274,"line":463},[272,2515,2358],{"class":282},[272,2517,489],{"class":398},[272,2519,492],{"class":859},[272,2521,306],{"class":282},[272,2523,2524],{"class":274,"line":497},[272,2525,1345],{"class":859},[272,2527,2528,2530,2532,2535,2537,2539,2542,2544,2546,2548,2550,2552,2554,2556,2559,2561,2563],{"class":274,"line":502},[272,2529,1350],{"class":286},[272,2531,395],{"class":282},[272,2533,2534],{"class":398},"error",[272,2536,414],{"class":859},[272,2538,303],{"class":282},[272,2540,2541],{"class":299},"Query failed:",[272,2543,303],{"class":282},[272,2545,342],{"class":282},[272,2547,283],{"class":282},[272,2549,470],{"class":286},[272,2551,342],{"class":282},[272,2553,1300],{"class":286},[272,2555,342],{"class":282},[272,2557,2558],{"class":286}," error",[272,2560,290],{"class":282},[272,2562,683],{"class":859},[272,2564,306],{"class":282},[272,2566,2567],{"class":274,"line":529},[272,2568,2569],{"class":376},"  // Send to error tracking service\n",[272,2571,2572],{"class":274,"line":535},[272,2573,1544],{"class":282},[252,2575,2577],{"id":2576},"important-notes","Important Notes",[615,2579,2581],{"id":2580},"tosql-doesnt-execute","toSQL() Doesn't Execute",[243,2583,2584,2585,2587],{},"Calling ",[247,2586,249],{}," only builds the SQL - it doesn't execute anything:",[263,2589,2591],{"className":265,"code":2590,"language":267,"meta":268,"style":268},"const query = db.select(users);\n\n// This doesn't query the database\nconst { sql } = query.toSQL();\n\n// This actually executes\nconst results = await query.all();\n",[247,2592,2593,2611,2615,2620,2642,2646,2651],{"__ignoreMap":268},[272,2594,2595,2597,2599,2601,2603,2605,2607,2609],{"class":274,"line":275},[272,2596,384],{"class":383},[272,2598,387],{"class":286},[272,2600,390],{"class":282},[272,2602,287],{"class":286},[272,2604,395],{"class":282},[272,2606,399],{"class":398},[272,2608,1580],{"class":286},[272,2610,306],{"class":282},[272,2612,2613],{"class":274,"line":309},[272,2614,370],{"emptyLinePlaceholder":369},[272,2616,2617],{"class":274,"line":332},[272,2618,2619],{"class":376},"// This doesn't query the database\n",[272,2621,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640],{"class":274,"line":366},[272,2623,384],{"class":383},[272,2625,283],{"class":282},[272,2627,2275],{"class":286},[272,2629,478],{"class":282},[272,2631,481],{"class":282},[272,2633,484],{"class":286},[272,2635,395],{"class":282},[272,2637,489],{"class":398},[272,2639,492],{"class":286},[272,2641,306],{"class":282},[272,2643,2644],{"class":274,"line":373},[272,2645,370],{"emptyLinePlaceholder":369},[272,2647,2648],{"class":274,"line":380},[272,2649,2650],{"class":376},"// This actually executes\n",[272,2652,2653,2655,2657,2659,2661,2663,2665,2667,2669],{"class":274,"line":405},[272,2654,384],{"class":383},[272,2656,593],{"class":286},[272,2658,390],{"class":282},[272,2660,598],{"class":278},[272,2662,484],{"class":286},[272,2664,395],{"class":282},[272,2666,605],{"class":398},[272,2668,492],{"class":286},[272,2670,306],{"class":282},[615,2672,2674],{"id":2673},"tosql-doesnt-validate-where-clauses","toSQL() Doesn't Validate WHERE Clauses",[243,2676,2677,2678,2680],{},"For safety, UPDATE and DELETE queries require WHERE clauses when executing, but ",[247,2679,249],{}," skips this validation (it's for debugging):",[263,2682,2684],{"className":265,"code":2683,"language":267,"meta":268,"style":268},"// This works - shows the SQL\nconst { sql } = db.update(users)\n  .set({ name: 'Bob' })\n  .toSQL();\n\n// But executing without WHERE will throw an error\n// await db.update(users).set({ name: 'Bob' }).execute(); // ❌ Error!\n",[247,2685,2686,2691,2711,2735,2745,2749,2754],{"__ignoreMap":268},[272,2687,2688],{"class":274,"line":275},[272,2689,2690],{"class":376},"// This works - shows the SQL\n",[272,2692,2693,2695,2697,2699,2701,2703,2705,2707,2709],{"class":274,"line":309},[272,2694,384],{"class":383},[272,2696,283],{"class":282},[272,2698,2275],{"class":286},[272,2700,478],{"class":282},[272,2702,481],{"class":282},[272,2704,287],{"class":286},[272,2706,395],{"class":282},[272,2708,972],{"class":398},[272,2710,402],{"class":286},[272,2712,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733],{"class":274,"line":332},[272,2714,408],{"class":282},[272,2716,981],{"class":398},[272,2718,414],{"class":286},[272,2720,856],{"class":282},[272,2722,860],{"class":859},[272,2724,863],{"class":282},[272,2726,296],{"class":282},[272,2728,994],{"class":299},[272,2730,303],{"class":282},[272,2732,290],{"class":282},[272,2734,715],{"class":286},[272,2736,2737,2739,2741,2743],{"class":274,"line":366},[272,2738,408],{"class":282},[272,2740,489],{"class":398},[272,2742,492],{"class":286},[272,2744,306],{"class":282},[272,2746,2747],{"class":274,"line":373},[272,2748,370],{"emptyLinePlaceholder":369},[272,2750,2751],{"class":274,"line":380},[272,2752,2753],{"class":376},"// But executing without WHERE will throw an error\n",[272,2755,2756,2759],{"class":274,"line":405},[272,2757,2758],{"class":376},"// await db.update(users).set({ name: 'Bob' }).execute();",[272,2760,2761],{"class":376}," // ❌ Error!\n",[615,2763,2765],{"id":2764},"can-be-called-anytime","Can Be Called Anytime",[243,2767,2768,2769,2771],{},"You can call ",[247,2770,249],{}," at any point during query building:",[263,2773,2775],{"className":265,"code":2774,"language":267,"meta":268,"style":268},"const query = db.select(users);\nconsole.log('1:', query.toSQL());\n\nquery.where(eq(users._.columns.id, 1));\nconsole.log('2:', query.toSQL());\n\nquery.orderBy(users._.columns.createdAt, 'DESC');\nconsole.log('3:', query.toSQL());\n",[247,2776,2777,2795,2825,2829,2863,2892,2896,2930],{"__ignoreMap":268},[272,2778,2779,2781,2783,2785,2787,2789,2791,2793],{"class":274,"line":275},[272,2780,384],{"class":383},[272,2782,387],{"class":286},[272,2784,390],{"class":282},[272,2786,287],{"class":286},[272,2788,395],{"class":282},[272,2790,399],{"class":398},[272,2792,1580],{"class":286},[272,2794,306],{"class":282},[272,2796,2797,2799,2801,2803,2805,2807,2810,2812,2814,2816,2818,2820,2823],{"class":274,"line":309},[272,2798,505],{"class":286},[272,2800,395],{"class":282},[272,2802,510],{"class":398},[272,2804,414],{"class":286},[272,2806,303],{"class":282},[272,2808,2809],{"class":299},"1:",[272,2811,303],{"class":282},[272,2813,342],{"class":282},[272,2815,484],{"class":286},[272,2817,395],{"class":282},[272,2819,489],{"class":398},[272,2821,2822],{"class":286},"())",[272,2824,306],{"class":282},[272,2826,2827],{"class":274,"line":332},[272,2828,370],{"emptyLinePlaceholder":369},[272,2830,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861],{"class":274,"line":366},[272,2832,1265],{"class":286},[272,2834,395],{"class":282},[272,2836,411],{"class":398},[272,2838,414],{"class":286},[272,2840,417],{"class":398},[272,2842,420],{"class":286},[272,2844,395],{"class":282},[272,2846,425],{"class":286},[272,2848,395],{"class":282},[272,2850,430],{"class":286},[272,2852,395],{"class":282},[272,2854,1042],{"class":286},[272,2856,342],{"class":282},[272,2858,1047],{"class":711},[272,2860,447],{"class":286},[272,2862,306],{"class":282},[272,2864,2865,2867,2869,2871,2873,2875,2878,2880,2882,2884,2886,2888,2890],{"class":274,"line":373},[272,2866,505],{"class":286},[272,2868,395],{"class":282},[272,2870,510],{"class":398},[272,2872,414],{"class":286},[272,2874,303],{"class":282},[272,2876,2877],{"class":299},"2:",[272,2879,303],{"class":282},[272,2881,342],{"class":282},[272,2883,484],{"class":286},[272,2885,395],{"class":282},[272,2887,489],{"class":398},[272,2889,2822],{"class":286},[272,2891,306],{"class":282},[272,2893,2894],{"class":274,"line":380},[272,2895,370],{"emptyLinePlaceholder":369},[272,2897,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928],{"class":274,"line":405},[272,2899,1265],{"class":286},[272,2901,395],{"class":282},[272,2903,727],{"class":398},[272,2905,420],{"class":286},[272,2907,395],{"class":282},[272,2909,425],{"class":286},[272,2911,395],{"class":282},[272,2913,430],{"class":286},[272,2915,395],{"class":282},[272,2917,742],{"class":286},[272,2919,342],{"class":282},[272,2921,296],{"class":282},[272,2923,749],{"class":299},[272,2925,303],{"class":282},[272,2927,683],{"class":286},[272,2929,306],{"class":282},[272,2931,2932,2934,2936,2938,2940,2942,2945,2947,2949,2951,2953,2955,2957],{"class":274,"line":452},[272,2933,505],{"class":286},[272,2935,395],{"class":282},[272,2937,510],{"class":398},[272,2939,414],{"class":286},[272,2941,303],{"class":282},[272,2943,2944],{"class":299},"3:",[272,2946,303],{"class":282},[272,2948,342],{"class":282},[272,2950,484],{"class":286},[272,2952,395],{"class":282},[272,2954,489],{"class":398},[272,2956,2822],{"class":286},[272,2958,306],{"class":282},[252,2960,2962],{"id":2961},"best-practices","Best Practices",[2964,2965,2966,2974,2980,2986,2992],"ol",{},[2967,2968,2969,2973],"li",{},[2970,2971,2972],"strong",{},"Use in development"," - Log queries to understand ORM behavior",[2967,2975,2976,2979],{},[2970,2977,2978],{},"Use in tests"," - Verify SQL generation",[2967,2981,2982,2985],{},[2970,2983,2984],{},"Remove in production"," - Or use conditional logging based on environment",[2967,2987,2988,2991],{},[2970,2989,2990],{},"Copy for EXPLAIN"," - Paste into SQL tools for performance analysis",[2967,2993,2994,2997],{},[2970,2995,2996],{},"Log before errors"," - Help debug production issues",[252,2999,3001],{"id":3000},"example-query-logger-utility","Example: Query Logger Utility",[263,3003,3005],{"className":265,"code":3004,"language":267,"meta":268,"style":268},"// src/lib/db/logger.ts\nexport function createQueryLogger(enabled: boolean = true) {\n  return {\n    async execute\u003CT>(query: any, label?: string): Promise\u003CT> {\n      if (!enabled) {\n        return await query.execute();\n      }\n      \n      const { sql, params } = query.toSQL();\n      const start = Date.now();\n      \n      console.group(label || 'Query');\n      console.log('SQL:', sql);\n      console.log('Params:', params);\n      \n      try {\n        const result = await query.execute();\n        const duration = Date.now() - start;\n        console.log(`✓ Success (${duration}ms)`);\n        console.groupEnd();\n        return result;\n      } catch (error) {\n        const duration = Date.now() - start;\n        console.error(`✗ Failed (${duration}ms)`, error);\n        console.groupEnd();\n        throw error;\n      }\n    }\n  };\n}\n\n// Usage\nconst logger = createQueryLogger(import.meta.env.DEV);\n\nconst users = await logger.execute(\n  db.select(users).where(eq(users._.columns.id, 1)),\n  'Fetch user by ID'\n);\n",[247,3006,3007,3012,3040,3046,3089,3107,3124,3128,3133,3160,3179,3183,3212,3236,3260,3264,3271,3292,3314,3345,3358,3367,3383,3406,3440,3453,3463,3468,3473,3479,3484,3489,3494,3527,3532,3552,3593,3605],{"__ignoreMap":268},[272,3008,3009],{"class":274,"line":275},[272,3010,3011],{"class":376},"// src/lib/db/logger.ts\n",[272,3013,3014,3017,3019,3022,3024,3027,3029,3032,3034,3036,3038],{"class":274,"line":309},[272,3015,3016],{"class":278},"export",[272,3018,1248],{"class":383},[272,3020,3021],{"class":398}," createQueryLogger",[272,3023,414],{"class":282},[272,3025,3026],{"class":1264},"enabled",[272,3028,863],{"class":282},[272,3030,3031],{"class":1257}," boolean",[272,3033,481],{"class":282},[272,3035,680],{"class":679},[272,3037,683],{"class":282},[272,3039,1286],{"class":282},[272,3041,3042,3044],{"class":274,"line":332},[272,3043,1535],{"class":278},[272,3045,1286],{"class":282},[272,3047,3048,3051,3054,3056,3058,3060,3062,3064,3066,3068,3071,3074,3077,3079,3081,3083,3085,3087],{"class":274,"line":366},[272,3049,3050],{"class":383},"    async",[272,3052,3053],{"class":859}," execute",[272,3055,1254],{"class":282},[272,3057,1258],{"class":1257},[272,3059,1261],{"class":282},[272,3061,1265],{"class":1264},[272,3063,863],{"class":282},[272,3065,1270],{"class":1257},[272,3067,342],{"class":282},[272,3069,3070],{"class":1264}," label",[272,3072,3073],{"class":282},"?:",[272,3075,3076],{"class":1257}," string",[272,3078,1273],{"class":282},[272,3080,1276],{"class":1257},[272,3082,1254],{"class":282},[272,3084,1258],{"class":1257},[272,3086,1283],{"class":282},[272,3088,1286],{"class":282},[272,3090,3091,3094,3097,3100,3102,3105],{"class":274,"line":373},[272,3092,3093],{"class":278},"      if",[272,3095,3096],{"class":859}," (",[272,3098,3099],{"class":282},"!",[272,3101,3026],{"class":286},[272,3103,3104],{"class":859},") ",[272,3106,2186],{"class":282},[272,3108,3109,3112,3114,3116,3118,3120,3122],{"class":274,"line":380},[272,3110,3111],{"class":278},"        return",[272,3113,598],{"class":278},[272,3115,484],{"class":286},[272,3117,395],{"class":282},[272,3119,1458],{"class":398},[272,3121,492],{"class":859},[272,3123,306],{"class":282},[272,3125,3126],{"class":274,"line":405},[272,3127,2219],{"class":282},[272,3129,3130],{"class":274,"line":452},[272,3131,3132],{"class":859},"      \n",[272,3134,3135,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158],{"class":274,"line":457},[272,3136,3137],{"class":383},"      const",[272,3139,283],{"class":282},[272,3141,470],{"class":286},[272,3143,342],{"class":282},[272,3145,1300],{"class":286},[272,3147,290],{"class":282},[272,3149,481],{"class":282},[272,3151,484],{"class":286},[272,3153,395],{"class":282},[272,3155,489],{"class":398},[272,3157,492],{"class":859},[272,3159,306],{"class":282},[272,3161,3162,3164,3167,3169,3171,3173,3175,3177],{"class":274,"line":463},[272,3163,3137],{"class":383},[272,3165,3166],{"class":286}," start",[272,3168,481],{"class":282},[272,3170,1329],{"class":286},[272,3172,395],{"class":282},[272,3174,1436],{"class":398},[272,3176,492],{"class":859},[272,3178,306],{"class":282},[272,3180,3181],{"class":274,"line":497},[272,3182,3132],{"class":859},[272,3184,3185,3188,3190,3193,3195,3198,3201,3203,3206,3208,3210],{"class":274,"line":502},[272,3186,3187],{"class":286},"      console",[272,3189,395],{"class":282},[272,3191,3192],{"class":398},"group",[272,3194,414],{"class":859},[272,3196,3197],{"class":286},"label",[272,3199,3200],{"class":282}," ||",[272,3202,296],{"class":282},[272,3204,3205],{"class":299},"Query",[272,3207,303],{"class":282},[272,3209,683],{"class":859},[272,3211,306],{"class":282},[272,3213,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234],{"class":274,"line":529},[272,3215,3187],{"class":286},[272,3217,395],{"class":282},[272,3219,510],{"class":398},[272,3221,414],{"class":859},[272,3223,303],{"class":282},[272,3225,517],{"class":299},[272,3227,303],{"class":282},[272,3229,342],{"class":282},[272,3231,470],{"class":286},[272,3233,683],{"class":859},[272,3235,306],{"class":282},[272,3237,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258],{"class":274,"line":535},[272,3239,3187],{"class":286},[272,3241,395],{"class":282},[272,3243,510],{"class":398},[272,3245,414],{"class":859},[272,3247,303],{"class":282},[272,3249,559],{"class":299},[272,3251,303],{"class":282},[272,3253,342],{"class":282},[272,3255,1300],{"class":286},[272,3257,683],{"class":859},[272,3259,306],{"class":282},[272,3261,3262],{"class":274,"line":541},[272,3263,3132],{"class":859},[272,3265,3266,3269],{"class":274,"line":546},[272,3267,3268],{"class":278},"      try",[272,3270,1286],{"class":282},[272,3272,3273,3276,3278,3280,3282,3284,3286,3288,3290],{"class":274,"line":571},[272,3274,3275],{"class":383},"        const",[272,3277,1447],{"class":286},[272,3279,481],{"class":282},[272,3281,598],{"class":278},[272,3283,484],{"class":286},[272,3285,395],{"class":282},[272,3287,1458],{"class":398},[272,3289,492],{"class":859},[272,3291,306],{"class":282},[272,3293,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312],{"class":274,"line":577},[272,3295,3275],{"class":383},[272,3297,1469],{"class":286},[272,3299,481],{"class":282},[272,3301,1329],{"class":286},[272,3303,395],{"class":282},[272,3305,1436],{"class":398},[272,3307,1480],{"class":859},[272,3309,1483],{"class":282},[272,3311,3166],{"class":286},[272,3313,306],{"class":282},[272,3315,3316,3319,3321,3323,3325,3327,3330,3332,3334,3336,3339,3341,3343],{"class":274,"line":582},[272,3317,3318],{"class":286},"        console",[272,3320,395],{"class":282},[272,3322,510],{"class":398},[272,3324,414],{"class":859},[272,3326,1359],{"class":282},[272,3328,3329],{"class":299},"✓ Success (",[272,3331,1365],{"class":282},[272,3333,1519],{"class":286},[272,3335,478],{"class":282},[272,3337,3338],{"class":299},"ms)",[272,3340,1359],{"class":282},[272,3342,683],{"class":859},[272,3344,306],{"class":282},[272,3346,3347,3349,3351,3354,3356],{"class":274,"line":588},[272,3348,3318],{"class":286},[272,3350,395],{"class":282},[272,3352,3353],{"class":398},"groupEnd",[272,3355,492],{"class":859},[272,3357,306],{"class":282},[272,3359,3361,3363,3365],{"class":274,"line":3360},21,[272,3362,3111],{"class":278},[272,3364,1447],{"class":286},[272,3366,306],{"class":282},[272,3368,3370,3373,3375,3377,3379,3381],{"class":274,"line":3369},22,[272,3371,3372],{"class":282},"      }",[272,3374,2426],{"class":278},[272,3376,3096],{"class":859},[272,3378,2534],{"class":286},[272,3380,3104],{"class":859},[272,3382,2186],{"class":282},[272,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404],{"class":274,"line":3385},23,[272,3387,3275],{"class":383},[272,3389,1469],{"class":286},[272,3391,481],{"class":282},[272,3393,1329],{"class":286},[272,3395,395],{"class":282},[272,3397,1436],{"class":398},[272,3399,1480],{"class":859},[272,3401,1483],{"class":282},[272,3403,3166],{"class":286},[272,3405,306],{"class":282},[272,3407,3409,3411,3413,3415,3417,3419,3422,3424,3426,3428,3430,3432,3434,3436,3438],{"class":274,"line":3408},24,[272,3410,3318],{"class":286},[272,3412,395],{"class":282},[272,3414,2534],{"class":398},[272,3416,414],{"class":859},[272,3418,1359],{"class":282},[272,3420,3421],{"class":299},"✗ Failed (",[272,3423,1365],{"class":282},[272,3425,1519],{"class":286},[272,3427,478],{"class":282},[272,3429,3338],{"class":299},[272,3431,1359],{"class":282},[272,3433,342],{"class":282},[272,3435,2558],{"class":286},[272,3437,683],{"class":859},[272,3439,306],{"class":282},[272,3441,3443,3445,3447,3449,3451],{"class":274,"line":3442},25,[272,3444,3318],{"class":286},[272,3446,395],{"class":282},[272,3448,3353],{"class":398},[272,3450,492],{"class":859},[272,3452,306],{"class":282},[272,3454,3456,3459,3461],{"class":274,"line":3455},26,[272,3457,3458],{"class":278},"        throw",[272,3460,2558],{"class":286},[272,3462,306],{"class":282},[272,3464,3466],{"class":274,"line":3465},27,[272,3467,2219],{"class":282},[272,3469,3471],{"class":274,"line":3470},28,[272,3472,2224],{"class":282},[272,3474,3476],{"class":274,"line":3475},29,[272,3477,3478],{"class":282},"  };\n",[272,3480,3482],{"class":274,"line":3481},30,[272,3483,1544],{"class":282},[272,3485,3487],{"class":274,"line":3486},31,[272,3488,370],{"emptyLinePlaceholder":369},[272,3490,3492],{"class":274,"line":3491},32,[272,3493,1553],{"class":376},[272,3495,3497,3499,3502,3504,3506,3508,3510,3512,3515,3517,3520,3522,3525],{"class":274,"line":3496},33,[272,3498,384],{"class":383},[272,3500,3501],{"class":286}," logger ",[272,3503,390],{"class":282},[272,3505,3021],{"class":398},[272,3507,414],{"class":286},[272,3509,279],{"class":278},[272,3511,395],{"class":282},[272,3513,3514],{"class":286},"meta",[272,3516,395],{"class":282},[272,3518,3519],{"class":286},"env",[272,3521,395],{"class":282},[272,3523,3524],{"class":286},"DEV)",[272,3526,306],{"class":282},[272,3528,3530],{"class":274,"line":3529},34,[272,3531,370],{"emptyLinePlaceholder":369},[272,3533,3535,3537,3539,3541,3543,3546,3548,3550],{"class":274,"line":3534},35,[272,3536,384],{"class":383},[272,3538,1560],{"class":286},[272,3540,390],{"class":282},[272,3542,598],{"class":278},[272,3544,3545],{"class":286}," logger",[272,3547,395],{"class":282},[272,3549,1458],{"class":398},[272,3551,654],{"class":286},[272,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591],{"class":274,"line":3554},36,[272,3556,1573],{"class":286},[272,3558,395],{"class":282},[272,3560,399],{"class":398},[272,3562,1580],{"class":286},[272,3564,395],{"class":282},[272,3566,411],{"class":398},[272,3568,414],{"class":286},[272,3570,417],{"class":398},[272,3572,420],{"class":286},[272,3574,395],{"class":282},[272,3576,425],{"class":286},[272,3578,395],{"class":282},[272,3580,430],{"class":286},[272,3582,395],{"class":282},[272,3584,1042],{"class":286},[272,3586,342],{"class":282},[272,3588,1047],{"class":711},[272,3590,447],{"class":286},[272,3592,686],{"class":282},[272,3594,3596,3599,3602],{"class":274,"line":3595},37,[272,3597,3598],{"class":282},"  '",[272,3600,3601],{"class":299},"Fetch user by ID",[272,3603,3604],{"class":282},"'\n",[272,3606,3608,3610],{"class":274,"line":3607},38,[272,3609,683],{"class":286},[272,3611,306],{"class":282},[243,3613,245,3614,3616],{},[247,3615,249],{}," method is your best friend for understanding and debugging your queries!",[3618,3619,3620],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":268,"searchDepth":309,"depth":309,"links":3622},[3623,3624,3630,3637,3642,3643],{"id":254,"depth":309,"text":255},{"id":612,"depth":309,"text":613,"children":3625},[3626,3627,3628,3629],{"id":617,"depth":332,"text":618},{"id":820,"depth":332,"text":821},{"id":950,"depth":332,"text":951},{"id":1111,"depth":332,"text":1112},{"id":1227,"depth":309,"text":1228,"children":3631},[3632,3633,3634,3635,3636],{"id":1231,"depth":332,"text":1232},{"id":1618,"depth":332,"text":1619},{"id":1940,"depth":332,"text":1941},{"id":2144,"depth":332,"text":2145},{"id":2320,"depth":332,"text":2321},{"id":2576,"depth":309,"text":2577,"children":3638},[3639,3640,3641],{"id":2580,"depth":332,"text":2581},{"id":2673,"depth":332,"text":2674},{"id":2764,"depth":332,"text":2765},{"id":2961,"depth":309,"text":2962},{"id":3000,"depth":309,"text":3001},"Debug your queries using .toSQL()","md",null,{},{"title":225,"description":3644},"6jBxfQOAC_EUvy8uUrpwA0HUOIDLp8LgvnodMYT4WZU",[3651,3653],{"title":221,"path":222,"stem":223,"description":3652,"children":-1},"Schema Management in Tauri SQLite ORM.",{"title":229,"path":230,"stem":231,"description":3654,"children":-1},"Using subqueries and aggregate functions",1773317304395]