Skip to content

UK IUA Spring Conference June 2008

25-Jun-08

This year’s conference was preceded by an experimental three day development code sprint. Read about the sprint, A Sprint to the Finish.

On the day of the conference the first half plenary speakers were Roy Hann, Simon Catlin, Emma McGrattan and Joe Kronk.

Roy focused on two topics, conference organization and community communications. There are now many channels for communication with the community and he is concerned about its potential dilution. A straw poll of the audience showed that only a handful of attendees didn’t use one of these channels. Conference venue and organization suffered some early setbacks and at one point was in danger of being cancelled. I for one am glad that it wasn’t.

Simon, a new member of the Ingres team, introduced himself to the community and highlighted the value of the Ingres proposition and the growing inertia of new business.

Emma reported on the Ingres DBMS development sprint and attempted to demonstrate the raw features all integrated into the one vitrual machine environment on her laptop; it is a tall order to demonstrate some things that aren’t usually demonstrable.
Some of the features:
Row auditing - add security auditing to insert, update and remove select filtering to audit everything.
Shuffled sequences - unique numeric values allocated in an irregular distribution.
copydb/unloaddb - align the command line parameters accepted both utilities.
Incremental ckpdb - proof of concept
trace points - enable logstat dump into dbmslog.
column rename - ALTER TABLE table_name RENAME COLUMN old_column TO new_column

I enjoyed the sprint and as the first was invaluable in imparting some knowledge about the Ingres source tree. I believe that the virtual machine that was used is to be made available from somewhere.

Joe reported on the Ingres OpenROAD development sprint and demonstrated some new additions to the Workbench and the runtime.
Some of the features:
Populated select field - modify appearance and behaviour by changing properties.
Resizable workbench window - The developer IDE was of fixed size is now fully resizeable.
Dockable workbench windows - Windows within the IDE can now be undocked.
Peristed workbench customization - Changes to the IDE are retained between restarts

The afternoon was divided into a packed five tracks and from what I could tell the presentations were well attended. I personally attended presentation by Rick van der Lans on the syntactic and semantic differences when porting applications between DBMS server. I spoke with him after the conference and mentioned the possibility of running an appliance track in the Red Stone Innovations Ingres Symposium planned for later this year.

I also attended a couple of the BI presentations by Deb Woods from Ingres product management and Andrew Lampitt from Jaspersoft on BI trends. Jaspersoft have just announced Jasperfoft v3 and use and management of Jasperserver has been enhanced so that more tasks can be completed all from the Web interface.

I couldn’t resist attending the IMA presentation by Mike Flower; an introduction to IMA to showing some of its possibilities. Since then we’ve discussed revamping it or adding a more in-depth look at IMA.

The conference came to a conclusion following the Q&A but the evening continued into the bar and for some even the West End.

Make a note in your diary, probably with a sprint preceding it.
UK IUA 2009 will be held on Tuesday June 9, 2009
Go to http://www.iua.org.uk/member/signup.php?product_id=1&hide_paysys=free to join the mailing list.

Time and tide wait for no one

24-Jun-08

Has it really been 8 weeks since I last visited this page? Since my return from the engineering summit it feels like I’ve been swimming against the tide working frantically with my colleagues to make ready the Enterprise Content Management (ECM) appliance (shameless plug: powered by Ingres, rPath and Alfresco) for the Early Adopter Programme (EAP).

When talking about the ECM appliance with others I recognise the misunderstanding of a couple of terms that are used interchangeably, appliance and bundle.

  • A bundle is a collection of application software that is installed together onto an existing operating system; software updates and maintenance are then the responsibility of the provider for each software component, which are probably not coordinated.
  • A software appliance is a collection of software that is integrated with the operating system providing dedicated functionality. Updates and maintenance are deployed in a single stream.

Ingres supplies both bundles and appliances for ECM and the terms should not be confused. I Hope that’s cleared it up.

Ingres Engineering Summit 2008

28-Apr-08

WOW! What a week.

I was lucky enough to participate in the Ingres Engineering Summit 2008 and I don’t think that a short blog could really do it justice. Ingres Engineering is distributed around the globe and this was an ideal opportunity to meet up and catch up. The summit was held in the Punta Cana, Dominican Republic, a really beautiful spot with great beaches, so they tell me :) and this year’s summit included a number of partners and academics who presented on a wide variety of topics. Jamie and Lisa who organized us all did an outstanding job, above and beyond the call of duty.

The engineering focus was on community and how to better engage it, interspersed with some very interesting presentations from our guests. Hugh Darwen presented on Project D, some academic work being undertaken by a doctorate student at the University of Warwick. CWI presented some interesting data for MonetDB/X100. Andy Grimm from rPath gave an interesting overview of their appliance technology and was able to help Paul Spencer from DM Solutions create one for MapServer.

A group of us joined forces to try and build a python driver for Ingres that uses the Data Access Message Protocol (DAMP) to communicate with the Data Access Server (DAS) and eliminate the need for the Ingres Net component. As part of this project we’ll also try out Mercurial for source control in a distributed environment. Unfortunately we didn’t get to show anything working but we’ll persevere with it.

The community related discussions can only be described as lively but they were thought provoking. Having worked with a few open source partners I know what I like; it’s just a matter of convincing the others :)

There was also a discussion of increasing the size of identifiers from the current 32 characters to 512. The change is simple but the impact will be quite widespread. After many suggestions of phased implementations and support for long and short names it was decided that we’d make a branch of the community code and make the change there; that would at least give everyone a working version that they could try and report back on. The SVN branch is ingres-main-long-identifiers from the ticket #23.

No doubt there will be pictures of us at work, rest and play; the links are starting to cascade into my in-box. If you see any that look like me, it is probably someone with an uncanny resemblance to yours truly.

I’m looking forward to the next one already.

Google Summer of Code (GSoC) 2008

28-Mar-08

This year Ingres is participating organization in GSoC, an event sponsored by Google that encourages students, of all levels, to get involved with Open Source.  A summary of some proposed projects can be found here and here, any interested candidates need to get their skates on as the deadline for application is March 31, register and get more information at Guide to the GSoC Web App for Student Applicants.  The

I have the privilege of being accepted as a mentor for Ingres.  All of the project mentors have been introducing themselves on the mentors mailing list and there must be a few hundred of us.  What strikes me, from the brief biographies, is the number of people who manage to dedicate their personal time for their projects.  I have to take my hat off to them.  Any Ingres community members who would like to mentor a project can register and get more information at  Guide to the GSoC Web App for Mentors and Organization Administrators.

I’m really looking forward to seeing what develops :)

Cached Dynamic Query

22-Mar-08

It has been a very busy few months and the appliance team moves apace and is continuously subjected to requests for new applications and Ingres releases.

With the latest release of Ingres one of the new features is cached dynamic query plans; that will benefit any application that uses prepared dynamic queries.

Ingres has long had the ability to cache query plans for stored procedures and from queries in embedded SQL programs using the REPEATED keyword. The latter has meant that queries are identified and tagged in the application. For applications that are written using a driver for example, ODBC, JDBC, .NET and PHP it hasn’t been possible, until now, to use store a query plan for reuse. This feature benefits queries that take a long time to optimize and compile (for a particular value of long) and obviously the more times the same query is executed the better the benefit of caching as the optimization and compilation time is amortized over the number of executions.

As this is the first implementation it is disabled by default and the scope is severely limited. For now it is implemented only for selects and for queries that require greedy enumeration.

To give an example; the application that I am using generates queries for its underlying database and I have no control over it. These queries although complex return a very low volume of results. Looking at the query plans there are between 50 and 80 candidate tables and indices. Without greedy enumeration these queries don’t even compile, not only that but these queries are executed hundreds of times. With greedy enumeration the query must complete compilation, before that there is only a partial plan so setting join op time out won’t help.

So here is how you can control caching:

CBF - ii.hostname.dbms.*.cache_dynamic: ON or OFF

SQL - server control: set [no]cache_dynamic - alter the current server setting including overriding the CBF parameter.
- session control: set session [no]cache_dynamic - enable/disable query caching within a session
- status: select dbmsinfo('cache_dynamic') - Y or N
- status imadb: select rqp_text from ima_qsf_rqp shows query text for cached text objects for dynamic cursors.

Until cached dynamic query plans I had to suffer in silence. I’d be interested if anyone else finds the feature a benefit, if you do let me know.

ingstatus

24-Jan-08

I’ve been clearing out some old files and found an example of ingstatus for Windows. Ingstatus is a utility that is available on Linux and UNIX. This example uses the functions available in the little known library iilibutil.dll. I’ve put it on the community site on the ingstatus page.

The iilibutil library contains some useful functions for incorporating some Ingres management features into programs. These functions need updating and documenting, but could form the foundation of a management API.

Something that could be considered for inclusion in the Ingres Janitor’s project.

Rapid

21-Jan-08

It now seems a very long time ago, but last November I took part in a team meeting where we discussed how to evangelize Ingres within our own sphere of influence. Projects similar to the Playstation 3 port and the Eclipse DTP were mentioned as innovative. During the meeting I was asked to take a look at OpenLaszlo to try and modify one of their demonstration applications to use Ingres as a data source.

Being a tomcat, JSP and OpenLaszlo nubbie I managed to get the Amazon Store demo to use Ingres for the checkout and shipping address details. A couple of JSPs a two line change in OpenLaszlo source and the demo was reading data from Ingres. The code changes took 5 minutes, getting it to work took a little longer. I used OpenLaszlo 4.0.7 for my tests but OpenLaszlo 4.0.8 is now available.

Take a look at the OpenLaszlo source code at the line
<dataset name="dsAddressList" src="data/addresses.xml"/>
<dataset name="dsCreditCardList" src="data/creditcards.xml"/>

These were modified to
<dataset name="dsAddressList" src="/ingdb/getaddress.jsp" request="true" type="http"/>
<dataset name="dsCreditCardList" src="/ingdb/creditcard.jsp" request="true" type="http"/>
Setting request=”true” causes the client to request data each time the query string or the base URL changes.

My initial pages and tomcat configuration is documented on the page “Accessing data from JSP” and contains the simple DDL for the table and some sample data. In this example the database and credentials are embedded in the page. With a little more time I changed the JSP to use the JSTL and configured the tomcat server with a JNDI resource for the database connection. My latest attempt is document on the page “JDBC and JNDI”.

For 2008 the watchword is “Rapid”. Rapid application development and deployment, everything has to happen faster. Using an environment like OpenLaszlo gets part of the way there.

We’ll be looking at subject matter for a development sprint at the forthcoming UK IUA in June. An OpenLaszlo application may be a candidate.

Ingres Sourcerer’s (sic) Apprentice

09-Nov-07

Ingres is starting a project modeled on the Linux Kernel Janitors Project called (for now) the Ingres Janitors Project.  Early indications are that the existing news group comp.databases.ingres and the mailing list info-ingres are going to be used as the vehicle for communications.

Any one who is interested in participating or contributing should visit the links and subscribe.  I’ll be proposing an event to get the project started.  If you have any ideas leave me a comment and I’ll be sure to pass them on.  Maybe this can be something that takes place before or during an Ingres User Association conference.

Business Intelligence Appliance

22-Aug-07

Ingres announces the launch of its Business Intelligence (BI) Appliance built around JasperSoft’s BI suite and Icebreaker itself an integration of rPath Linux and Ingres Database Management Server.

The BI Appliance eliminates barrier entry costs, simplifies deployment and reduces the total cost of ownership.

The Ingres Icebreaker BI Appliance is available to download for a 60-day trial period.

Date time paradox

02-Aug-07

One of the new features included in release 2 of Ingres 2006 was the addition of ISO SQL date (also known as ANSI date), time and interval types to the Ingres date type.

The Ingres date is composed of both a date and a time component which differs from the discrete date and time of the ISO types. Both types are called by the same name DATE which can be the source of confusion.

For example, a table that includes an ISO SQL date column

create table t1 (c1 integer, c2 date);

The following statements fails as the Ingres constant ‘now’ is not valid for an ISO SQL date.
insert into t1 (c1, c2) values (1, ‘now’);
insert into t1 (c1, c2) values (2, ‘today’);

E_US10E5 ‘2007-07-14 00:00:00′ is an invalid format or value for ANSI
date. Please enter a valid date in yyyy-mm-dd format.
(Sun Jul 15 14:01:59 2007)

The use of Ingres constants can be acheived by implicit coercion, using one of the cast functions or using a literal
insert into t1 (c1, c2) values (1, date(’now’));
insert into t1 (c1, c2) values (2, date(’today’));
insert into t1 (c1, c2) values (3, cast(date(’now’) as ansidate));
insert into t1 (c1, c2) values (4, ‘2007-07-31′);

select * from t1;

+-------------+-----------------+
|c1           |c2               |
+-------------+-----------------+
|            1|2007-07-31       |
|            2|2007-07-31       |
|            3|2007-07-31       |
|            4|2007-07-31       |
+-------------+-----------------+

For a table that includes an Ingres date column

create table t2 (c1 integer, c2 date);

insert into t2 (c1, c2) values (1, ‘now’);
insert into t2 (c1, c2) values (2, ‘today’);
insert into t2 (c1, c2) values (3, cast(ansidate(’2007-07-31′) as ingresdate));
insert into t2 (c1, c2) values (4, ansidate(’2007-07-31′));
insert into t2 (c1, c2) values (5, ‘31/07/07′);
insert into t2 (c1, c2) values (6, current_time);

select * from t2;

+-------------+-------------------------+
|c1           |c2                       |
+-------------+-------------------------+
|             1|31-jul-2007 03:49:41    |
|             2|31-jul-2007             |
|             3|31-jul-2007 00:00:00    |
|             4|31-jul-2007 00:00:00    |
|             5|31-jul-2007             |
|             6|31-jul-2007 04:14:40    |
+-------------+-------------------------+

Note that for values of the Ingres date type format of the output is dependent on the II_DATE_FORMAT setting and affects intepretation of date literals for Ingres date values.
You may have also noticed that the ‘create table’ statements looked the same. There is a server configuration parameter ‘date_type_alias’ which determines whether the DBMS server interprets the word ‘date’ as an Ingres date or as an ANSI date. To avoid confusion date types should be declared explicitly in column specifications.

Seasoned Ingres users are well aware of the issues of using the same data type for both date and time values but as is evident from the table t2, date values can exist with empty time components but time values cannot have empty date components making time comparisons more challenging.

Consider the table

create table t3 (c1 integer, c2 ingresdate, c3 ingresdate);

insert into t3 values (1, ‘31-Jul-2007 17:00:00′, ‘5 hrs’);
insert into t3 values (2, ‘31-Jul-2007 18:14:00′, ‘5 hrs 45 mins’);
insert into t3 values (3, ‘31-Jul-2007 18:24:00′, ‘4 hrs 21 mins’);
insert into t3 values (4, ‘31-Jul-2007 19:00:00′, ‘4 hrs 59 mins’);
insert into t3 values (5, ‘31-Jul-2007 12:21:00′, ‘6 hrs’);
insert into t3 values (6, ‘31-Jul-2007 21:00:00′, ‘3 hrs 1 min’);
insert into t3 values (7, ‘31-Jul-2007 21:00:00′, ‘48 hrs’);

A specific time can be specified using the functions hour(), minute() and second(). For example,

select c1, c2, c3 from t3 where hour(c2) = 18 and minute(c2) = 24

would return the row with the 18:24 time.

+-------------+---------------------+-----------------+
|c1           |c2                   |c3               |
+-------------+---------------------+-----------------+
|            3|31-jul-2007 18:24:00 |4 hrs 21 mins    |
+-------------+---------------------+-----------------+

Select the rows in the table where the sum of the date and the interval will rollover to the next day.
select c1, c2, c3 from t3 where date_trunc(’day’, c2 + c3) > date_trunc(’day’, c2);

+-------------+---------------------+-----------------+
|c1           |c2                   |c3               |
+-------------+---------------------+-----------------+
|            6|31-jul-2007 21:00:00 |3 hrs 1 mins     |
|            7|31-jul-2007 21:00:00 |2 days           |
+-------------+---------------------+-----------------+

The ANSI equivalent

create table t4 (c1 integer, c2 time, c3 interval day to second)
insert into t4 values (1, ‘17:00:00′, ‘00 05:00:00′);
insert into t4 values (2, ‘18:14:00′, ‘00 05:45:00′);
insert into t4 values (3, ‘18:24:00′, ‘00 04:21:00′);
insert into t4 values (4, ‘19:00:00′, ‘00 04:59:00′);
insert into t4 values (5, ‘12:21:00′, ‘00 06:00:00′);
insert into t4 values (6, ‘21:00:00′, ‘00 03:01:00′);
insert into t4 values (7, ‘21:00:00′, ‘00 48:00:00′);

A specific time can be specified directly. For example,

select c1, c2, c3 from t3 where c2 = ‘18:24:00′;

+-------------+---------------------+-----------------+
|c1           |c2                   |c3               |
+-------------+---------------------+-----------------+
|            3|18:24:00             |0 04:21:00       |
+-------------+---------------------+-----------------+

Select the rows in the table where an interval causes the time to rollover to the next day. Here we coerce values to Ingres dates and extend the time to include a date component.

select c1, c2, c3 from t4 where interval(’day’, (date(c2) + c3) - date(’today’)) >=1;

+-------------+---------------------+-----------------+
|c1           |c2                   |c3               |
+-------------+---------------------+-----------------+
|            6|21:00:00             |0 03:01:00       |
|            7|21:00:00             |2 00:00:00       |
+-------------+---------------------+-----------------+

I hope that this has offered a brief and superficial glimpse of the date and time types included in Ingres 2006 release 2, for more information see the documentation @ http://docs.ingres.com/sqlref/UnderstandingSQLDataTypes.