The query plan contains the following information about how OpenEdge extracts information for the query:

  • Procedure name and line number where the query started:
    • For dynamically opened queries, this is the QUERY-PREPARE() method
    • For statically opened queries, this is the OPEN QUERY statement
    • For static PRESELECT and FOR statements, this is the top of the FOR or REPEAT/DO PRESELECT block.
  • Query ID, the query's identifier.
    Note: A Query ID is used to group all the log entries for a given query between the time the query is open and then closed. The Query ID may remain the same for a given query if it’s opened multiple times, but that is not guaranteed. The Query ID is only guaranteed to be the same while the query is executing..
  • For statically and dynamically opened queries, a string representation of the query handle, and the name of the query (if available).
  • Whether the query is a FOR statement, a static PRESELECT statement, a statically opened query, or dynamically opened query.
    • For a join performed on the server, Server-side join is written after the type.
  • For dynamically opened queries, the PREPARE-STRING.
  • When the query was prepared:
    • For FOR and static PRESELECT statements, and statically opened queries, this is at compile time. Query information logging will report "Prepared at Compile Time".
    • For dynamically opened queries, this is at run time. Query information logging will report "Prepared at Runtime".
  • Whether the client is performing sorting.
  • Whether this is a SCROLLING query, and whether it uses INDEXED-REPOSITION.
  • Table and index information for each table used in the query. The index information that query information logging provides, such as the INDEX-INFORMATION attribute of the query object handle, is already available within ABL. To get more complete index information, use COMPILE XREF. For more information on indices, see Identify indices.
  • Whether the query uses PRESELECT. Using the PRESELECT keyword in a dynamically opened query has the same effect as the static PRESELECT, that is, it builds a preselected list of records.
  • The time it takes to prepare dynamically opened queries.

OpenEdge logs and collates query plan information at specific times, based on query type, as follows:

  • On a FOR statement, after the top of the FOR statement block executes
  • On a statically opened query, after the OPEN QUERY statement executes
  • On a dynamically opened query, after the QUERY-PREPARE() method of the query handle executes
  • On the static PRESELECT statement, after the top of the REPEAT | DO PRESELECT block executes