इस प्रोजेक्ट के बारे में

# bisql bisql Go के लिए एक दो-तरफ़ा SQL टेम्पलेट इंजन है। यह आपको SQL टेम्पलेट लिखने की अनुमति देता है जो एक साथ मान्य SQL स्टेटमेंट (SQL क्लाइंट में निष्पादन योग्य) और अनुप्रयोगों के लिए पैरामीटरयुक्त क्वेरी बिल्डर हैं। निर्देश SQL टिप्पणियों के रूप में व्यक्त किए जाते हैं, इसलिए समान पाठ दोनों संदर्भों में काम करता है। ## मुख्य विशेषताएं - **दो-तरफ़ा SQL**: टेम्पलेट मान्य SQL हैं; निर्देश टिप्पणियाँ हैं। समान पाठ क्लाइंट में (नमूना मानों के साथ) चलता है और Go में पैरामीटरयुक्त स्टेटमेंट `(SQL, Args)` बनाता है। - **स्पष्ट मॉडल**: खाली क्लॉज़ या लटकते कनेक्टर्स का कोई अंतर्निहित निष्कासन नहीं। लेखक पूर्वानुमानित आउटपुट के लिए गतिशील टुकड़ों (जैसे, `1 = 1`) को एंकर करते हैं। - **निर्देश**: बाइंड (`/* expr */literal`), लिटरल इंटरपोलेशन (`/*^ expr */literal`), कंडीशनल (`/*%if*/`, `/*%elseif*/`, `/*%else*/`, `/*%end*/`), लूप (`/*%for x in xs*/`), और इन्क्लूड (`/*%! @include name */`)। - **फ्रैगमेंट इन्क्लूजन**: `@include` के माध्यम से पुन: प्रयोज्य SQL फ्रैगमेंट, `fs.FS`, इन-मेमोरी रजिस्ट्री, या कस्टम लोडर से हल किए जाते हैं। चक्र/गहराई गार्ड के साथ पुनरावर्ती। - **डायलेक्ट समर्थन**: MySQL, SQLite, PostgreSQL, Oracle, और SQL Server के लिए प्लेसहोल्डर जनरेशन। PostgreSQL के लिए ऐरे बाइंडिंग। - **एक्सप्रेशन भाषा**: शर्तों और पुनरावृत्तियों के लिए expr-lang का उपयोग करता है, जो तुलना, तार्किक ऑप्स, वैकल्पिक चेनिंग, nil-कोलेसिंग, `in`, और `len` का समर्थन करता है। - **डिज़ाइन द्वारा सुरक्षित**: मनमाने मानों का कोई कच्चा-पाठ प्रतिस्थापन नहीं; गतिशील पहचानकर्ताओं को `/*%if*/` शाखाओं के माध्यम से व्हाइटलिस्ट किया जाना चाहिए। ## उपयोग टेम्पलेट `.sql` फ़ाइलें हैं। किसी भी `fs.FS` (जैसे, एम्बेडेड) से `ParseFile` के साथ पार्स करें, फिर पैरामीटर मैप या स्ट्रक्चर के साथ बिल्ड करें। ```go p := bisql.NewParser(bisql.WithDialect(dialect.PostgreSQL)) tmpl, err := p.ParseFile(sqlFS, "users/search.sql") stmt, err := tmpl.Build(map[string]any{"name": "Alice", "activeOnly": true, "status": "active"}) fmt.Println(stmt.SQL) // पैरामीटरयुक्त SQL fmt.Println(stmt.Args) // बाइंड तर्क ``` ## लेखन नियम - गतिशील टुकड़ों को एंकर करें (जैसे, `AND` श्रृंखलाओं के लिए `1 = 1`, `OR` श्रृंखलाओं के लिए `1 = 0`)। - सूचियों के लिए, अग्रणी कनेक्टर्स (`and`/`or`) या कॉमा सूचियों के लिए शून्य-पंक्ति बीज से `union all select` का उपयोग करें। - स्ट्रिंग्स/पहचानकर्ताओं को SQL-मानक दोहरीकरण के साथ उद्धृत करें; बैकस्लैश एस्केपिंग मान्यता प्राप्त नहीं है। - पार्सर टिप्पणियों (हटाए गए) के लिए `/*%! … */` या सामान्य ब्लॉक टिप्पणियों के लिए `/** … */` का उपयोग करें। ## पैकेज लेआउट - `bisql`: सार्वजनिक API (Parser, Parse, Expand, लोडर)। - `dialect/`: डायलेक्ट परिभाषाएँ। - `expr/`: मूल्यांकनकर्ता इंटरफ़ेस और Scope। - `internal/`: टेम्पलेट परत और डिफ़ॉल्ट मूल्यांकनकर्ता। ## विकास टूलचेन `mise.toml` में पिन किया गया है; fmt, build, vet, lint, और परीक्षणों के लिए `mise run check` चलाएँ। PostgreSQL के साथ एकीकरण परीक्षणों के लिए एक बिल्ड टैग और DSN की आवश्यकता होती है। पूर्ण दस्तावेज़ीकरण के लिए, [Go Reference](https://pkg.go.dev/github.com/mpyw/bisql) देखें।