Reputation: 81
An app developed in SWIFT in 2019 was working well until iOS 16 upgrade in November. I use SQLITE database and a few tables. Queries without parameters are working well, but the one with an input parameter returns no rows even though there is record in table (I can see it with full query of table). I have reproduced the code below. This is called as with input parameters as follows:
(requestSource: "All", cTrackingNumber: "0705632085943")
func queryAllReceiptTransaction(requestSource: String = "All", cTrackingNumber: String = "All") -> [[String: String]] {
var queryAllReceiptStatement: OpaquePointer? = nil
var queryAllReceiptStatementString: String = ""
var vTrackingNumber: String = ""
var vEmpID: String = ""
var vCarrier: String = ""
var vRecdLocation: String = ""
var vRecdDate: String = ""
var vRecdBy: String = ""
var vDeliveryStatus: String = ""
var vSite: String = ""
var vUploadDate: String = ""
var vUploadFlag: String = ""
var vDownloadTrackingNumber: String = ""
var vDownloadDate: String = ""
var vDownloadFlag: String = ""
var vAttribute1: String = ""
var vAttribute2: String = ""
var vAttribute3: String = ""
var vAttribute4: String = ""
var vAttribute5: String = ""
var transHdrDictAll: [String: String] = [:]
var transHdrArrayAll = Array<Dictionary<String, String>>()
print(" Dec 2 - From queryAllReceiptTransaction method. cTrackingNumber = \(cTrackingNumber)")
if cTrackingNumber == "All" {
queryAllReceiptStatementString = "SELECT TRACKING_NUMBER,EMPLOYEE_ID, CARRIER, RECEIVED_LOCATION, RECEIVED_DATE, RECEIVED_BY, DELIVERY_STATUS, SITE, UPLOAD_DATE, UPLOAD_FLAG, DOWNLOAD_TRACKING_NUMBER, DOWNLOAD_DATE, DOWNLOAD_FLAG, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5 FROM BAE_MT_HEADER"
} else if cTrackingNumber != "All" {
queryAllReceiptStatementString = "SELECT TRACKING_NUMBER,EMPLOYEE_ID, CARRIER, RECEIVED_LOCATION, RECEIVED_DATE, RECEIVED_BY, DELIVERY_STATUS, SITE, UPLOAD_DATE, UPLOAD_FLAG, DOWNLOAD_TRACKING_NUMBER, DOWNLOAD_DATE, DOWNLOAD_FLAG, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5 FROM BAE_MT_HEADER WHERE TRACKING_NUMBER = ?"
}
if sqlite3_prepare_v2(db, queryAllReceiptStatementString, -1, &queryAllReceiptStatement, nil) == SQLITE_OK {
if cTrackingNumber != "All" {
if sqlite3_bind_text(queryAllReceiptStatement, 1, cTrackingNumber, -1, nil) != SQLITE_OK{
let errorBind = String(cString: sqlite3_errmsg(db)!)
print("Error while binding: \(errorBind)")
}
}
while sqlite3_step(queryAllReceiptStatement) == SQLITE_ROW {
let queryResultCol1 = sqlite3_column_text(queryAllReceiptStatement, 0)
vTrackingNumber = String(cString: queryResultCol1!)
let queryResultCol2 = sqlite3_column_text(queryAllReceiptStatement, 1)
vEmpID = String(cString: queryResultCol2!)
let queryResultCol3 = sqlite3_column_text(queryAllReceiptStatement, 2)
vCarrier = String(cString: queryResultCol3!)
let queryResultCol4 = sqlite3_column_text(queryAllReceiptStatement, 3)
vRecdLocation = String(cString: queryResultCol4!)
let queryResultCol5 = sqlite3_column_text(queryAllReceiptStatement, 4)
vRecdDate = String(cString: queryResultCol5!)
let queryResultCol6 = sqlite3_column_text(queryAllReceiptStatement, 5)
vRecdBy = String(cString: queryResultCol6!)
let queryResultCol7 = sqlite3_column_text(queryAllReceiptStatement, 6)
vDeliveryStatus = String(cString: queryResultCol7!)
let queryResultCol8 = sqlite3_column_text(queryAllReceiptStatement, 7)
vSite = String(cString: queryResultCol8!)
if let queryResultCol9 = sqlite3_column_text(queryAllReceiptStatement, 8) {
vUploadDate = String(cString: queryResultCol9)
}
if let queryResultCol10 = sqlite3_column_text(queryAllReceiptStatement, 9) {
vUploadFlag = String(cString: queryResultCol10)
}
if let queryResultCol11 = sqlite3_column_text(queryAllReceiptStatement, 10) {
vDownloadTrackingNumber = String(cString: queryResultCol11)
}
if let queryResultCol12 = sqlite3_column_text(queryAllReceiptStatement, 11) {
vDownloadDate = String(cString: queryResultCol12)
}
if let queryResultCol13 = sqlite3_column_text(queryAllReceiptStatement, 12) {
vDownloadFlag = String(cString: queryResultCol13)
}
if let queryResultCol14 = sqlite3_column_text(queryAllReceiptStatement, 13) {
vAttribute1 = String(cString: queryResultCol14)
}
if let queryResultCol15 = sqlite3_column_text(queryAllReceiptStatement, 14) {
vAttribute2 = String(cString: queryResultCol15)
}
if let queryResultCol16 = sqlite3_column_text(queryAllReceiptStatement, 15) {
vAttribute3 = String(cString: queryResultCol16)
}
if let queryResultCol17 = sqlite3_column_text(queryAllReceiptStatement, 16) {
vAttribute4 = String(cString: queryResultCol17)
}
if let queryResultCol18 = sqlite3_column_text(queryAllReceiptStatement, 17) {
vAttribute5 = String(cString: queryResultCol18)
}
transHdrDictAll["trackingNumber"] = vTrackingNumber
transHdrDictAll["employeeId"] = vEmpID
transHdrDictAll["carrier"] = vCarrier
transHdrDictAll["receivedLocation"] = vRecdLocation
transHdrDictAll["receivedDate"] = vRecdDate
transHdrDictAll["receivedBy"] = vRecdBy
transHdrDictAll["deliveryStatus"] = vDeliveryStatus
//transHdrDictAll["site"] = vSite
//transHdrDictAll["uploadDate"] = vUploadDate
//transHdrDictAll["uploadFlag"] = vUploadFlag
//transHdrDictAll["downloadTrackingNumber"] = vDownloadTrackingNumber
//transHdrDictAll["downloadDate"] = vDownloadDate
//transHdrDictAll["downloadFlag"] = vDownloadFlag
//transHdrDictAll["attribute1"] = vAttribute1
//transHdrDictAll["attribute2"] = vAttribute2
//transHdrDictAll["attribute3"] = vAttribute3
//transHdrDictAll["attribute4"] = vAttribute4
//transHdrDictAll["attribute5"] = vAttribute5
//transHdrDictAll["week"] = weekBucket
// append to array
transHdrArrayAll.append(transHdrDictAll)
//print(" Array details")
//print(transHdrArrayAll)
//vReturnStatus = true
}
/*
sqlite3_reset(queryAllReceiptStatement)
} else {
print ("Query All Receipt Transactions: Error Preparing Query Statement BAE_MT_HEADER")
let errorMessage = String.init(cString: sqlite3_errmsg(db))
print("Error Message = \(errorMessage)")
}
sqlite3_finalize(queryAllReceiptStatement)
return transHdrArrayAll
}
Output in MAC laptop
Successfully opened existing database at /var/mobile/Containers/Data/Application/FC1DB26B-AEDF-48F6-9F03-4A8797A227B2/Documents/MailTrackingDatabase2.sqlite Prtinting from app delegate.... Dec 2 - From queryAllReceiptTransaction method. cTrackingNumber = 0705632085943
[]
Note the two square brackets in the last line. Output is an array, but it comes as blank.
All table columns are defined as VARCHAR with varying sizes like 10,25, etc as needed.
Any help is appreciated
Upvotes: 0
Views: 331
Reputation: 81
I resolved the issue with suggestion from @HangarRash to add SQLITE_TRANSIENT as parameter replacing nil. I also updated the iOS version to 16.1.2, which just popped up for installation.
Upvotes: 1