Skip to content

Commit bb671e4

Browse files
committed
sync: update from internal GitLab repository
Content updated: Files: - module.xml Directories: - docs/ - objectscript/ Synced at: 2025-08-04 08:05:35
1 parent 73d9598 commit bb671e4

File tree

3 files changed

+247
-991
lines changed

3 files changed

+247
-991
lines changed
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
# ObjectScript Syntax Learning Report
2+
## Expert Changes Analysis: Benjamin De Boe
3+
4+
*Based on analysis of commits 47757a1 and 90a6e6b*
5+
6+
---
7+
8+
## 🎯 Executive Summary
9+
10+
This report analyzes critical ObjectScript syntax improvements made by InterSystems expert Benjamin De Boe that resolved compilation failures in the IRIS RAG Templates project. These changes demonstrate essential ObjectScript best practices and modern syntax patterns that should be committed to memory for improved ObjectScript development skills.
11+
12+
## 📋 Key Learning Categories
13+
14+
### 1. **Method Return Statements**
15+
**Critical Learning: Use `return` instead of `Quit` in modern ObjectScript**
16+
17+
#### ❌ Old Pattern (Problematic):
18+
```objectscript
19+
ClassMethod InvokeBasicRAG(query As %String) As %String
20+
{
21+
Try {
22+
Set result = bridge."invoke_basic_rag"(query, config)
23+
Quit result // ❌ Old syntax
24+
} Catch ex {
25+
Set error = {"success": (false)}
26+
Quit error.%ToJSON() // ❌ Old syntax
27+
}
28+
}
29+
```
30+
31+
#### ✅ New Pattern (Expert Fix):
32+
```objectscript
33+
ClassMethod InvokeBasicRAG(query As %String) As %String
34+
{
35+
Try {
36+
Set result = bridge."invoke_basic_rag"(query, config)
37+
return result // ✅ Modern syntax
38+
} Catch ex {
39+
Set error = {"success": false}
40+
return error.%ToJSON() // ✅ Modern syntax
41+
}
42+
}
43+
```
44+
45+
**Learning Point**: Modern ObjectScript prefers `return` statements over `Quit` for method returns. This improves readability and follows contemporary InterSystems development standards.
46+
47+
---
48+
49+
### 2. **Boolean Values in JSON Objects**
50+
**Critical Learning: Remove unnecessary parentheses around boolean values**
51+
52+
#### ❌ Old Pattern (Problematic):
53+
```objectscript
54+
Set error = {
55+
"success": (false), // ❌ Unnecessary parentheses
56+
"result": null,
57+
"error": (ex.DisplayString())
58+
}
59+
```
60+
61+
#### ✅ New Pattern (Expert Fix):
62+
```objectscript
63+
Set error = {
64+
"success": false, // ✅ Clean boolean syntax
65+
"result": null,
66+
"error": (ex.DisplayString()) // ✅ Parentheses only where needed (function calls)
67+
}
68+
```
69+
70+
**Learning Point**: In ObjectScript JSON objects, boolean values should be written directly as `true` or `false` without parentheses. Parentheses are only needed around function calls or complex expressions.
71+
72+
---
73+
74+
### 3. **Property Naming Conventions with Database Mapping**
75+
**Critical Learning: Use camelCase properties with SqlFieldName attributes**
76+
77+
#### ❌ Old Pattern (Problematic):
78+
```objectscript
79+
/// Document identifier
80+
Property doc_id As %String(MAXLEN = 255) [ Required ];
81+
82+
/// Full text content
83+
Property text_content As %Stream.GlobalCharacter;
84+
85+
/// Creation timestamp
86+
Property created_at As %TimeStamp [ InitialExpression = {$ZDateTime($Horolog,3)} ];
87+
88+
/// Index on document ID
89+
Index DocIdIndex On doc_id [ Unique ];
90+
```
91+
92+
#### ✅ New Pattern (Expert Fix):
93+
```objectscript
94+
/// Document identifier
95+
Property docid As %String(MAXLEN = 255) [ Required, SqlFieldName = "doc_id" ];
96+
97+
/// Full text content
98+
Property textcontent As %Stream.GlobalCharacter [ SqlFieldName = "text_content" ];
99+
100+
/// Creation timestamp
101+
Property createdat As %TimeStamp [ InitialExpression = {$ZDateTime($Horolog,3)}, SqlFieldName = "created_at" ];
102+
103+
/// Index on document ID (using new property name)
104+
Index DocIdIndex On docid [ Unique ];
105+
```
106+
107+
**Learning Point**: ObjectScript best practice is to use camelCase property names in class definitions while maintaining database compatibility through `SqlFieldName` attributes. This provides clean ObjectScript syntax while preserving expected database field names.
108+
109+
---
110+
111+
## 🔧 Technical Patterns to Remember
112+
113+
### A. **SqlFieldName Attribute Pattern**
114+
```objectscript
115+
// Standard pattern for database field mapping
116+
Property camelCaseName As %DataType [ SqlFieldName = "snake_case_db_field" ];
117+
118+
// Real examples from expert fixes:
119+
Property docid As %String(MAXLEN = 255) [ Required, SqlFieldName = "doc_id" ];
120+
Property textcontent As %Stream.GlobalCharacter [ SqlFieldName = "text_content" ];
121+
Property createdat As %TimeStamp [ SqlFieldName = "created_at" ];
122+
```
123+
124+
### B. **Index Definition Updates**
125+
```objectscript
126+
// When property names change, update index definitions accordingly
127+
Index DocIdIndex On docid [ Unique ]; // ✅ Uses new camelCase property name
128+
Index CreatedAtIndex On createdat; // ✅ Uses new camelCase property name
129+
```
130+
131+
### C. **Modern Method Structure**
132+
```objectscript
133+
ClassMethod MethodName() As %String
134+
{
135+
Try {
136+
// Main logic here
137+
return successResult; // ✅ Use 'return'
138+
} Catch ex {
139+
Set error = {
140+
"success": false, // ✅ No parentheses around booleans
141+
"error": (ex.DisplayString()) // ✅ Parentheses for function calls
142+
}
143+
return error.%ToJSON(); // ✅ Use 'return'
144+
}
145+
}
146+
```
147+
148+
---
149+
150+
## 🎓 Key Takeaways for ObjectScript Development
151+
152+
### 1. **Method Returns**
153+
- **Always use `return`** instead of `Quit` in modern ObjectScript
154+
- Improves code readability and follows current InterSystems standards
155+
- Consistent with other modern programming languages
156+
157+
### 2. **JSON Object Syntax**
158+
- **Remove parentheses** around simple boolean values (`true`, `false`)
159+
- **Keep parentheses** around function calls and complex expressions
160+
- Cleaner, more readable JSON object definitions
161+
162+
### 3. **Property Naming Strategy**
163+
- **Use camelCase** for ObjectScript property names
164+
- **Add SqlFieldName attributes** to maintain database compatibility
165+
- **Update all references** including index definitions
166+
- Best of both worlds: clean ObjectScript code + database compatibility
167+
168+
### 4. **Database Compatibility**
169+
- SqlFieldName attributes allow property names to differ from database field names
170+
- Enables ObjectScript naming conventions while preserving existing database schemas
171+
- Critical for projects with established database structures
172+
173+
---
174+
175+
## 🚀 Impact Assessment
176+
177+
### Before Expert Changes:
178+
-**Compilation Failures**: GitHub CI failing due to syntax issues
179+
-**Mixed Conventions**: Inconsistent use of `Quit` vs `return`
180+
-**Verbose JSON**: Unnecessary parentheses around boolean values
181+
-**Database Constraints**: Property names forced to match database field names
182+
183+
### After Expert Changes:
184+
-**Clean Compilation**: All ObjectScript classes compile successfully
185+
-**Modern Syntax**: Consistent use of `return` statements
186+
-**Clean JSON**: Proper boolean syntax in JSON objects
187+
-**Best Practice**: camelCase properties with SqlFieldName mapping
188+
189+
---
190+
191+
## 📝 Practical Application Guidelines
192+
193+
### When Writing New ObjectScript Classes:
194+
1. **Always use `return`** for method returns
195+
2. **Use camelCase** for property names
196+
3. **Add SqlFieldName** attributes for database mapping
197+
4. **Write clean JSON** without unnecessary parentheses
198+
5. **Update indexes** to reference new property names
199+
200+
### When Reviewing ObjectScript Code:
201+
1. **Check for `Quit` statements** → Replace with `return`
202+
2. **Look for `(false)` or `(true)`** → Simplify to `false` or `true`
203+
3. **Verify property naming** → Ensure camelCase with SqlFieldName mapping
204+
4. **Validate index references** → Ensure they use correct property names
205+
206+
---
207+
208+
## 🎯 Memory Commits for ObjectScript Excellence
209+
210+
**Remember these expert patterns:**
211+
212+
```objectscript
213+
// ✅ Perfect ObjectScript method structure
214+
ClassMethod ExampleMethod() As %String {
215+
Try {
216+
// Main logic
217+
return result;
218+
} Catch ex {
219+
Set error = {"success": false, "error": (ex.DisplayString())}
220+
return error.%ToJSON();
221+
}
222+
}
223+
224+
// ✅ Perfect property definition with database mapping
225+
Property camelCaseName As %DataType [ SqlFieldName = "database_field_name" ];
226+
227+
// ✅ Perfect index definition
228+
Index NameIndex On camelCaseName [ Unique ];
229+
```
230+
231+
These patterns, when consistently applied, produce clean, modern, and compilation-ready ObjectScript code that follows InterSystems best practices.
232+
233+
---
234+
235+
*Report compiled by analyzing expert ObjectScript improvements made by Benjamin De Boe on August 4, 2025*

module.xml

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Export generator="IRIS" version="26">
3-
<Document name="iris-rag.ZPM">
4-
<Module>
5-
<Name>iris-rag</Name>
6-
<Version>0.2.0</Version>
7-
<Description>A comprehensive, production-ready framework for implementing Retrieval Augmented Generation (RAG) pipelines using InterSystems IRIS as the vector database backend.</Description>
8-
<Keywords>RAG,Vector Search,Machine Learning,AI,IRIS,Python,Embeddings</Keywords>
9-
<Packaging>module</Packaging>
10-
<SourcesRoot>objectscript</SourcesRoot>
11-
<Resource Name="RAG.PKG"/>
12-
13-
<!-- Dependencies -->
14-
<Dependencies>
15-
</Dependencies>
16-
</Module>
17-
</Document>
3+
<!-- Simple IRIS export without ZPM dependencies -->
4+
<Class name="RAG.SourceDocumentsWithIFind">
5+
<Super>%Persistent</Super>
6+
<TimeStamp>65432,12345.123456</TimeStamp>
7+
</Class>
8+
<Class name="RAG.IFindSetup">
9+
<TimeStamp>65432,12345.123456</TimeStamp>
10+
</Class>
11+
<Class name="RAG.SourceDocumentsFixed">
12+
<Super>%Persistent</Super>
13+
<TimeStamp>65432,12345.123456</TimeStamp>
14+
</Class>
1815
</Export>

0 commit comments

Comments
 (0)