# SELECT Clause

Copyright (c) 2008, 2010 SAP AG and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/

The SELECT clause determines what to extract from the heap dump. To display objects and be able to browse the outgoing references, use the * symbol:

SELECT * FROM java.lang.String

Select specific columns

Alternatively, one can select the fields to be displayed:

SELECT toString(s), s.count, s.value FROM java.lang.String s

The resulting table knows about the underlying object. So you can use the context menu to open further views on the object at hand. Use the @ symbol to access Java attributes and methods of the objects. There are also a number of built-in functions available to extract common information:

SELECT toString(s), s.@usedHeapSize, s.@retainedHeapSize FROM java.lang.String s

The section on Property Accessors contains details on the commonly available attributes.

Provide column names

Use the AS keyword to name the columns:

SELECT toString(s) AS Value, s.@usedHeapSize AS "Shallow Size", s.@retainedHeapSize AS "Retained Size" FROM java.lang.String s

Use the AS RETAINED SET keyword to get the set of objects retained by your selection:

SELECT AS RETAINED SET * FROM java.lang.String

Flatten select items into an object list

Use the OBJECTS to interpret the items in the SELECT clause as objects:

SELECT OBJECTS dominators(s) FROM java.lang.String s

The function dominators() returns an array of objects. Therefore the query returns a list of object lists, i.e. arrays. By using the keyword OBJECTS , we force the OQL to reduce this into a single list of objects.

Select unique objects

Use the DISTINCT keyword to only select unique objects:

SELECT DISTINCT * FROM OBJECTS 0,1,1,2

Use the DISTINCT OBJECTS keyword to only select unique objects from the result of the selected clause:

SELECT DISTINCT OBJECTS classof(s) FROM java.lang.String s

The function classof returns the class object. Of course, all Strings have the same class. The OBJECTS converts the underlying row with a String object and a displayed value of the class object to the object represented by the result of the classof function. Without the DISTINCT OBJECTS keywords, the query would result in a list with as many rows with the same class as there are Strings.

With Memory Analyzer 1.10 or later, DISTINCT also operates without OBJECTS to find items which are distinct. See Wiki: OQL SELECT DISTINCT for further details.

Expressions (experimental, Memory Analyzer 1.4 or later)

Use the expressions for the select item, including string concatenation:

SELECT s.@objectId, s.@objectId * 2, "The object ID is "+@objectId FROM OBJECTS 0,1,1,2 s

With Memory Analyzer 1.4 or later expressions and sub-selects are allowed for select items. More complex expressions may need to be parenthesized. This is currently in the test phase.