From 8f69556f7ac4b878e8762507dcc07aad38d642b1 Mon Sep 17 00:00:00 2001 From: Elijah Tamarchenko Date: Thu, 3 Oct 2024 14:15:30 -0400 Subject: [PATCH] Changed dynamic SQL to embedded SQL --- CHANGELOG.md | 1 + cls/SourceControl/Git/Change.cls | 57 ++++++++++++-------------- cls/SourceControl/Git/DiscardState.cls | 22 +++++----- cls/SourceControl/Git/Utils.cls | 20 +++++---- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37c9fc07..e75203e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Basic mode Sync operation now imports items changed on the remote merge branch (#506) - Fetch diff output uses correct remote branch (#509) - Properly handle more cases of truncated filenames from git pull (#511) +- Made git-source-control backwards compatible with IRIS 2021.1 (#513) ## [2.5.0] - 2024-09-24 diff --git a/cls/SourceControl/Git/Change.cls b/cls/SourceControl/Git/Change.cls index a47c27ad..81f1e7cd 100644 --- a/cls/SourceControl/Git/Change.cls +++ b/cls/SourceControl/Git/Change.cls @@ -82,29 +82,25 @@ ClassMethod GetOtherDeveloperChanges() As %Boolean { set numEntries = 0 set fileToOtherDevelopers = {} - set query = "Select ItemFile, ChangedBy FROM SourceControl_Git.Change WHERE Committed = '0' AND ChangedBy <> ?" - set statement = ##class(%SQL.Statement).%New() - set status = statement.%Prepare(query, 0) - $$$ThrowOnError(status) - set rset = statement.%Execute($username) - if (rset.%SQLCODE < 0) { - throw ##class(%Exception.SQL).CreateFromSQLCODE(rset.%SQLCODE,rset.%Message) - } - set tempFolder = ##class(SourceControl.Git.Utils).TempFolder() - while rset.%Next(.sc) { - $$$ThrowOnError(sc) - if $FIND(rset.ItemFile, tempFolder) { - set filePath = $PIECE(rset.ItemFile, tempFolder, 2) - } else { - continue + set username = $username + &sql(DECLARE DeveloperCursor CURSOR FOR SELECT ItemFile, ChangedBy into :itemFile, :changedBy from SourceControl_Git.Change WHERE Committed = 0 and ChangedBy <> :username) + &sql(OPEN DeveloperCursor) + throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg) + &sql(FETCH DeveloperCursor) + set tempFolder = ##class(SourceControl.Git.Utils).TempFolder() + while(SQLCODE = 0) { + if $FIND(itemFile, tempFolder) { + set filePath = $PIECE(itemFile, tempFolder, 2) + set otherDevelopers = fileToOtherDevelopers.%Get(filePath, []) + do otherDevelopers.%Push(changedBy) + do fileToOtherDevelopers.%Set(filePath, otherDevelopers) } - set otherDevelopers = fileToOtherDevelopers.%Get(filePath, []) - do otherDevelopers.%Push(rset.ChangedBy) - do fileToOtherDevelopers.%Set(filePath, otherDevelopers) + &sql(FETCH DeveloperCursor) } - $$$ThrowOnError(sc) + &sql(CLOSE DeveloperCursor) + return fileToOtherDevelopers } @@ -193,6 +189,7 @@ Query InstanceUncommitted() As %Query(ROWSPEC = "InternalName:%String,User:%Stri ClassMethod InstanceUncommittedExecute(ByRef qHandle As %Binary) As %Status { set qHandle("q") = "SELECT InternalName, ChangedBy FROM SourceControl_Git.Change" + &sql(DECLARE InstanceCursor CURSOR FOR SELECT InternalName, ChangedBy into :internalName, :changedBy from SourceControl_Git.Change) set namespaces = ##class(SourceControl.Git.Utils).GetGitEnabledNamespaces() set tPtr = 0 set qHandle("i") = 1 @@ -201,16 +198,17 @@ ClassMethod InstanceUncommittedExecute(ByRef qHandle As %Binary) As %Status set namespace = $ZCONVERT(tValue, "U") if '(namespace [ "^") { set $NAMESPACE = namespace - set statement = ##class(%SQL.Statement).%New() - $$$ThrowOnError(statement.%Prepare(qHandle("q"), 0)) - set resultSet = statement.%Execute() - throw:resultSet.%SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(resultSet.%SQLCODE,resultSet.%Message) - while resultSet.%Next(.sc) { - $$$ThrowOnError(sc) - set qHandle("changes", $increment(qHandle("changes")), "InternalName") = resultSet.%GetData(1) - set qHandle("changes", qHandle("changes"), "User") = resultSet.%GetData(2) - set qHandle("changes", qHandle("changes"), "Namespace") = namespace - } + + &sql(OPEN InstanceCursor) + throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg) + &sql(FETCH InstanceCursor) + while(SQLCODE = 0) { + set qHandle("changes", $increment(qHandle("changes")), "InternalName") = internalName + set qHandle("changes", qHandle("changes"), "User") = changedBy + set qHandle("changes", qHandle("changes"), "Namespace") = namespace + &sql(FETCH InstanceCursor) + } + &sql(CLOSE InstanceCursor) } } @@ -283,4 +281,3 @@ Storage Default } } - diff --git a/cls/SourceControl/Git/DiscardState.cls b/cls/SourceControl/Git/DiscardState.cls index fc48d999..7e3bbc8b 100644 --- a/cls/SourceControl/Git/DiscardState.cls +++ b/cls/SourceControl/Git/DiscardState.cls @@ -77,23 +77,21 @@ ClassMethod DiscardStatesInBranch() As %DynamicArray { set currentBranch = ##class(SourceControl.Git.Utils).GetCurrentBranch() - set query = "SELECT ID FROM SourceControl_Git.DiscardState WHERE branch = ?" - set statement = ##class(%SQL.Statement).%New() - set status = statement.%Prepare(query, 0) - $$$ThrowOnError(status) - set resultSet = statement.%Execute(currentBranch) - if (resultSet.%SQLCODE < 0) { - throw ##class(%Exception.SQL).CreateFromSQLCODE(resultSet.%SQLCODE,resultSet.%Message) - } - + // Use embedded SQL for backwards compatability + &sql(DECLARE DiscardCursor CURSOR FOR SELECT ID into :id from SourceControl_Git.DiscardState WHERE branch = :currentBranch) + &sql(OPEN DiscardCursor) + throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg) + &sql(FETCH DiscardCursor) set discardStates = [] - while resultSet.%Next() { - set discardState = ..%OpenId(resultSet.ID) + while(SQLCODE = 0) { + set discardState = ..%OpenId(id) do discardState.%JSONExportToString(.JSONStr) set discardStateObject = ##class(%DynamicAbstractObject).%FromJSON(JSONStr) - set discardStateObject.Id = resultSet.ID + set discardStateObject.Id = id do discardStates.%Push(discardStateObject) + &sql(FETCH DiscardCursor) } + &sql(CLOSE DiscardCursor) quit discardStates } diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index 2a170ed0..554dca29 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -2430,15 +2430,20 @@ ClassMethod GetContexts() As %DynamicArray do contexts.%Push(value) } - set query = "SELECT name from %Library.RoutineMgr_StudioOpenDialog('*.ZPM')" - set statement = ##class(%SQL.Statement).%New() - $$$ThrowOnError(statement.%Prepare(query, 0)) - set packagesResultSet = statement.%Execute() - throw:packagesResultSet.%SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(packagesResultSet.%SQLCODE,packagesResultSet.%Message) - while packagesResultSet.%Next() { - set package = packagesResultSet.Name + set name = "" + + // Using embedded for backwards compatability + &sql(DECLARE C1 CURSOR FOR SELECT name into :name from %Library.RoutineMgr_StudioOpenDialog('*.ZPM')) + &sql(OPEN C1) + throw:SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(SQLCODE, %msg) + &sql(FETCH C1) + while(SQLCODE = 0) { + set package = name do contexts.%Push(package) + &sql(FETCH C1) } + &sql(CLOSE C1) + return contexts } @@ -2740,4 +2745,3 @@ ClassMethod BaselineExport(pCommitMessage = "", pPushToRemote = "") As %Status } } -