Skip to content

microsoft/SqlScriptDOM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

84 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

SqlScriptDOM Documentation Guide

Welcome to the SqlScriptDOM documentation! This folder contains comprehensive guides for understanding, developing, and debugging the SQL Server T-SQL parser.

πŸš€ Quick Start

New to the project? Start here:

  1. Read copilot-instructions.md - Main project documentation
  2. Browse debugging_workflow.guidelines.instructions.md - Visual quick reference

Fixing a bug? Start here:

  1. Open debugging_workflow.guidelines.instructions.md - Identify bug type
  2. Follow the flowchart to the appropriate guide
  3. Use the step-by-step instructions

πŸ“š Documentation Map

Core Documentation

Purpose: Main project documentation and overview
Contains:

  • Project structure and key files
  • Build and test commands
  • Developer workflow
  • Bug fixing triage
  • Debugging tips
  • Grammar gotchas and pitfalls

When to read: First time working on the project, or for general context


Quick Reference

Purpose: Visual guide for quick bug diagnosis
Contains:

  • Diagnostic flowchart
  • Error pattern recognition
  • Investigation steps
  • Testing commands reference
  • Key files reference
  • Common pitfalls

When to use: When you have a bug and need to quickly identify what type of fix is needed


Specialized Fix Guides

Validation_fix.guidelines.instructions.md - Most Common Fix Type ⭐

Purpose: Fixing validation-based bugs
When to use:

  • βœ… Error: "Option 'X' is not valid..." or "Feature not supported..."
  • βœ… Same syntax works in different context (e.g., ALTER INDEX vs ALTER TABLE)
  • βœ… SQL Server version-specific features

Contains:

  • Real-world example (ALTER TABLE ADD CONSTRAINT RESUMABLE)
  • Version flag patterns
  • Validation logic modification
  • Testing strategy

Complexity: ⭐ Easy
Typical time: 1-2 hours


Purpose: Adding new syntax or modifying parser grammar
When to use:

  • βœ… Error: "Incorrect syntax near..." or "Unexpected token..."
  • βœ… Parser doesn't recognize new T-SQL features
  • βœ… Need to add new keywords, operators, or statements

Contains:

  • Complete bug-fixing workflow
  • Grammar modification process
  • AST updates
  • Script generator changes
  • Baseline generation
  • Decision tree for bug types

Complexity: ⭐⭐⭐ Medium to Hard
Typical time: 4-8 hours


Purpose: Fixing parentheses recognition issues
When to use:

  • βœ… WHERE PREDICATE(...) works
  • ❌ WHERE (PREDICATE(...)) fails with syntax error
  • βœ… Identifier-based boolean predicates

Contains:

  • IsNextRuleBooleanParenthesis() modification
  • Predicate detection patterns
  • Real example (REGEXP_LIKE)

Complexity: ⭐⭐ Easy-Medium
Typical time: 1-3 hours


Purpose: Common patterns for extending existing grammar
When to use:

  • βœ… Need to extend literal types to accept expressions
  • βœ… Adding new enum members
  • βœ… Creating new function/statement types

Contains:

  • Literal to expression pattern
  • Real example (VECTOR_SEARCH TOP_N)
  • Context-specific grammar rules
  • Shared rule warnings

Complexity: ⭐⭐⭐ Medium
Typical time: 3-6 hours


Meta Documentation

Purpose: Summary of documentation improvements
Contains:

  • What was improved and why
  • Before/after comparison
  • Real-world validation (ALTER TABLE RESUMABLE)
  • Lessons learned

When to read: If you want to understand the documentation structure and evolution


🎯 Bug Type Decision Tree

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   You have a parsing bug        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚
            β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚ What's the    β”‚
    β”‚ error message?β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚        β”‚        β”‚
   β–Ό        β–Ό        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”
β”‚Optionβ”‚ β”‚Syntaxβ”‚ β”‚Parensβ”‚
β”‚error β”‚ β”‚error β”‚ β”‚break β”‚
β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜
   β”‚        β”‚        β”‚
   β–Ό        β–Ό        β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”
β”‚VALID-β”‚ β”‚BUG   β”‚ β”‚PARSERβ”‚
β”‚ATION β”‚ β”‚FIXINGβ”‚ β”‚PRED  β”‚
β”‚FIX   β”‚ β”‚GUIDE β”‚ β”‚RECOG β”‚
β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜

πŸ“‹ Quick Reference Table

Error Message Bug Type Guide Complexity
"Option 'X' is not valid in statement Y" Validation Validation_fix.guidelines.instructions.md ⭐ Easy
"Feature 'X' not supported in version Y" Validation Validation_fix.guidelines.instructions.md ⭐ Easy
"Incorrect syntax near keyword" Grammar bug_fixing.guidelines.instructions.md ⭐⭐⭐ Medium
"Unexpected token" Grammar bug_fixing.guidelines.instructions.md ⭐⭐⭐ Medium
Syntax error with parentheses only Predicate Recognition parser.guidelines.instructions.md ⭐⭐ Easy-Medium
Need to extend literal to expression Grammar Extension GRAMMAR_EXTENSION_PATTERNS ⭐⭐⭐ Medium

πŸ” Common Scenarios

Scenario 1: New SQL Server Feature Not Recognized

Example: ALTER TABLE ... WITH (RESUMABLE = ON) fails
Likely Issue: Validation blocking the option
Start With: VALIDATION_FIX_GUIDE.md

Scenario 2: New T-SQL Keyword Not Parsed

Example: CREATE EXTERNAL TABLE not recognized
Likely Issue: Grammar doesn't have rules for this syntax
Start With: BUG_FIXING_GUIDE.md

Scenario 3: Function Works Sometimes, Fails with Parentheses

Example: WHERE REGEXP_LIKE(...) fails
Likely Issue: Predicate recognition
Start With: PARSER_PREDICATE_RECOGNITION_FIX.md

Scenario 4: Parameter Support Needed

Example: TOP_N = @parameter should work
Likely Issue: Need to extend from literal to expression
Start With: GRAMMAR_EXTENSION_PATTERNS.md

πŸ› οΈ Essential Commands

# Build parser
dotnet build SqlScriptDom/Microsoft.SqlServer.TransactSql.ScriptDom.csproj -c Debug

# Run specific test
dotnet test --filter "FullyQualifiedName~YourTest" -c Debug

# Run ALL tests (CRITICAL before committing!)
dotnet test Test/SqlDom/UTSqlScriptDom.csproj -c Debug

# Search for error code
grep -r "SQL46057" SqlScriptDom/

# Search for option usage
grep -r "RESUMABLE" Test/SqlDom/TestScripts/

πŸ“Š Documentation Statistics

  • Total Guides: 6 comprehensive guides
  • Bug Types Covered: 3 main types (validation, grammar, predicate recognition)
  • Real-World Examples: 4 detailed examples with code
  • Code Samples: 50+ practical bash/C#/SQL examples
  • Quick References: 3 tables and 2 flowcharts

πŸŽ“ Learning Path

Beginner Path (Understanding the Project)

  1. copilot-instructions.md - Read "Key points" section
  2. debugging_workflow.guidelines.instructions.md - Understand bug types
  3. Validation_fix.guidelines.instructions.md - Follow ALTER TABLE RESUMABLE example
  4. Try fixing a validation bug yourself

Time: 2-3 hours

Intermediate Path (Grammar Changes)

  1. Review beginner path first
  2. bug_fixing.guidelines.instructions.md - Complete workflow
  3. grammer.guidelines.instructions.md - Common patterns
  4. copilot-instructions.md - "Grammar Gotchas" section
  5. Try adding a simple new keyword

Time: 4-6 hours

Advanced Path (Complex Features)

  1. Master beginner and intermediate paths
  2. bug_fixing.guidelines.instructions.md - AST modifications
  3. grammer.guidelines.instructions.md - All patterns
  4. Study existing complex features (e.g., VECTOR_SEARCH)
  5. Implement a new statement type

Time: 8-16 hours

🚨 Critical Reminders

Always Do This:

  • βœ… Run full test suite before committing (1,100+ tests)
  • βœ… Check Microsoft docs for exact version support
  • βœ… Search for error messages first before coding
  • βœ… Create context-specific rules instead of modifying shared ones
  • βœ… Test across all SQL Server versions in test configuration

Never Do This:

  • ❌ Modify shared grammar rules without understanding impact
  • ❌ Skip running the full test suite
  • ❌ Assume version support - always verify documentation
  • ❌ Edit generated files in obj/ directory
  • ❌ Commit without testing baseline generation

🀝 Contributing

When improving these docs:

  1. Use real examples from actual bugs
  2. Include complete code samples (not pseudo-code)
  3. Add bash commands that actually work
  4. Cross-reference related guides
  5. Update this README if adding new guides

πŸ“ž Getting Help

If stuck:

  1. Search error message in codebase: grep -r "your error"
  2. Check similar working syntax: grep -r "keyword" Test/SqlDom/
  3. Review relevant guide based on bug type
  4. Check Git history for similar fixes: git log --grep="RESUMABLE"

πŸŽ‰ Success Metrics

You know you've succeeded when:

  • βœ… Your specific test passes
  • βœ… ALL 1,100+ tests pass (critical!)
  • βœ… Baseline matches generated output
  • βœ… Version-specific behavior is correct
  • βœ… No regressions in existing functionality

Last Updated: Based on ALTER TABLE RESUMABLE fix (October 2025)

Contributors: Documentation improved based on practical bug-fixing experience

Feedback: These guides are living documents. Please update them when you discover new patterns or better approaches!

About

ScriptDOM/SqlDOM is a .NET library for parsing T-SQL statements and interacting with its abstract syntax tree

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks