Skip to content

Commit 9018c6f

Browse files
authored
Merge pull request #516 from intersystems/backwards-compatibility
Changed dynamic SQL to embedded SQL
2 parents 85ca50e + 8f69556 commit 9018c6f

File tree

4 files changed

+50
-50
lines changed

4 files changed

+50
-50
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2121
- Basic mode Sync operation now imports items changed on the remote merge branch (#506)
2222
- Fetch diff output uses correct remote branch (#509)
2323
- Properly handle more cases of truncated filenames from git pull (#511)
24+
- Made git-source-control backwards compatible with IRIS 2021.1 (#513)
2425

2526
## [2.5.0] - 2024-09-24
2627

cls/SourceControl/Git/Change.cls

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -82,29 +82,25 @@ ClassMethod GetOtherDeveloperChanges() As %Boolean
8282
{
8383
set numEntries = 0
8484
set fileToOtherDevelopers = {}
85-
set query = "Select ItemFile, ChangedBy FROM SourceControl_Git.Change WHERE Committed = '0' AND ChangedBy <> ?"
86-
set statement = ##class(%SQL.Statement).%New()
87-
set status = statement.%Prepare(query, 0)
88-
$$$ThrowOnError(status)
89-
set rset = statement.%Execute($username)
90-
if (rset.%SQLCODE < 0) {
91-
throw ##class(%Exception.SQL).CreateFromSQLCODE(rset.%SQLCODE,rset.%Message)
92-
}
93-
set tempFolder = ##class(SourceControl.Git.Utils).TempFolder()
94-
while rset.%Next(.sc) {
95-
$$$ThrowOnError(sc)
9685

97-
if $FIND(rset.ItemFile, tempFolder) {
98-
set filePath = $PIECE(rset.ItemFile, tempFolder, 2)
99-
} else {
100-
continue
86+
set username = $username
87+
&sql(DECLARE DeveloperCursor CURSOR FOR SELECT ItemFile, ChangedBy into :itemFile, :changedBy from SourceControl_Git.Change WHERE Committed = 0 and ChangedBy <> :username)
88+
&sql(OPEN DeveloperCursor)
89+
throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg)
90+
&sql(FETCH DeveloperCursor)
91+
set tempFolder = ##class(SourceControl.Git.Utils).TempFolder()
92+
while(SQLCODE = 0) {
93+
if $FIND(itemFile, tempFolder) {
94+
set filePath = $PIECE(itemFile, tempFolder, 2)
95+
set otherDevelopers = fileToOtherDevelopers.%Get(filePath, [])
96+
do otherDevelopers.%Push(changedBy)
97+
do fileToOtherDevelopers.%Set(filePath, otherDevelopers)
10198
}
10299

103-
set otherDevelopers = fileToOtherDevelopers.%Get(filePath, [])
104-
do otherDevelopers.%Push(rset.ChangedBy)
105-
do fileToOtherDevelopers.%Set(filePath, otherDevelopers)
100+
&sql(FETCH DeveloperCursor)
106101
}
107-
$$$ThrowOnError(sc)
102+
&sql(CLOSE DeveloperCursor)
103+
108104
return fileToOtherDevelopers
109105
}
110106

@@ -193,6 +189,7 @@ Query InstanceUncommitted() As %Query(ROWSPEC = "InternalName:%String,User:%Stri
193189
ClassMethod InstanceUncommittedExecute(ByRef qHandle As %Binary) As %Status
194190
{
195191
set qHandle("q") = "SELECT InternalName, ChangedBy FROM SourceControl_Git.Change"
192+
&sql(DECLARE InstanceCursor CURSOR FOR SELECT InternalName, ChangedBy into :internalName, :changedBy from SourceControl_Git.Change)
196193
set namespaces = ##class(SourceControl.Git.Utils).GetGitEnabledNamespaces()
197194
set tPtr = 0
198195
set qHandle("i") = 1
@@ -201,16 +198,17 @@ ClassMethod InstanceUncommittedExecute(ByRef qHandle As %Binary) As %Status
201198
set namespace = $ZCONVERT(tValue, "U")
202199
if '(namespace [ "^") {
203200
set $NAMESPACE = namespace
204-
set statement = ##class(%SQL.Statement).%New()
205-
$$$ThrowOnError(statement.%Prepare(qHandle("q"), 0))
206-
set resultSet = statement.%Execute()
207-
throw:resultSet.%SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(resultSet.%SQLCODE,resultSet.%Message)
208-
while resultSet.%Next(.sc) {
209-
$$$ThrowOnError(sc)
210-
set qHandle("changes", $increment(qHandle("changes")), "InternalName") = resultSet.%GetData(1)
211-
set qHandle("changes", qHandle("changes"), "User") = resultSet.%GetData(2)
212-
set qHandle("changes", qHandle("changes"), "Namespace") = namespace
213-
}
201+
202+
&sql(OPEN InstanceCursor)
203+
throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg)
204+
&sql(FETCH InstanceCursor)
205+
while(SQLCODE = 0) {
206+
set qHandle("changes", $increment(qHandle("changes")), "InternalName") = internalName
207+
set qHandle("changes", qHandle("changes"), "User") = changedBy
208+
set qHandle("changes", qHandle("changes"), "Namespace") = namespace
209+
&sql(FETCH InstanceCursor)
210+
}
211+
&sql(CLOSE InstanceCursor)
214212
}
215213
}
216214

@@ -283,4 +281,3 @@ Storage Default
283281
}
284282

285283
}
286-

cls/SourceControl/Git/DiscardState.cls

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,21 @@ ClassMethod DiscardStatesInBranch() As %DynamicArray
7777
{
7878
set currentBranch = ##class(SourceControl.Git.Utils).GetCurrentBranch()
7979

80-
set query = "SELECT ID FROM SourceControl_Git.DiscardState WHERE branch = ?"
81-
set statement = ##class(%SQL.Statement).%New()
82-
set status = statement.%Prepare(query, 0)
83-
$$$ThrowOnError(status)
84-
set resultSet = statement.%Execute(currentBranch)
85-
if (resultSet.%SQLCODE < 0) {
86-
throw ##class(%Exception.SQL).CreateFromSQLCODE(resultSet.%SQLCODE,resultSet.%Message)
87-
}
88-
80+
// Use embedded SQL for backwards compatability
81+
&sql(DECLARE DiscardCursor CURSOR FOR SELECT ID into :id from SourceControl_Git.DiscardState WHERE branch = :currentBranch)
82+
&sql(OPEN DiscardCursor)
83+
throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg)
84+
&sql(FETCH DiscardCursor)
8985
set discardStates = []
90-
while resultSet.%Next() {
91-
set discardState = ..%OpenId(resultSet.ID)
86+
while(SQLCODE = 0) {
87+
set discardState = ..%OpenId(id)
9288
do discardState.%JSONExportToString(.JSONStr)
9389
set discardStateObject = ##class(%DynamicAbstractObject).%FromJSON(JSONStr)
94-
set discardStateObject.Id = resultSet.ID
90+
set discardStateObject.Id = id
9591
do discardStates.%Push(discardStateObject)
92+
&sql(FETCH DiscardCursor)
9693
}
94+
&sql(CLOSE DiscardCursor)
9795

9896
quit discardStates
9997
}

cls/SourceControl/Git/Utils.cls

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2430,15 +2430,20 @@ ClassMethod GetContexts() As %DynamicArray
24302430
do contexts.%Push(value)
24312431
}
24322432

2433-
set query = "SELECT name from %Library.RoutineMgr_StudioOpenDialog('*.ZPM')"
2434-
set statement = ##class(%SQL.Statement).%New()
2435-
$$$ThrowOnError(statement.%Prepare(query, 0))
2436-
set packagesResultSet = statement.%Execute()
2437-
throw:packagesResultSet.%SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(packagesResultSet.%SQLCODE,packagesResultSet.%Message)
2438-
while packagesResultSet.%Next() {
2439-
set package = packagesResultSet.Name
2433+
set name = ""
2434+
2435+
// Using embedded for backwards compatability
2436+
&sql(DECLARE C1 CURSOR FOR SELECT name into :name from %Library.RoutineMgr_StudioOpenDialog('*.ZPM'))
2437+
&sql(OPEN C1)
2438+
throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg)
2439+
&sql(FETCH C1)
2440+
while(SQLCODE = 0) {
2441+
set package = name
24402442
do contexts.%Push(package)
2443+
&sql(FETCH C1)
24412444
}
2445+
&sql(CLOSE C1)
2446+
24422447
return contexts
24432448
}
24442449

@@ -2740,4 +2745,3 @@ ClassMethod BaselineExport(pCommitMessage = "", pPushToRemote = "") As %Status
27402745
}
27412746

27422747
}
2743-

0 commit comments

Comments
 (0)