beautypg.com

Apple Newton Programmer’s Newton 2.0 (for Newton 2.0) User Manual

Page 443

background image

C H A P T E R 1 1

Data Storage and Retrieval

About Data Storage on Newton Devices

11-11

Querying for Indexed Values

11

Queries can retrieve items according to the presence of one or more index keys and
can test key values as well. A query that tests for the presence or value of an index
key is called an index query.

Soups that have single-slot indexes allow queries to use a single index key to select
soup entries. Detailed information is provided in “Querying on Single-Slot
Indexes” beginning on page 11-39.

Soups that have multiple-slot indexes allow queries to use multiple index keys to
select soup entries. Detailed information is provided in “Querying on Multiple-Slot
Indexes” beginning on page 11-47.

Index queries can be based only on slot names for which an index has been generated.
For example, to select entries according to the presence of the

foo

slot, the soup

that receives the

Query

message must be indexed on the

foo

slot. Entries not

having a

foo

slot are not included in the set of entries referenced by the

foo

index.

Although the entries in the soup are not actually in any particular order themselves,
the index keys associated with them can be sorted in a specific order that is defined
for each NewtonScript data type. Thus, you can envision the contents of an index
as a sequence of entries arranged in key order, as shown in Figure 11-2.

Figure 11-2

An index provides random access and imposes order

The

aSoup

soup shown in Figure 11-2 is indexed on the

foo

slot, which means

that the value of each entry’s

foo

slot is used as its index key. Only those entries

containing a

foo

slot are included in this index. By sorting key values, the index

imposes order on their corresponding soup entries, which are otherwise unordered.

2 3 4 5

Ascending key order

Descending key order

Index on

foo

slot

Store

Soup

1

4

2

3

5

6

{foo:

, ...

}

{foo:

, ...

}

{foo:

, ...

}

{foo:

, ...

}

{bar:

, ...

}

{bar:

, ...

}