View Single Post
The bare elements might look something like this:

Code:
property pstrDBPath : "~/Library/Caches/com.omnigroup.OmniFocus/OmniFocusDatabase2"
property pEOR : "<eor>"
property pstrFieldDelimiter : "<fld>"

property plstResults : {}

-- ADJUST THE LIST OF FIELDS REQUIRED, AND THE SORT ORDER ...
set strSQL to "select status, name from projectInfo p join task t on p.pk=t.projectInfo  order by status, name"

-- Specifically PROJECT fields:
-- containsSingletonActions	integer
-- folder	text
-- folderEffectiveActive	integer
-- lastReviewDate	timestamp
-- minimumDueDate	timestamp
-- nextReviewDate	timestamp
-- nextTask	text
-- numberOfAvailableTasks	integer
-- numberOfDueSoonTasks	integer
-- numberOfOverdueTasks	integer
-- numberOfRemainingTasks	integer
-- reviewRepetitionString	text
-- status	text
-- task	text
-- taskBlocked	integer
-- taskBlockedByFutureStartDate	integer
-- taskDateToStart	timestamp

-- Fields shared by projects and task
-- blocked	integer
-- blockedByFutureStartDate	integer
-- childrenCount	integer
-- childrenCountAvailable	integer
-- childrenCountCompleted	integer
-- completeWhenChildrenComplete	integer
-- containingProjectContainsSingletons	integer
-- containingProjectInfo	text
-- containsNextTask	integer
-- context	text
-- creationOrdinal	integer
-- dateAdded	timestamp
-- dateCompleted	timestamp
-- dateDue	timestamp
-- dateModified	timestamp
-- dateToStart	timestamp
-- effectiveContainingProjectInfoActive	integer
-- effectiveDateDue	timestamp
-- effectiveDateToStart	timestamp
-- effectiveFlagged	integer
-- estimatedMinutes	integer
-- flagged	integer
-- hasCompletedDescendant	integer
-- hasFlaggedTaskInTree	integer
-- hasUnestimatedLeafTaskInTree	integer
-- inInbox	integer
-- isDueSoon	integer
-- isOverdue	integer
-- maximumEstimateInTree	integer
-- minimumEstimateInTree	integer
-- name	text
-- nextTaskOfProjectInfo	text
-- noteXMLData	blob
-- parent	text
-- persistentIdentifier	text
-- projectInfo	text
-- rank	integer
-- repetitionString	text
-- sequential	integer


RunSQL(strSQL)

on RunSQL(strSQL)
	strSQL
	set strCmd to "sqlite3 -separator '" & pstrFieldDelimiter & "' " & pstrDBPath & space & quoted form of strSQL
	set text item delimiters to pEOR & return -- strip out the end of line \r as well as the record delimiter
	set plstResults to (paragraphs of (do shell script strCmd))
	
	set text item delimiters to pstrFieldDelimiter
	repeat with i from 1 to length of plstResults
		set item i of plstResults to text items of (item i of plstResults)
	end repeat
	set text item delimiters to space
end RunSQL


-- Do something with plstResults (a list of records, each of which is a list of fields)
set str to ""
set text item delimiters to tab
repeat with i from 1 to length of plstResults
	set str to (str & (item i of plstResults) as string) & return
end repeat

set text item delimiters to space
display dialog str