Evaluate test data
Some examples for accessing data in an ODABA data base via OShell commands and embedded OSI scripts have been provided within the OShell script shown below in the example. The first lines in the script contain OShell script statements for producing simple statistics. The second part contains embedded OSI script in order to provide more complex statistics. Detailed comments to the example you will find in OShell Script comments.
After creating the Sample project, one may simply call OShell.sh (LINUX) or OShell.cmd (Windows), which have been generated to the project's root directory. When generating other projects, the generated scripts have to be revised in order to check file location for the called .osh script file. OShell allows opening data sources defined in a data catalog or in a configuration file passed to the OShell function. The generated configuration file ode.ini contains data source sections for the resource database (e.g. [Sample_dev]) and the application database (e.g. [Sample_dat]) prefixed with the name of the project created. By default, dictionary and database are expected in the project's root directory. Otherwise, data sources in the ode.ini file have to be updated.
After processing the command passed in the script file, the OShell remains open and the data source is still active. The data collection currently selected is Company. You may enter further OShell commands or q[uit] in order to leave OShell.
cd Sample_dat
cc Company
li
fa p cars.count
fa p employees.count
cc /Employee
count
sf "sex == 'male'"
relativeCount
cc '/Person::Persons'
count
osi do
VARIABLES
int child_count;
int distance = 0, dist = 0;
int min_dist = 100, max_dist = 0;
int dcount = 0;
PROCESS
filter('age > 65 && employee.count == 0');
Message('Persons probably retired (over 65 and not employed): ' + relativeCount);
top();
while ( next() )
child_count += children.count;
Message('Total number of children: ' + child_count);
filter("");
top();
while ( next() )
while ( children.next() ) {
dist = age-children.age;
if ( min_dist >= dist ) min_dist = dist;
if ( max_dist <= dist ) max_dist = dist;
distance += age-children.age;
++dcount;
}
Message('Average age distance between children and parents: ' + distance/dcount);
Message(' Minimum/maximum distance is: ' + (string)min_dist + '/' + (string)max_dist);
end
cc /Company
osi do
VARIABLES
int(10,2) sum_income;
PROCESS
top();
while ( next() ) {
sum_income = 0;
while ( employees.next() )
sum_income += employees.income;
Message('Total income for "' + name + '" is: ' + sum_income);
}
end