[{"data":1,"prerenderedAt":3194},["ShallowReactive",2],{"navigation_docs_en":3,"-en-tauri-sqlite-orm-advanced-topics-error-handling-and-safety":237,"-en-tauri-sqlite-orm-advanced-topics-error-handling-and-safety-surround":3189},[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":197,"body":239,"description":3183,"extension":3184,"links":3185,"meta":3186,"navigation":749,"path":198,"seo":3187,"stem":199,"__hash__":3188},"docs_en/en/4.tauri-sqlite-orm/6.advanced-topics/10.error-handling-and-safety.md",{"type":240,"value":241,"toc":3157},"minimark",[242,246,251,254,259,417,421,674,678,685,689,692,778,782,785,993,997,1005,1009,1015,1119,1123,1127,1228,1232,1366,1370,1523,1527,1531,1621,1625,1947,1951,2171,2175,2297,2301,2435,2439,2442,3108,3112,3115,3150,3153],[243,244,245],"p",{},"The ORM includes several safety features to prevent common database mistakes and provides custom error classes for better error handling.",[247,248,250],"h2",{"id":249},"custom-error-classes","Custom Error Classes",[243,252,253],{},"The ORM provides specific error classes to help you handle different types of errors appropriately.",[255,256,258],"h3",{"id":257},"error-hierarchy","Error Hierarchy",[260,261,266],"pre",{"className":262,"code":263,"language":264,"meta":265,"style":265},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  TauriORMError,              // Base error class\n  QueryBuilderError,          // Query building errors\n  MissingWhereClauseError,    // Missing WHERE in UPDATE/DELETE\n  ValidationError,            // General validation errors\n  InsertValidationError,      // Insert-specific validation\n  UpdateValidationError,      // Update-specific validation\n  MigrationError,             // Migration errors\n  RelationError,              // Relation errors\n  ColumnNotFoundError,        // Column doesn't exist\n  TableNotFoundError,         // Table doesn't exist\n} from '@type32/tauri-sqlite-orm';\n","typescript","",[267,268,269,282,296,307,318,329,340,351,362,373,384,395],"code",{"__ignoreMap":265},[270,271,274,278],"span",{"class":272,"line":273},"line",1,[270,275,277],{"class":276},"s7zQu","import",[270,279,281],{"class":280},"sMK4o"," {\n",[270,283,285,289,292],{"class":272,"line":284},2,[270,286,288],{"class":287},"sTEyZ","  TauriORMError",[270,290,291],{"class":280},",",[270,293,295],{"class":294},"sHwdD","              // Base error class\n",[270,297,299,302,304],{"class":272,"line":298},3,[270,300,301],{"class":287},"  QueryBuilderError",[270,303,291],{"class":280},[270,305,306],{"class":294},"          // Query building errors\n",[270,308,310,313,315],{"class":272,"line":309},4,[270,311,312],{"class":287},"  MissingWhereClauseError",[270,314,291],{"class":280},[270,316,317],{"class":294},"    // Missing WHERE in UPDATE/DELETE\n",[270,319,321,324,326],{"class":272,"line":320},5,[270,322,323],{"class":287},"  ValidationError",[270,325,291],{"class":280},[270,327,328],{"class":294},"            // General validation errors\n",[270,330,332,335,337],{"class":272,"line":331},6,[270,333,334],{"class":287},"  InsertValidationError",[270,336,291],{"class":280},[270,338,339],{"class":294},"      // Insert-specific validation\n",[270,341,343,346,348],{"class":272,"line":342},7,[270,344,345],{"class":287},"  UpdateValidationError",[270,347,291],{"class":280},[270,349,350],{"class":294},"      // Update-specific validation\n",[270,352,354,357,359],{"class":272,"line":353},8,[270,355,356],{"class":287},"  MigrationError",[270,358,291],{"class":280},[270,360,361],{"class":294},"             // Migration errors\n",[270,363,365,368,370],{"class":272,"line":364},9,[270,366,367],{"class":287},"  RelationError",[270,369,291],{"class":280},[270,371,372],{"class":294},"              // Relation errors\n",[270,374,376,379,381],{"class":272,"line":375},10,[270,377,378],{"class":287},"  ColumnNotFoundError",[270,380,291],{"class":280},[270,382,383],{"class":294},"        // Column doesn't exist\n",[270,385,387,390,392],{"class":272,"line":386},11,[270,388,389],{"class":287},"  TableNotFoundError",[270,391,291],{"class":280},[270,393,394],{"class":294},"         // Table doesn't exist\n",[270,396,398,401,404,407,411,414],{"class":272,"line":397},12,[270,399,400],{"class":280},"}",[270,402,403],{"class":276}," from",[270,405,406],{"class":280}," '",[270,408,410],{"class":409},"sfazB","@type32/tauri-sqlite-orm",[270,412,413],{"class":280},"'",[270,415,416],{"class":280},";\n",[255,418,420],{"id":419},"catching-specific-errors","Catching Specific Errors",[260,422,426],{"className":423,"code":424,"language":425,"meta":265,"style":265},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","try {\n  await db.update(users)\n    .set({ name: 'Bob' })\n    .execute(); // Missing WHERE clause\n} catch (error) {\n  if (error instanceof MissingWhereClauseError) {\n    console.error('You forgot to add a WHERE clause!');\n    console.error(error.message);\n    // Handle this specific error type\n  } else if (error instanceof UpdateValidationError) {\n    console.error('Update validation failed');\n  } else {\n    // Re-throw unknown errors\n    throw error;\n  }\n}\n","ts",[267,427,428,435,460,491,507,520,543,566,587,592,616,637,645,651,662,668],{"__ignoreMap":265},[270,429,430,433],{"class":272,"line":273},[270,431,432],{"class":276},"try",[270,434,281],{"class":280},[270,436,437,440,443,446,450,454,457],{"class":272,"line":284},[270,438,439],{"class":276},"  await",[270,441,442],{"class":287}," db",[270,444,445],{"class":280},".",[270,447,449],{"class":448},"s2Zo4","update",[270,451,453],{"class":452},"swJcz","(",[270,455,456],{"class":287},"users",[270,458,459],{"class":452},")\n",[270,461,462,465,468,470,473,476,479,481,484,486,489],{"class":272,"line":298},[270,463,464],{"class":280},"    .",[270,466,467],{"class":448},"set",[270,469,453],{"class":452},[270,471,472],{"class":280},"{",[270,474,475],{"class":452}," name",[270,477,478],{"class":280},":",[270,480,406],{"class":280},[270,482,483],{"class":409},"Bob",[270,485,413],{"class":280},[270,487,488],{"class":280}," }",[270,490,459],{"class":452},[270,492,493,495,498,501,504],{"class":272,"line":309},[270,494,464],{"class":280},[270,496,497],{"class":448},"execute",[270,499,500],{"class":452},"()",[270,502,503],{"class":280},";",[270,505,506],{"class":294}," // Missing WHERE clause\n",[270,508,509,511,514,517],{"class":272,"line":320},[270,510,400],{"class":280},[270,512,513],{"class":276}," catch",[270,515,516],{"class":287}," (error) ",[270,518,519],{"class":280},"{\n",[270,521,522,525,528,531,534,538,541],{"class":272,"line":331},[270,523,524],{"class":276},"  if",[270,526,527],{"class":452}," (",[270,529,530],{"class":287},"error",[270,532,533],{"class":280}," instanceof",[270,535,537],{"class":536},"sBMFI"," MissingWhereClauseError",[270,539,540],{"class":452},") ",[270,542,519],{"class":280},[270,544,545,548,550,552,554,556,559,561,564],{"class":272,"line":342},[270,546,547],{"class":287},"    console",[270,549,445],{"class":280},[270,551,530],{"class":448},[270,553,453],{"class":452},[270,555,413],{"class":280},[270,557,558],{"class":409},"You forgot to add a WHERE clause!",[270,560,413],{"class":280},[270,562,563],{"class":452},")",[270,565,416],{"class":280},[270,567,568,570,572,574,576,578,580,583,585],{"class":272,"line":353},[270,569,547],{"class":287},[270,571,445],{"class":280},[270,573,530],{"class":448},[270,575,453],{"class":452},[270,577,530],{"class":287},[270,579,445],{"class":280},[270,581,582],{"class":287},"message",[270,584,563],{"class":452},[270,586,416],{"class":280},[270,588,589],{"class":272,"line":364},[270,590,591],{"class":294},"    // Handle this specific error type\n",[270,593,594,597,600,603,605,607,609,612,614],{"class":272,"line":375},[270,595,596],{"class":280},"  }",[270,598,599],{"class":276}," else",[270,601,602],{"class":276}," if",[270,604,527],{"class":452},[270,606,530],{"class":287},[270,608,533],{"class":280},[270,610,611],{"class":536}," UpdateValidationError",[270,613,540],{"class":452},[270,615,519],{"class":280},[270,617,618,620,622,624,626,628,631,633,635],{"class":272,"line":386},[270,619,547],{"class":287},[270,621,445],{"class":280},[270,623,530],{"class":448},[270,625,453],{"class":452},[270,627,413],{"class":280},[270,629,630],{"class":409},"Update validation failed",[270,632,413],{"class":280},[270,634,563],{"class":452},[270,636,416],{"class":280},[270,638,639,641,643],{"class":272,"line":397},[270,640,596],{"class":280},[270,642,599],{"class":276},[270,644,281],{"class":280},[270,646,648],{"class":272,"line":647},13,[270,649,650],{"class":294},"    // Re-throw unknown errors\n",[270,652,654,657,660],{"class":272,"line":653},14,[270,655,656],{"class":276},"    throw",[270,658,659],{"class":287}," error",[270,661,416],{"class":280},[270,663,665],{"class":272,"line":664},15,[270,666,667],{"class":280},"  }\n",[270,669,671],{"class":272,"line":670},16,[270,672,673],{"class":280},"}\n",[247,675,677],{"id":676},"where-clause-validation","WHERE Clause Validation",[243,679,680,684],{},[681,682,683],"strong",{},"Critical Safety Feature",": UPDATE and DELETE operations require a WHERE clause by default to prevent accidental data loss.",[255,686,688],{"id":687},"the-problem","The Problem",[243,690,691],{},"Without validation, it's easy to accidentally update or delete all rows:",[260,693,695],{"className":423,"code":694,"language":425,"meta":265,"style":265},"// ❌ DANGEROUS: Would update ALL users if not prevented!\nawait db.update(users).set({ isActive: false }).execute();\n\n// ❌ DANGEROUS: Would delete ALL posts if not prevented!\nawait db.delete(posts).execute();\n",[267,696,697,702,745,751,756],{"__ignoreMap":265},[270,698,699],{"class":272,"line":273},[270,700,701],{"class":294},"// ❌ DANGEROUS: Would update ALL users if not prevented!\n",[270,703,704,707,709,711,713,716,718,720,722,724,727,729,733,735,737,739,741,743],{"class":272,"line":284},[270,705,706],{"class":276},"await",[270,708,442],{"class":287},[270,710,445],{"class":280},[270,712,449],{"class":448},[270,714,715],{"class":287},"(users)",[270,717,445],{"class":280},[270,719,467],{"class":448},[270,721,453],{"class":287},[270,723,472],{"class":280},[270,725,726],{"class":452}," isActive",[270,728,478],{"class":280},[270,730,732],{"class":731},"sfNiH"," false",[270,734,488],{"class":280},[270,736,563],{"class":287},[270,738,445],{"class":280},[270,740,497],{"class":448},[270,742,500],{"class":287},[270,744,416],{"class":280},[270,746,747],{"class":272,"line":298},[270,748,750],{"emptyLinePlaceholder":749},true,"\n",[270,752,753],{"class":272,"line":309},[270,754,755],{"class":294},"// ❌ DANGEROUS: Would delete ALL posts if not prevented!\n",[270,757,758,760,762,764,767,770,772,774,776],{"class":272,"line":320},[270,759,706],{"class":276},[270,761,442],{"class":287},[270,763,445],{"class":280},[270,765,766],{"class":448},"delete",[270,768,769],{"class":287},"(posts)",[270,771,445],{"class":280},[270,773,497],{"class":448},[270,775,500],{"class":287},[270,777,416],{"class":280},[255,779,781],{"id":780},"the-solution","The Solution",[243,783,784],{},"The ORM requires WHERE clauses for UPDATE and DELETE:",[260,786,788],{"className":423,"code":787,"language":425,"meta":265,"style":265},"// ❌ Throws MissingWhereClauseError\nawait db.update(users)\n  .set({ isActive: false })\n  .execute();\n\n// ✅ Works - has WHERE clause\nawait db.update(users)\n  .set({ isActive: false })\n  .where(eq(users._.columns.id, 123))\n  .execute();\n\n// ✅ Works - explicit global operation\nawait db.update(users)\n  .set({ isActive: false })\n  .allowGlobalOperation()  // ← Explicitly allows no WHERE clause\n  .execute();\n",[267,789,790,795,808,829,839,843,848,860,880,919,929,933,938,950,970,983],{"__ignoreMap":265},[270,791,792],{"class":272,"line":273},[270,793,794],{"class":294},"// ❌ Throws MissingWhereClauseError\n",[270,796,797,799,801,803,805],{"class":272,"line":284},[270,798,706],{"class":276},[270,800,442],{"class":287},[270,802,445],{"class":280},[270,804,449],{"class":448},[270,806,807],{"class":287},"(users)\n",[270,809,810,813,815,817,819,821,823,825,827],{"class":272,"line":298},[270,811,812],{"class":280},"  .",[270,814,467],{"class":448},[270,816,453],{"class":287},[270,818,472],{"class":280},[270,820,726],{"class":452},[270,822,478],{"class":280},[270,824,732],{"class":731},[270,826,488],{"class":280},[270,828,459],{"class":287},[270,830,831,833,835,837],{"class":272,"line":309},[270,832,812],{"class":280},[270,834,497],{"class":448},[270,836,500],{"class":287},[270,838,416],{"class":280},[270,840,841],{"class":272,"line":320},[270,842,750],{"emptyLinePlaceholder":749},[270,844,845],{"class":272,"line":331},[270,846,847],{"class":294},"// ✅ Works - has WHERE clause\n",[270,849,850,852,854,856,858],{"class":272,"line":342},[270,851,706],{"class":276},[270,853,442],{"class":287},[270,855,445],{"class":280},[270,857,449],{"class":448},[270,859,807],{"class":287},[270,861,862,864,866,868,870,872,874,876,878],{"class":272,"line":353},[270,863,812],{"class":280},[270,865,467],{"class":448},[270,867,453],{"class":287},[270,869,472],{"class":280},[270,871,726],{"class":452},[270,873,478],{"class":280},[270,875,732],{"class":731},[270,877,488],{"class":280},[270,879,459],{"class":287},[270,881,882,884,887,889,892,895,897,900,902,905,907,910,912,916],{"class":272,"line":364},[270,883,812],{"class":280},[270,885,886],{"class":448},"where",[270,888,453],{"class":287},[270,890,891],{"class":448},"eq",[270,893,894],{"class":287},"(users",[270,896,445],{"class":280},[270,898,899],{"class":287},"_",[270,901,445],{"class":280},[270,903,904],{"class":287},"columns",[270,906,445],{"class":280},[270,908,909],{"class":287},"id",[270,911,291],{"class":280},[270,913,915],{"class":914},"sbssI"," 123",[270,917,918],{"class":287},"))\n",[270,920,921,923,925,927],{"class":272,"line":375},[270,922,812],{"class":280},[270,924,497],{"class":448},[270,926,500],{"class":287},[270,928,416],{"class":280},[270,930,931],{"class":272,"line":386},[270,932,750],{"emptyLinePlaceholder":749},[270,934,935],{"class":272,"line":397},[270,936,937],{"class":294},"// ✅ Works - explicit global operation\n",[270,939,940,942,944,946,948],{"class":272,"line":647},[270,941,706],{"class":276},[270,943,442],{"class":287},[270,945,445],{"class":280},[270,947,449],{"class":448},[270,949,807],{"class":287},[270,951,952,954,956,958,960,962,964,966,968],{"class":272,"line":653},[270,953,812],{"class":280},[270,955,467],{"class":448},[270,957,453],{"class":287},[270,959,472],{"class":280},[270,961,726],{"class":452},[270,963,478],{"class":280},[270,965,732],{"class":731},[270,967,488],{"class":280},[270,969,459],{"class":287},[270,971,972,974,977,980],{"class":272,"line":664},[270,973,812],{"class":280},[270,975,976],{"class":448},"allowGlobalOperation",[270,978,979],{"class":287},"()  ",[270,981,982],{"class":294},"// ← Explicitly allows no WHERE clause\n",[270,984,985,987,989,991],{"class":272,"line":670},[270,986,812],{"class":280},[270,988,497],{"class":448},[270,990,500],{"class":287},[270,992,416],{"class":280},[255,994,996],{"id":995},"error-message","Error Message",[260,998,1003],{"className":999,"code":1001,"language":1002},[1000],"language-text","MissingWhereClauseError: UPDATE operation on table \"users\" requires a WHERE clause to prevent accidental data loss. Use .where() to specify conditions, or use .allowGlobalOperation() to explicitly allow operations without WHERE.\n","text",[267,1004,1001],{"__ignoreMap":265},[255,1006,1008],{"id":1007},"intentional-global-operations","Intentional Global Operations",[243,1010,1011,1012,478],{},"When you genuinely need to update/delete all rows, use ",[267,1013,1014],{},".allowGlobalOperation()",[260,1016,1018],{"className":423,"code":1017,"language":425,"meta":265,"style":265},"// Reset all daily counts - documented and intentional\nawait db.update(userStats)\n  .set({ dailyCount: 0 })\n  .allowGlobalOperation()\n  .execute();\n\n// Clear temporary cache\nawait db.delete(tempCache)\n  .allowGlobalOperation()\n  .execute();\n",[267,1019,1020,1025,1038,1060,1069,1079,1083,1088,1101,1109],{"__ignoreMap":265},[270,1021,1022],{"class":272,"line":273},[270,1023,1024],{"class":294},"// Reset all daily counts - documented and intentional\n",[270,1026,1027,1029,1031,1033,1035],{"class":272,"line":284},[270,1028,706],{"class":276},[270,1030,442],{"class":287},[270,1032,445],{"class":280},[270,1034,449],{"class":448},[270,1036,1037],{"class":287},"(userStats)\n",[270,1039,1040,1042,1044,1046,1048,1051,1053,1056,1058],{"class":272,"line":298},[270,1041,812],{"class":280},[270,1043,467],{"class":448},[270,1045,453],{"class":287},[270,1047,472],{"class":280},[270,1049,1050],{"class":452}," dailyCount",[270,1052,478],{"class":280},[270,1054,1055],{"class":914}," 0",[270,1057,488],{"class":280},[270,1059,459],{"class":287},[270,1061,1062,1064,1066],{"class":272,"line":309},[270,1063,812],{"class":280},[270,1065,976],{"class":448},[270,1067,1068],{"class":287},"()\n",[270,1070,1071,1073,1075,1077],{"class":272,"line":320},[270,1072,812],{"class":280},[270,1074,497],{"class":448},[270,1076,500],{"class":287},[270,1078,416],{"class":280},[270,1080,1081],{"class":272,"line":331},[270,1082,750],{"emptyLinePlaceholder":749},[270,1084,1085],{"class":272,"line":342},[270,1086,1087],{"class":294},"// Clear temporary cache\n",[270,1089,1090,1092,1094,1096,1098],{"class":272,"line":353},[270,1091,706],{"class":276},[270,1093,442],{"class":287},[270,1095,445],{"class":280},[270,1097,766],{"class":448},[270,1099,1100],{"class":287},"(tempCache)\n",[270,1102,1103,1105,1107],{"class":272,"line":364},[270,1104,812],{"class":280},[270,1106,976],{"class":448},[270,1108,1068],{"class":287},[270,1110,1111,1113,1115,1117],{"class":272,"line":375},[270,1112,812],{"class":280},[270,1114,497],{"class":448},[270,1116,500],{"class":287},[270,1118,416],{"class":280},[247,1120,1122],{"id":1121},"validation-errors","Validation Errors",[255,1124,1126],{"id":1125},"insert-validation","Insert Validation",[260,1128,1130],{"className":423,"code":1129,"language":425,"meta":265,"style":265},"try {\n  // ❌ No data provided\n  await db.insert(users).execute();\n} catch (error) {\n  if (error instanceof InsertValidationError) {\n    console.error(error.message);\n    // \"No data provided for insert. Use .values() to provide data.\"\n  }\n}\n",[267,1131,1132,1138,1143,1168,1178,1195,1215,1220,1224],{"__ignoreMap":265},[270,1133,1134,1136],{"class":272,"line":273},[270,1135,432],{"class":276},[270,1137,281],{"class":280},[270,1139,1140],{"class":272,"line":284},[270,1141,1142],{"class":294},"  // ❌ No data provided\n",[270,1144,1145,1147,1149,1151,1154,1156,1158,1160,1162,1164,1166],{"class":272,"line":298},[270,1146,439],{"class":276},[270,1148,442],{"class":287},[270,1150,445],{"class":280},[270,1152,1153],{"class":448},"insert",[270,1155,453],{"class":452},[270,1157,456],{"class":287},[270,1159,563],{"class":452},[270,1161,445],{"class":280},[270,1163,497],{"class":448},[270,1165,500],{"class":452},[270,1167,416],{"class":280},[270,1169,1170,1172,1174,1176],{"class":272,"line":309},[270,1171,400],{"class":280},[270,1173,513],{"class":276},[270,1175,516],{"class":287},[270,1177,519],{"class":280},[270,1179,1180,1182,1184,1186,1188,1191,1193],{"class":272,"line":320},[270,1181,524],{"class":276},[270,1183,527],{"class":452},[270,1185,530],{"class":287},[270,1187,533],{"class":280},[270,1189,1190],{"class":536}," InsertValidationError",[270,1192,540],{"class":452},[270,1194,519],{"class":280},[270,1196,1197,1199,1201,1203,1205,1207,1209,1211,1213],{"class":272,"line":331},[270,1198,547],{"class":287},[270,1200,445],{"class":280},[270,1202,530],{"class":448},[270,1204,453],{"class":452},[270,1206,530],{"class":287},[270,1208,445],{"class":280},[270,1210,582],{"class":287},[270,1212,563],{"class":452},[270,1214,416],{"class":280},[270,1216,1217],{"class":272,"line":342},[270,1218,1219],{"class":294},"    // \"No data provided for insert. Use .values() to provide data.\"\n",[270,1221,1222],{"class":272,"line":353},[270,1223,667],{"class":280},[270,1225,1226],{"class":272,"line":364},[270,1227,673],{"class":280},[255,1229,1231],{"id":1230},"update-validation","Update Validation",[260,1233,1235],{"className":423,"code":1234,"language":425,"meta":265,"style":265},"try {\n  // ❌ No SET clause\n  await db.update(users)\n    .where(eq(users._.columns.id, 1))\n    .execute();\n} catch (error) {\n  if (error instanceof UpdateValidationError) {\n    console.error(error.message);\n    // \"Cannot execute an update query without a .set(), .increment(), or .decrement() call.\"\n  }\n}\n",[267,1236,1237,1243,1248,1264,1297,1307,1317,1333,1353,1358,1362],{"__ignoreMap":265},[270,1238,1239,1241],{"class":272,"line":273},[270,1240,432],{"class":276},[270,1242,281],{"class":280},[270,1244,1245],{"class":272,"line":284},[270,1246,1247],{"class":294},"  // ❌ No SET clause\n",[270,1249,1250,1252,1254,1256,1258,1260,1262],{"class":272,"line":298},[270,1251,439],{"class":276},[270,1253,442],{"class":287},[270,1255,445],{"class":280},[270,1257,449],{"class":448},[270,1259,453],{"class":452},[270,1261,456],{"class":287},[270,1263,459],{"class":452},[270,1265,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1295],{"class":272,"line":309},[270,1267,464],{"class":280},[270,1269,886],{"class":448},[270,1271,453],{"class":452},[270,1273,891],{"class":448},[270,1275,453],{"class":452},[270,1277,456],{"class":287},[270,1279,445],{"class":280},[270,1281,899],{"class":287},[270,1283,445],{"class":280},[270,1285,904],{"class":287},[270,1287,445],{"class":280},[270,1289,909],{"class":287},[270,1291,291],{"class":280},[270,1293,1294],{"class":914}," 1",[270,1296,918],{"class":452},[270,1298,1299,1301,1303,1305],{"class":272,"line":320},[270,1300,464],{"class":280},[270,1302,497],{"class":448},[270,1304,500],{"class":452},[270,1306,416],{"class":280},[270,1308,1309,1311,1313,1315],{"class":272,"line":331},[270,1310,400],{"class":280},[270,1312,513],{"class":276},[270,1314,516],{"class":287},[270,1316,519],{"class":280},[270,1318,1319,1321,1323,1325,1327,1329,1331],{"class":272,"line":342},[270,1320,524],{"class":276},[270,1322,527],{"class":452},[270,1324,530],{"class":287},[270,1326,533],{"class":280},[270,1328,611],{"class":536},[270,1330,540],{"class":452},[270,1332,519],{"class":280},[270,1334,1335,1337,1339,1341,1343,1345,1347,1349,1351],{"class":272,"line":353},[270,1336,547],{"class":287},[270,1338,445],{"class":280},[270,1340,530],{"class":448},[270,1342,453],{"class":452},[270,1344,530],{"class":287},[270,1346,445],{"class":280},[270,1348,582],{"class":287},[270,1350,563],{"class":452},[270,1352,416],{"class":280},[270,1354,1355],{"class":272,"line":364},[270,1356,1357],{"class":294},"    // \"Cannot execute an update query without a .set(), .increment(), or .decrement() call.\"\n",[270,1359,1360],{"class":272,"line":375},[270,1361,667],{"class":280},[270,1363,1364],{"class":272,"line":386},[270,1365,673],{"class":280},[255,1367,1369],{"id":1368},"column-not-found","Column Not Found",[260,1371,1373],{"className":423,"code":1372,"language":425,"meta":265,"style":265},"try {\n  await db.update(users)\n    .increment('nonExistentColumn' as any)\n    .where(eq(users._.columns.id, 1))\n    .execute();\n} catch (error) {\n  if (error instanceof ColumnNotFoundError) {\n    console.error(error.message);\n    // \"Column \\\"nonExistentColumn\\\" does not exist on table \\\"users\\\"\"\n  }\n}\n",[267,1374,1375,1381,1397,1421,1453,1463,1473,1490,1510,1515,1519],{"__ignoreMap":265},[270,1376,1377,1379],{"class":272,"line":273},[270,1378,432],{"class":276},[270,1380,281],{"class":280},[270,1382,1383,1385,1387,1389,1391,1393,1395],{"class":272,"line":284},[270,1384,439],{"class":276},[270,1386,442],{"class":287},[270,1388,445],{"class":280},[270,1390,449],{"class":448},[270,1392,453],{"class":452},[270,1394,456],{"class":287},[270,1396,459],{"class":452},[270,1398,1399,1401,1404,1406,1408,1411,1413,1416,1419],{"class":272,"line":298},[270,1400,464],{"class":280},[270,1402,1403],{"class":448},"increment",[270,1405,453],{"class":452},[270,1407,413],{"class":280},[270,1409,1410],{"class":409},"nonExistentColumn",[270,1412,413],{"class":280},[270,1414,1415],{"class":276}," as",[270,1417,1418],{"class":536}," any",[270,1420,459],{"class":452},[270,1422,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451],{"class":272,"line":309},[270,1424,464],{"class":280},[270,1426,886],{"class":448},[270,1428,453],{"class":452},[270,1430,891],{"class":448},[270,1432,453],{"class":452},[270,1434,456],{"class":287},[270,1436,445],{"class":280},[270,1438,899],{"class":287},[270,1440,445],{"class":280},[270,1442,904],{"class":287},[270,1444,445],{"class":280},[270,1446,909],{"class":287},[270,1448,291],{"class":280},[270,1450,1294],{"class":914},[270,1452,918],{"class":452},[270,1454,1455,1457,1459,1461],{"class":272,"line":320},[270,1456,464],{"class":280},[270,1458,497],{"class":448},[270,1460,500],{"class":452},[270,1462,416],{"class":280},[270,1464,1465,1467,1469,1471],{"class":272,"line":331},[270,1466,400],{"class":280},[270,1468,513],{"class":276},[270,1470,516],{"class":287},[270,1472,519],{"class":280},[270,1474,1475,1477,1479,1481,1483,1486,1488],{"class":272,"line":342},[270,1476,524],{"class":276},[270,1478,527],{"class":452},[270,1480,530],{"class":287},[270,1482,533],{"class":280},[270,1484,1485],{"class":536}," ColumnNotFoundError",[270,1487,540],{"class":452},[270,1489,519],{"class":280},[270,1491,1492,1494,1496,1498,1500,1502,1504,1506,1508],{"class":272,"line":353},[270,1493,547],{"class":287},[270,1495,445],{"class":280},[270,1497,530],{"class":448},[270,1499,453],{"class":452},[270,1501,530],{"class":287},[270,1503,445],{"class":280},[270,1505,582],{"class":287},[270,1507,563],{"class":452},[270,1509,416],{"class":280},[270,1511,1512],{"class":272,"line":364},[270,1513,1514],{"class":294},"    // \"Column \\\"nonExistentColumn\\\" does not exist on table \\\"users\\\"\"\n",[270,1516,1517],{"class":272,"line":375},[270,1518,667],{"class":280},[270,1520,1521],{"class":272,"line":386},[270,1522,673],{"class":280},[247,1524,1526],{"id":1525},"best-practices","Best Practices",[255,1528,1530],{"id":1529},"_1-always-use-where-clauses","1. Always Use WHERE Clauses",[260,1532,1534],{"className":423,"code":1533,"language":425,"meta":265,"style":265},"// ❌ BAD: Missing WHERE\nawait db.delete(users).execute();\n\n// ✅ GOOD: Has WHERE\nawait db.delete(users)\n  .where(eq(users._.columns.id, userId))\n  .execute();\n",[267,1535,1536,1541,1561,1565,1570,1582,1611],{"__ignoreMap":265},[270,1537,1538],{"class":272,"line":273},[270,1539,1540],{"class":294},"// ❌ BAD: Missing WHERE\n",[270,1542,1543,1545,1547,1549,1551,1553,1555,1557,1559],{"class":272,"line":284},[270,1544,706],{"class":276},[270,1546,442],{"class":287},[270,1548,445],{"class":280},[270,1550,766],{"class":448},[270,1552,715],{"class":287},[270,1554,445],{"class":280},[270,1556,497],{"class":448},[270,1558,500],{"class":287},[270,1560,416],{"class":280},[270,1562,1563],{"class":272,"line":298},[270,1564,750],{"emptyLinePlaceholder":749},[270,1566,1567],{"class":272,"line":309},[270,1568,1569],{"class":294},"// ✅ GOOD: Has WHERE\n",[270,1571,1572,1574,1576,1578,1580],{"class":272,"line":320},[270,1573,706],{"class":276},[270,1575,442],{"class":287},[270,1577,445],{"class":280},[270,1579,766],{"class":448},[270,1581,807],{"class":287},[270,1583,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608],{"class":272,"line":331},[270,1585,812],{"class":280},[270,1587,886],{"class":448},[270,1589,453],{"class":287},[270,1591,891],{"class":448},[270,1593,894],{"class":287},[270,1595,445],{"class":280},[270,1597,899],{"class":287},[270,1599,445],{"class":280},[270,1601,904],{"class":287},[270,1603,445],{"class":280},[270,1605,909],{"class":287},[270,1607,291],{"class":280},[270,1609,1610],{"class":287}," userId))\n",[270,1612,1613,1615,1617,1619],{"class":272,"line":342},[270,1614,812],{"class":280},[270,1616,497],{"class":448},[270,1618,500],{"class":287},[270,1620,416],{"class":280},[255,1622,1624],{"id":1623},"_2-catch-specific-errors","2. Catch Specific Errors",[260,1626,1628],{"className":423,"code":1627,"language":425,"meta":265,"style":265},"async function updateUser(userId: number, data: any) {\n  try {\n    return await db.update(users)\n      .set(data)\n      .where(eq(users._.columns.id, userId))\n      .execute();\n  } catch (error) {\n    if (error instanceof MissingWhereClauseError) {\n      // Log and handle missing WHERE\n      logger.error('Missing WHERE clause in update');\n      throw new Error('Invalid update operation');\n    } else if (error instanceof ColumnNotFoundError) {\n      // Handle invalid column\n      logger.error('Invalid column in update:', error.message);\n      throw new Error('Invalid field name');\n    } else {\n      // Re-throw database errors\n      throw error;\n    }\n  }\n}\n",[267,1629,1630,1666,1673,1693,1707,1740,1750,1764,1781,1786,1808,1832,1853,1858,1887,1908,1916,1922,1931,1937,1942],{"__ignoreMap":265},[270,1631,1632,1636,1639,1642,1644,1648,1650,1653,1655,1658,1660,1662,1664],{"class":272,"line":273},[270,1633,1635],{"class":1634},"spNyl","async",[270,1637,1638],{"class":1634}," function",[270,1640,1641],{"class":448}," updateUser",[270,1643,453],{"class":280},[270,1645,1647],{"class":1646},"sHdIc","userId",[270,1649,478],{"class":280},[270,1651,1652],{"class":536}," number",[270,1654,291],{"class":280},[270,1656,1657],{"class":1646}," data",[270,1659,478],{"class":280},[270,1661,1418],{"class":536},[270,1663,563],{"class":280},[270,1665,281],{"class":280},[270,1667,1668,1671],{"class":272,"line":284},[270,1669,1670],{"class":276},"  try",[270,1672,281],{"class":280},[270,1674,1675,1678,1681,1683,1685,1687,1689,1691],{"class":272,"line":298},[270,1676,1677],{"class":276},"    return",[270,1679,1680],{"class":276}," await",[270,1682,442],{"class":287},[270,1684,445],{"class":280},[270,1686,449],{"class":448},[270,1688,453],{"class":452},[270,1690,456],{"class":287},[270,1692,459],{"class":452},[270,1694,1695,1698,1700,1702,1705],{"class":272,"line":309},[270,1696,1697],{"class":280},"      .",[270,1699,467],{"class":448},[270,1701,453],{"class":452},[270,1703,1704],{"class":287},"data",[270,1706,459],{"class":452},[270,1708,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1738],{"class":272,"line":320},[270,1710,1697],{"class":280},[270,1712,886],{"class":448},[270,1714,453],{"class":452},[270,1716,891],{"class":448},[270,1718,453],{"class":452},[270,1720,456],{"class":287},[270,1722,445],{"class":280},[270,1724,899],{"class":287},[270,1726,445],{"class":280},[270,1728,904],{"class":287},[270,1730,445],{"class":280},[270,1732,909],{"class":287},[270,1734,291],{"class":280},[270,1736,1737],{"class":287}," userId",[270,1739,918],{"class":452},[270,1741,1742,1744,1746,1748],{"class":272,"line":331},[270,1743,1697],{"class":280},[270,1745,497],{"class":448},[270,1747,500],{"class":452},[270,1749,416],{"class":280},[270,1751,1752,1754,1756,1758,1760,1762],{"class":272,"line":342},[270,1753,596],{"class":280},[270,1755,513],{"class":276},[270,1757,527],{"class":452},[270,1759,530],{"class":287},[270,1761,540],{"class":452},[270,1763,519],{"class":280},[270,1765,1766,1769,1771,1773,1775,1777,1779],{"class":272,"line":353},[270,1767,1768],{"class":276},"    if",[270,1770,527],{"class":452},[270,1772,530],{"class":287},[270,1774,533],{"class":280},[270,1776,537],{"class":536},[270,1778,540],{"class":452},[270,1780,519],{"class":280},[270,1782,1783],{"class":272,"line":364},[270,1784,1785],{"class":294},"      // Log and handle missing WHERE\n",[270,1787,1788,1791,1793,1795,1797,1799,1802,1804,1806],{"class":272,"line":375},[270,1789,1790],{"class":287},"      logger",[270,1792,445],{"class":280},[270,1794,530],{"class":448},[270,1796,453],{"class":452},[270,1798,413],{"class":280},[270,1800,1801],{"class":409},"Missing WHERE clause in update",[270,1803,413],{"class":280},[270,1805,563],{"class":452},[270,1807,416],{"class":280},[270,1809,1810,1813,1816,1819,1821,1823,1826,1828,1830],{"class":272,"line":386},[270,1811,1812],{"class":276},"      throw",[270,1814,1815],{"class":280}," new",[270,1817,1818],{"class":448}," Error",[270,1820,453],{"class":452},[270,1822,413],{"class":280},[270,1824,1825],{"class":409},"Invalid update operation",[270,1827,413],{"class":280},[270,1829,563],{"class":452},[270,1831,416],{"class":280},[270,1833,1834,1837,1839,1841,1843,1845,1847,1849,1851],{"class":272,"line":397},[270,1835,1836],{"class":280},"    }",[270,1838,599],{"class":276},[270,1840,602],{"class":276},[270,1842,527],{"class":452},[270,1844,530],{"class":287},[270,1846,533],{"class":280},[270,1848,1485],{"class":536},[270,1850,540],{"class":452},[270,1852,519],{"class":280},[270,1854,1855],{"class":272,"line":647},[270,1856,1857],{"class":294},"      // Handle invalid column\n",[270,1859,1860,1862,1864,1866,1868,1870,1873,1875,1877,1879,1881,1883,1885],{"class":272,"line":653},[270,1861,1790],{"class":287},[270,1863,445],{"class":280},[270,1865,530],{"class":448},[270,1867,453],{"class":452},[270,1869,413],{"class":280},[270,1871,1872],{"class":409},"Invalid column in update:",[270,1874,413],{"class":280},[270,1876,291],{"class":280},[270,1878,659],{"class":287},[270,1880,445],{"class":280},[270,1882,582],{"class":287},[270,1884,563],{"class":452},[270,1886,416],{"class":280},[270,1888,1889,1891,1893,1895,1897,1899,1902,1904,1906],{"class":272,"line":664},[270,1890,1812],{"class":276},[270,1892,1815],{"class":280},[270,1894,1818],{"class":448},[270,1896,453],{"class":452},[270,1898,413],{"class":280},[270,1900,1901],{"class":409},"Invalid field name",[270,1903,413],{"class":280},[270,1905,563],{"class":452},[270,1907,416],{"class":280},[270,1909,1910,1912,1914],{"class":272,"line":670},[270,1911,1836],{"class":280},[270,1913,599],{"class":276},[270,1915,281],{"class":280},[270,1917,1919],{"class":272,"line":1918},17,[270,1920,1921],{"class":294},"      // Re-throw database errors\n",[270,1923,1925,1927,1929],{"class":272,"line":1924},18,[270,1926,1812],{"class":276},[270,1928,659],{"class":287},[270,1930,416],{"class":280},[270,1932,1934],{"class":272,"line":1933},19,[270,1935,1936],{"class":280},"    }\n",[270,1938,1940],{"class":272,"line":1939},20,[270,1941,667],{"class":280},[270,1943,1945],{"class":272,"line":1944},21,[270,1946,673],{"class":280},[255,1948,1950],{"id":1949},"_3-validate-before-operations","3. Validate Before Operations",[260,1952,1954],{"className":423,"code":1953,"language":425,"meta":265,"style":265},"async function safeDeleteUser(userId: number) {\n  // Check if user exists first\n  const exists = await db.select(users)\n    .where(eq(users._.columns.id, userId))\n    .exists();\n  \n  if (!exists) {\n    throw new ValidationError('User not found');\n  }\n  \n  // Delete with proper WHERE clause\n  return await db.delete(users)\n    .where(eq(users._.columns.id, userId))\n    .execute();\n}\n",[267,1955,1956,1977,1982,2008,2040,2051,2056,2071,2093,2097,2101,2106,2125,2157,2167],{"__ignoreMap":265},[270,1957,1958,1960,1962,1965,1967,1969,1971,1973,1975],{"class":272,"line":273},[270,1959,1635],{"class":1634},[270,1961,1638],{"class":1634},[270,1963,1964],{"class":448}," safeDeleteUser",[270,1966,453],{"class":280},[270,1968,1647],{"class":1646},[270,1970,478],{"class":280},[270,1972,1652],{"class":536},[270,1974,563],{"class":280},[270,1976,281],{"class":280},[270,1978,1979],{"class":272,"line":284},[270,1980,1981],{"class":294},"  // Check if user exists first\n",[270,1983,1984,1987,1990,1993,1995,1997,1999,2002,2004,2006],{"class":272,"line":298},[270,1985,1986],{"class":1634},"  const",[270,1988,1989],{"class":287}," exists",[270,1991,1992],{"class":280}," =",[270,1994,1680],{"class":276},[270,1996,442],{"class":287},[270,1998,445],{"class":280},[270,2000,2001],{"class":448},"select",[270,2003,453],{"class":452},[270,2005,456],{"class":287},[270,2007,459],{"class":452},[270,2009,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038],{"class":272,"line":309},[270,2011,464],{"class":280},[270,2013,886],{"class":448},[270,2015,453],{"class":452},[270,2017,891],{"class":448},[270,2019,453],{"class":452},[270,2021,456],{"class":287},[270,2023,445],{"class":280},[270,2025,899],{"class":287},[270,2027,445],{"class":280},[270,2029,904],{"class":287},[270,2031,445],{"class":280},[270,2033,909],{"class":287},[270,2035,291],{"class":280},[270,2037,1737],{"class":287},[270,2039,918],{"class":452},[270,2041,2042,2044,2047,2049],{"class":272,"line":320},[270,2043,464],{"class":280},[270,2045,2046],{"class":448},"exists",[270,2048,500],{"class":452},[270,2050,416],{"class":280},[270,2052,2053],{"class":272,"line":331},[270,2054,2055],{"class":452},"  \n",[270,2057,2058,2060,2062,2065,2067,2069],{"class":272,"line":342},[270,2059,524],{"class":276},[270,2061,527],{"class":452},[270,2063,2064],{"class":280},"!",[270,2066,2046],{"class":287},[270,2068,540],{"class":452},[270,2070,519],{"class":280},[270,2072,2073,2075,2077,2080,2082,2084,2087,2089,2091],{"class":272,"line":353},[270,2074,656],{"class":276},[270,2076,1815],{"class":280},[270,2078,2079],{"class":448}," ValidationError",[270,2081,453],{"class":452},[270,2083,413],{"class":280},[270,2085,2086],{"class":409},"User not found",[270,2088,413],{"class":280},[270,2090,563],{"class":452},[270,2092,416],{"class":280},[270,2094,2095],{"class":272,"line":364},[270,2096,667],{"class":280},[270,2098,2099],{"class":272,"line":375},[270,2100,2055],{"class":452},[270,2102,2103],{"class":272,"line":386},[270,2104,2105],{"class":294},"  // Delete with proper WHERE clause\n",[270,2107,2108,2111,2113,2115,2117,2119,2121,2123],{"class":272,"line":397},[270,2109,2110],{"class":276},"  return",[270,2112,1680],{"class":276},[270,2114,442],{"class":287},[270,2116,445],{"class":280},[270,2118,766],{"class":448},[270,2120,453],{"class":452},[270,2122,456],{"class":287},[270,2124,459],{"class":452},[270,2126,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155],{"class":272,"line":647},[270,2128,464],{"class":280},[270,2130,886],{"class":448},[270,2132,453],{"class":452},[270,2134,891],{"class":448},[270,2136,453],{"class":452},[270,2138,456],{"class":287},[270,2140,445],{"class":280},[270,2142,899],{"class":287},[270,2144,445],{"class":280},[270,2146,904],{"class":287},[270,2148,445],{"class":280},[270,2150,909],{"class":287},[270,2152,291],{"class":280},[270,2154,1737],{"class":287},[270,2156,918],{"class":452},[270,2158,2159,2161,2163,2165],{"class":272,"line":653},[270,2160,464],{"class":280},[270,2162,497],{"class":448},[270,2164,500],{"class":452},[270,2166,416],{"class":280},[270,2168,2169],{"class":272,"line":664},[270,2170,673],{"class":280},[255,2172,2174],{"id":2173},"_4-document-global-operations","4. Document Global Operations",[260,2176,2178],{"className":423,"code":2177,"language":425,"meta":265,"style":265},"/**\n * Resets all user statistics for a new day\n * This intentionally updates ALL rows\n */\nasync function resetDailyStats() {\n  await db.update(userStats)\n    .set({ \n      dailyViews: 0,\n      dailyLikes: 0 \n    })\n    .allowGlobalOperation()  // Documented intent\n    .execute();\n}\n",[267,2179,2180,2185,2190,2195,2200,2213,2230,2243,2255,2266,2272,2283,2293],{"__ignoreMap":265},[270,2181,2182],{"class":272,"line":273},[270,2183,2184],{"class":294},"/**\n",[270,2186,2187],{"class":272,"line":284},[270,2188,2189],{"class":294}," * Resets all user statistics for a new day\n",[270,2191,2192],{"class":272,"line":298},[270,2193,2194],{"class":294}," * This intentionally updates ALL rows\n",[270,2196,2197],{"class":272,"line":309},[270,2198,2199],{"class":294}," */\n",[270,2201,2202,2204,2206,2209,2211],{"class":272,"line":320},[270,2203,1635],{"class":1634},[270,2205,1638],{"class":1634},[270,2207,2208],{"class":448}," resetDailyStats",[270,2210,500],{"class":280},[270,2212,281],{"class":280},[270,2214,2215,2217,2219,2221,2223,2225,2228],{"class":272,"line":331},[270,2216,439],{"class":276},[270,2218,442],{"class":287},[270,2220,445],{"class":280},[270,2222,449],{"class":448},[270,2224,453],{"class":452},[270,2226,2227],{"class":287},"userStats",[270,2229,459],{"class":452},[270,2231,2232,2234,2236,2238,2240],{"class":272,"line":342},[270,2233,464],{"class":280},[270,2235,467],{"class":448},[270,2237,453],{"class":452},[270,2239,472],{"class":280},[270,2241,2242],{"class":452}," \n",[270,2244,2245,2248,2250,2252],{"class":272,"line":353},[270,2246,2247],{"class":452},"      dailyViews",[270,2249,478],{"class":280},[270,2251,1055],{"class":914},[270,2253,2254],{"class":280},",\n",[270,2256,2257,2260,2262,2264],{"class":272,"line":364},[270,2258,2259],{"class":452},"      dailyLikes",[270,2261,478],{"class":280},[270,2263,1055],{"class":914},[270,2265,2242],{"class":452},[270,2267,2268,2270],{"class":272,"line":375},[270,2269,1836],{"class":280},[270,2271,459],{"class":452},[270,2273,2274,2276,2278,2280],{"class":272,"line":386},[270,2275,464],{"class":280},[270,2277,976],{"class":448},[270,2279,979],{"class":452},[270,2281,2282],{"class":294},"// Documented intent\n",[270,2284,2285,2287,2289,2291],{"class":272,"line":397},[270,2286,464],{"class":280},[270,2288,497],{"class":448},[270,2290,500],{"class":452},[270,2292,416],{"class":280},[270,2294,2295],{"class":272,"line":647},[270,2296,673],{"class":280},[255,2298,2300],{"id":2299},"_5-use-type-safe-operations","5. Use Type-Safe Operations",[260,2302,2304],{"className":423,"code":2303,"language":425,"meta":265,"style":265},"// TypeScript will catch column name errors at compile time\nawait db.update(users)\n  .increment('views')  // ✓ Type-checked column name\n  .where(eq(users._.columns.id, 1))\n  .execute();\n\n// ❌ TypeScript error if column doesn't exist\nawait db.update(users)\n  .increment('invalidColumn')  // Type error!\n  .execute();\n",[267,2305,2306,2311,2323,2344,2374,2384,2388,2393,2405,2425],{"__ignoreMap":265},[270,2307,2308],{"class":272,"line":273},[270,2309,2310],{"class":294},"// TypeScript will catch column name errors at compile time\n",[270,2312,2313,2315,2317,2319,2321],{"class":272,"line":284},[270,2314,706],{"class":276},[270,2316,442],{"class":287},[270,2318,445],{"class":280},[270,2320,449],{"class":448},[270,2322,807],{"class":287},[270,2324,2325,2327,2329,2331,2333,2336,2338,2341],{"class":272,"line":298},[270,2326,812],{"class":280},[270,2328,1403],{"class":448},[270,2330,453],{"class":287},[270,2332,413],{"class":280},[270,2334,2335],{"class":409},"views",[270,2337,413],{"class":280},[270,2339,2340],{"class":287},")  ",[270,2342,2343],{"class":294},"// ✓ Type-checked column name\n",[270,2345,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372],{"class":272,"line":309},[270,2347,812],{"class":280},[270,2349,886],{"class":448},[270,2351,453],{"class":287},[270,2353,891],{"class":448},[270,2355,894],{"class":287},[270,2357,445],{"class":280},[270,2359,899],{"class":287},[270,2361,445],{"class":280},[270,2363,904],{"class":287},[270,2365,445],{"class":280},[270,2367,909],{"class":287},[270,2369,291],{"class":280},[270,2371,1294],{"class":914},[270,2373,918],{"class":287},[270,2375,2376,2378,2380,2382],{"class":272,"line":320},[270,2377,812],{"class":280},[270,2379,497],{"class":448},[270,2381,500],{"class":287},[270,2383,416],{"class":280},[270,2385,2386],{"class":272,"line":331},[270,2387,750],{"emptyLinePlaceholder":749},[270,2389,2390],{"class":272,"line":342},[270,2391,2392],{"class":294},"// ❌ TypeScript error if column doesn't exist\n",[270,2394,2395,2397,2399,2401,2403],{"class":272,"line":353},[270,2396,706],{"class":276},[270,2398,442],{"class":287},[270,2400,445],{"class":280},[270,2402,449],{"class":448},[270,2404,807],{"class":287},[270,2406,2407,2409,2411,2413,2415,2418,2420,2422],{"class":272,"line":364},[270,2408,812],{"class":280},[270,2410,1403],{"class":448},[270,2412,453],{"class":287},[270,2414,413],{"class":280},[270,2416,2417],{"class":409},"invalidColumn",[270,2419,413],{"class":280},[270,2421,2340],{"class":287},[270,2423,2424],{"class":294},"// Type error!\n",[270,2426,2427,2429,2431,2433],{"class":272,"line":375},[270,2428,812],{"class":280},[270,2430,497],{"class":448},[270,2432,500],{"class":287},[270,2434,416],{"class":280},[247,2436,2438],{"id":2437},"error-handling-pattern","Error Handling Pattern",[243,2440,2441],{},"Here's a comprehensive error handling pattern for production code:",[260,2443,2445],{"className":423,"code":2444,"language":425,"meta":265,"style":265},"import {\n  MissingWhereClauseError,\n  ColumnNotFoundError,\n  ValidationError,\n  TauriORMError\n} from '@type32/tauri-sqlite-orm';\n\nasync function updateUserProfile(userId: number, updates: Partial\u003CUser>) {\n  try {\n    // Validate user exists\n    const exists = await db.select(users)\n      .where(eq(users._.columns.id, userId))\n      .exists();\n    \n    if (!exists) {\n      throw new ValidationError('User not found');\n    }\n    \n    // Perform update\n    const result = await db.update(users)\n      .set({\n        ...updates,\n        updatedAt: new Date()\n      })\n      .where(eq(users._.columns.id, userId))\n      .returningFirst();\n    \n    return result;\n    \n  } catch (error) {\n    // Handle ORM-specific errors\n    if (error instanceof TauriORMError) {\n      logger.error('Database error:', {\n        type: error.name,\n        message: error.message,\n        userId\n      });\n      \n      // Provide user-friendly message\n      if (error instanceof MissingWhereClauseError) {\n        throw new Error('Invalid update operation');\n      } else if (error instanceof ColumnNotFoundError) {\n        throw new Error('Invalid field name');\n      } else if (error instanceof ValidationError) {\n        throw error; // Re-throw validation errors as-is\n      }\n    }\n    \n    // Handle other errors\n    logger.error('Unexpected error:', error);\n    throw new Error('Failed to update user');\n  }\n}\n",[267,2446,2447,2453,2459,2465,2471,2476,2490,2494,2532,2538,2543,2566,2598,2608,2613,2627,2647,2651,2655,2660,2683,2693,2704,2719,2727,2760,2772,2777,2786,2791,2806,2812,2830,2852,2869,2885,2891,2900,2906,2912,2930,2952,2973,2994,3015,3027,3033,3038,3043,3049,3076,3098,3103],{"__ignoreMap":265},[270,2448,2449,2451],{"class":272,"line":273},[270,2450,277],{"class":276},[270,2452,281],{"class":280},[270,2454,2455,2457],{"class":272,"line":284},[270,2456,312],{"class":287},[270,2458,2254],{"class":280},[270,2460,2461,2463],{"class":272,"line":298},[270,2462,378],{"class":287},[270,2464,2254],{"class":280},[270,2466,2467,2469],{"class":272,"line":309},[270,2468,323],{"class":287},[270,2470,2254],{"class":280},[270,2472,2473],{"class":272,"line":320},[270,2474,2475],{"class":287},"  TauriORMError\n",[270,2477,2478,2480,2482,2484,2486,2488],{"class":272,"line":331},[270,2479,400],{"class":280},[270,2481,403],{"class":276},[270,2483,406],{"class":280},[270,2485,410],{"class":409},[270,2487,413],{"class":280},[270,2489,416],{"class":280},[270,2491,2492],{"class":272,"line":342},[270,2493,750],{"emptyLinePlaceholder":749},[270,2495,2496,2498,2500,2503,2505,2507,2509,2511,2513,2516,2518,2521,2524,2527,2530],{"class":272,"line":353},[270,2497,1635],{"class":1634},[270,2499,1638],{"class":1634},[270,2501,2502],{"class":448}," updateUserProfile",[270,2504,453],{"class":280},[270,2506,1647],{"class":1646},[270,2508,478],{"class":280},[270,2510,1652],{"class":536},[270,2512,291],{"class":280},[270,2514,2515],{"class":1646}," updates",[270,2517,478],{"class":280},[270,2519,2520],{"class":536}," Partial",[270,2522,2523],{"class":280},"\u003C",[270,2525,2526],{"class":536},"User",[270,2528,2529],{"class":280},">)",[270,2531,281],{"class":280},[270,2533,2534,2536],{"class":272,"line":364},[270,2535,1670],{"class":276},[270,2537,281],{"class":280},[270,2539,2540],{"class":272,"line":375},[270,2541,2542],{"class":294},"    // Validate user exists\n",[270,2544,2545,2548,2550,2552,2554,2556,2558,2560,2562,2564],{"class":272,"line":386},[270,2546,2547],{"class":1634},"    const",[270,2549,1989],{"class":287},[270,2551,1992],{"class":280},[270,2553,1680],{"class":276},[270,2555,442],{"class":287},[270,2557,445],{"class":280},[270,2559,2001],{"class":448},[270,2561,453],{"class":452},[270,2563,456],{"class":287},[270,2565,459],{"class":452},[270,2567,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596],{"class":272,"line":397},[270,2569,1697],{"class":280},[270,2571,886],{"class":448},[270,2573,453],{"class":452},[270,2575,891],{"class":448},[270,2577,453],{"class":452},[270,2579,456],{"class":287},[270,2581,445],{"class":280},[270,2583,899],{"class":287},[270,2585,445],{"class":280},[270,2587,904],{"class":287},[270,2589,445],{"class":280},[270,2591,909],{"class":287},[270,2593,291],{"class":280},[270,2595,1737],{"class":287},[270,2597,918],{"class":452},[270,2599,2600,2602,2604,2606],{"class":272,"line":647},[270,2601,1697],{"class":280},[270,2603,2046],{"class":448},[270,2605,500],{"class":452},[270,2607,416],{"class":280},[270,2609,2610],{"class":272,"line":653},[270,2611,2612],{"class":452},"    \n",[270,2614,2615,2617,2619,2621,2623,2625],{"class":272,"line":664},[270,2616,1768],{"class":276},[270,2618,527],{"class":452},[270,2620,2064],{"class":280},[270,2622,2046],{"class":287},[270,2624,540],{"class":452},[270,2626,519],{"class":280},[270,2628,2629,2631,2633,2635,2637,2639,2641,2643,2645],{"class":272,"line":670},[270,2630,1812],{"class":276},[270,2632,1815],{"class":280},[270,2634,2079],{"class":448},[270,2636,453],{"class":452},[270,2638,413],{"class":280},[270,2640,2086],{"class":409},[270,2642,413],{"class":280},[270,2644,563],{"class":452},[270,2646,416],{"class":280},[270,2648,2649],{"class":272,"line":1918},[270,2650,1936],{"class":280},[270,2652,2653],{"class":272,"line":1924},[270,2654,2612],{"class":452},[270,2656,2657],{"class":272,"line":1933},[270,2658,2659],{"class":294},"    // Perform update\n",[270,2661,2662,2664,2667,2669,2671,2673,2675,2677,2679,2681],{"class":272,"line":1939},[270,2663,2547],{"class":1634},[270,2665,2666],{"class":287}," result",[270,2668,1992],{"class":280},[270,2670,1680],{"class":276},[270,2672,442],{"class":287},[270,2674,445],{"class":280},[270,2676,449],{"class":448},[270,2678,453],{"class":452},[270,2680,456],{"class":287},[270,2682,459],{"class":452},[270,2684,2685,2687,2689,2691],{"class":272,"line":1944},[270,2686,1697],{"class":280},[270,2688,467],{"class":448},[270,2690,453],{"class":452},[270,2692,519],{"class":280},[270,2694,2696,2699,2702],{"class":272,"line":2695},22,[270,2697,2698],{"class":280},"        ...",[270,2700,2701],{"class":287},"updates",[270,2703,2254],{"class":280},[270,2705,2707,2710,2712,2714,2717],{"class":272,"line":2706},23,[270,2708,2709],{"class":452},"        updatedAt",[270,2711,478],{"class":280},[270,2713,1815],{"class":280},[270,2715,2716],{"class":448}," Date",[270,2718,1068],{"class":452},[270,2720,2722,2725],{"class":272,"line":2721},24,[270,2723,2724],{"class":280},"      }",[270,2726,459],{"class":452},[270,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758],{"class":272,"line":2729},25,[270,2731,1697],{"class":280},[270,2733,886],{"class":448},[270,2735,453],{"class":452},[270,2737,891],{"class":448},[270,2739,453],{"class":452},[270,2741,456],{"class":287},[270,2743,445],{"class":280},[270,2745,899],{"class":287},[270,2747,445],{"class":280},[270,2749,904],{"class":287},[270,2751,445],{"class":280},[270,2753,909],{"class":287},[270,2755,291],{"class":280},[270,2757,1737],{"class":287},[270,2759,918],{"class":452},[270,2761,2763,2765,2768,2770],{"class":272,"line":2762},26,[270,2764,1697],{"class":280},[270,2766,2767],{"class":448},"returningFirst",[270,2769,500],{"class":452},[270,2771,416],{"class":280},[270,2773,2775],{"class":272,"line":2774},27,[270,2776,2612],{"class":452},[270,2778,2780,2782,2784],{"class":272,"line":2779},28,[270,2781,1677],{"class":276},[270,2783,2666],{"class":287},[270,2785,416],{"class":280},[270,2787,2789],{"class":272,"line":2788},29,[270,2790,2612],{"class":452},[270,2792,2794,2796,2798,2800,2802,2804],{"class":272,"line":2793},30,[270,2795,596],{"class":280},[270,2797,513],{"class":276},[270,2799,527],{"class":452},[270,2801,530],{"class":287},[270,2803,540],{"class":452},[270,2805,519],{"class":280},[270,2807,2809],{"class":272,"line":2808},31,[270,2810,2811],{"class":294},"    // Handle ORM-specific errors\n",[270,2813,2815,2817,2819,2821,2823,2826,2828],{"class":272,"line":2814},32,[270,2816,1768],{"class":276},[270,2818,527],{"class":452},[270,2820,530],{"class":287},[270,2822,533],{"class":280},[270,2824,2825],{"class":536}," TauriORMError",[270,2827,540],{"class":452},[270,2829,519],{"class":280},[270,2831,2833,2835,2837,2839,2841,2843,2846,2848,2850],{"class":272,"line":2832},33,[270,2834,1790],{"class":287},[270,2836,445],{"class":280},[270,2838,530],{"class":448},[270,2840,453],{"class":452},[270,2842,413],{"class":280},[270,2844,2845],{"class":409},"Database error:",[270,2847,413],{"class":280},[270,2849,291],{"class":280},[270,2851,281],{"class":280},[270,2853,2855,2858,2860,2862,2864,2867],{"class":272,"line":2854},34,[270,2856,2857],{"class":452},"        type",[270,2859,478],{"class":280},[270,2861,659],{"class":287},[270,2863,445],{"class":280},[270,2865,2866],{"class":287},"name",[270,2868,2254],{"class":280},[270,2870,2872,2875,2877,2879,2881,2883],{"class":272,"line":2871},35,[270,2873,2874],{"class":452},"        message",[270,2876,478],{"class":280},[270,2878,659],{"class":287},[270,2880,445],{"class":280},[270,2882,582],{"class":287},[270,2884,2254],{"class":280},[270,2886,2888],{"class":272,"line":2887},36,[270,2889,2890],{"class":287},"        userId\n",[270,2892,2894,2896,2898],{"class":272,"line":2893},37,[270,2895,2724],{"class":280},[270,2897,563],{"class":452},[270,2899,416],{"class":280},[270,2901,2903],{"class":272,"line":2902},38,[270,2904,2905],{"class":452},"      \n",[270,2907,2909],{"class":272,"line":2908},39,[270,2910,2911],{"class":294},"      // Provide user-friendly message\n",[270,2913,2915,2918,2920,2922,2924,2926,2928],{"class":272,"line":2914},40,[270,2916,2917],{"class":276},"      if",[270,2919,527],{"class":452},[270,2921,530],{"class":287},[270,2923,533],{"class":280},[270,2925,537],{"class":536},[270,2927,540],{"class":452},[270,2929,519],{"class":280},[270,2931,2933,2936,2938,2940,2942,2944,2946,2948,2950],{"class":272,"line":2932},41,[270,2934,2935],{"class":276},"        throw",[270,2937,1815],{"class":280},[270,2939,1818],{"class":448},[270,2941,453],{"class":452},[270,2943,413],{"class":280},[270,2945,1825],{"class":409},[270,2947,413],{"class":280},[270,2949,563],{"class":452},[270,2951,416],{"class":280},[270,2953,2955,2957,2959,2961,2963,2965,2967,2969,2971],{"class":272,"line":2954},42,[270,2956,2724],{"class":280},[270,2958,599],{"class":276},[270,2960,602],{"class":276},[270,2962,527],{"class":452},[270,2964,530],{"class":287},[270,2966,533],{"class":280},[270,2968,1485],{"class":536},[270,2970,540],{"class":452},[270,2972,519],{"class":280},[270,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992],{"class":272,"line":2975},43,[270,2977,2935],{"class":276},[270,2979,1815],{"class":280},[270,2981,1818],{"class":448},[270,2983,453],{"class":452},[270,2985,413],{"class":280},[270,2987,1901],{"class":409},[270,2989,413],{"class":280},[270,2991,563],{"class":452},[270,2993,416],{"class":280},[270,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013],{"class":272,"line":2996},44,[270,2998,2724],{"class":280},[270,3000,599],{"class":276},[270,3002,602],{"class":276},[270,3004,527],{"class":452},[270,3006,530],{"class":287},[270,3008,533],{"class":280},[270,3010,2079],{"class":536},[270,3012,540],{"class":452},[270,3014,519],{"class":280},[270,3016,3018,3020,3022,3024],{"class":272,"line":3017},45,[270,3019,2935],{"class":276},[270,3021,659],{"class":287},[270,3023,503],{"class":280},[270,3025,3026],{"class":294}," // Re-throw validation errors as-is\n",[270,3028,3030],{"class":272,"line":3029},46,[270,3031,3032],{"class":280},"      }\n",[270,3034,3036],{"class":272,"line":3035},47,[270,3037,1936],{"class":280},[270,3039,3041],{"class":272,"line":3040},48,[270,3042,2612],{"class":452},[270,3044,3046],{"class":272,"line":3045},49,[270,3047,3048],{"class":294},"    // Handle other errors\n",[270,3050,3052,3055,3057,3059,3061,3063,3066,3068,3070,3072,3074],{"class":272,"line":3051},50,[270,3053,3054],{"class":287},"    logger",[270,3056,445],{"class":280},[270,3058,530],{"class":448},[270,3060,453],{"class":452},[270,3062,413],{"class":280},[270,3064,3065],{"class":409},"Unexpected error:",[270,3067,413],{"class":280},[270,3069,291],{"class":280},[270,3071,659],{"class":287},[270,3073,563],{"class":452},[270,3075,416],{"class":280},[270,3077,3079,3081,3083,3085,3087,3089,3092,3094,3096],{"class":272,"line":3078},51,[270,3080,656],{"class":276},[270,3082,1815],{"class":280},[270,3084,1818],{"class":448},[270,3086,453],{"class":452},[270,3088,413],{"class":280},[270,3090,3091],{"class":409},"Failed to update user",[270,3093,413],{"class":280},[270,3095,563],{"class":452},[270,3097,416],{"class":280},[270,3099,3101],{"class":272,"line":3100},52,[270,3102,667],{"class":280},[270,3104,3106],{"class":272,"line":3105},53,[270,3107,673],{"class":280},[247,3109,3111],{"id":3110},"summary","Summary",[243,3113,3114],{},"The ORM provides multiple layers of safety:",[3116,3117,3118,3124,3130,3136,3145],"ol",{},[3119,3120,3121,3123],"li",{},[681,3122,250],{}," - Clear, specific error messages",[3119,3125,3126,3129],{},[681,3127,3128],{},"WHERE Validation"," - Prevents accidental mass updates/deletes",[3119,3131,3132,3135],{},[681,3133,3134],{},"Type Safety"," - TypeScript catches errors at compile time",[3119,3137,3138,3141,3142,3144],{},[681,3139,3140],{},"Explicit Global Operations"," - ",[267,3143,1014],{}," makes intent clear",[3119,3146,3147,3149],{},[681,3148,1122],{}," - Helpful messages for common mistakes",[243,3151,3152],{},"These features work together to make your database operations safer and more reliable in production applications.",[3154,3155,3156],"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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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":265,"searchDepth":284,"depth":284,"links":3158},[3159,3163,3169,3174,3181,3182],{"id":249,"depth":284,"text":250,"children":3160},[3161,3162],{"id":257,"depth":298,"text":258},{"id":419,"depth":298,"text":420},{"id":676,"depth":284,"text":677,"children":3164},[3165,3166,3167,3168],{"id":687,"depth":298,"text":688},{"id":780,"depth":298,"text":781},{"id":995,"depth":298,"text":996},{"id":1007,"depth":298,"text":1008},{"id":1121,"depth":284,"text":1122,"children":3170},[3171,3172,3173],{"id":1125,"depth":298,"text":1126},{"id":1230,"depth":298,"text":1231},{"id":1368,"depth":298,"text":1369},{"id":1525,"depth":284,"text":1526,"children":3175},[3176,3177,3178,3179,3180],{"id":1529,"depth":298,"text":1530},{"id":1623,"depth":298,"text":1624},{"id":1949,"depth":298,"text":1950},{"id":2173,"depth":298,"text":2174},{"id":2299,"depth":298,"text":2300},{"id":2437,"depth":284,"text":2438},{"id":3110,"depth":284,"text":3111},"Error handling, WHERE validation, and safety features","md",null,{},{"title":197,"description":3183},"xx8iTFmm4_OQSgnzM5ygqHz_CgbM4ra7NE5rXDLZ394",[3190,3192],{"title":193,"path":194,"stem":195,"description":3191,"children":-1},"Relations in Tauri SQLite ORM.",{"title":201,"path":202,"stem":203,"description":3193,"children":-1},"Joins in Tauri SQLite ORM.",1773317304249]