Cheat sheet for Amos II
Tore Risch
November 1, 2013


Running, saving, and exiting:

What?
Documented where?
Examples
Starting Amos II top loop from console with empty database
Getting started amos2
Saving the database on disk
Saving and quitting
save 'mydb.dmp';
Leaving Amos II top loop Saving and quitting
quit;
Starting Amos II with saved database
Getting started
amos2 mydb.dmp
Starting Amos II from console with Java
Java interface
javaamos
Reading AmosQL statements from a file
Redirect statement
< 'myscript.amosql';

Defining types, functions, properties, and relationships:
What?
Documented where?
Examples
Defining types Types create type Person;
create type Department;
create type Course;
Defining subtype
Types
create type Student under Person;
Defining atomic property
Stored functions
create function name(Person p) -> Charstring nm as stored;
Defining unique property
Cardinality constraints
create function ssn(Person p) -> Number no key as stored;
Defining bag valued property
Stored functions
create function phones(Person p) -> Bag of Number no as stored;
Defining many-one relationship between types
Cardinality constraints
create function dept(Person p) -> Department  d as stored;
Defining many-many relationships between types
Cardinality constraints
create function teaches(Person p) -> Bag of Course c as stored;
Defining one-one relationship between types
Cardinality constraints
create function spouse(Person p) -> Person q key as stored;

Populating and updating the database

What?
Documented where?
Examples
Creating a new object bound to a temporary variable Create objects
Interface variables
create Person instances :tore;
Setting properties
Updates
set name(:tore) = "Tore";
set phone(:tore) = 12345;
Adding a property
Updates
add phone(:tore) = 6789;
Updating sets of values
Updates
add friends(:tore) = p
from Person p
where "Ulla" in name(parents(p));
Creating objects and setting properties
Create objects
create Person(name,ssn,phones)
instances ("Ulla",58102534,321456),("Kalle",65734828,bag(987654,567890));

Querying the database
What?
Documented where?
Examples
Finding an object
Select statement
select p into :kalle from Person p where name(p)="Kalle";
Accessing properties
Function call
phones(:kalle);
select phones(p) from Person p where name(p)="Tore";
String matching
String functions
select name(p) from Person p where like(name(p),"*ll*");

Inverse functions
What?
Documented where?
Examples
Defining an inverse of another function
Derived functions
create function personNamed(Charstring nm) -> Bag of Person p
as select p where name(p)=nm;
Updating inverse functions
Updates
create Person instances :ville;
add personNamed("Ville") = :ville;

Help
What?
Documented where?
Examples
Function documentation Searching source code
apropos("qrt");
doc("qrt");
sourcecode("sqrt");
doc(apropos("nearest"));
sourcecode(apropos("qrt"));
Functions whose source code match pattern
Searching source code
select source_text(f) from Function f , where like(source_text(f),"*sqrt(*");
Command line help
Getting started
amos2 -h
javaamos -h
Current file folder
Accessing data in files
pwd();
cd("..");
Files in current file folder (matching pattern)
Accessing data in files
dir(".");
dir(".","*.txt");