Skip to content

Useful or useless? Follow on post …

23-Feb-10

Way back in May last year I experimented with some IMA tables that showed data types and operators defined in the DBMS.  Further poking around and a table for a list of the function instances is available,

drop ima_dbms_fis;
\p\g
register table ima_dbms_fis (
        server varchar(64) not null not default is
                'SERVER',
        id integer4 not null not default is
                'exp.adf.adg.fi_id',
        complement integer4 not null not default is
                'exp.adf.adg.fi_cmplmnt',
        type varchar(20) not null not default is
                'exp.adf.adg.fi_type',
        flags integer4 not null not default is
                'exp.adf.adg.fi_flags',
        opid integer4 not null not default is
                'exp.adf.adg.fi_opid',
        args integer4 not null not default is
                'exp.adf.adg.fi_numargs',
        dtresult integer4 not null not default is
                'exp.adf.adg.fi_dtresult',
        dtarg1 integer4 not null not default is
                'exp.adf.adg.fi_dtarg1',
        dtarg2 integer4 not null not default is
                'exp.adf.adg.fi_dtarg2',
        dtarg3 integer4 not null not default is
                'exp.adf.adg.fi_dtarg3',
        dtarg4 integer4 not null not default is
                'exp.adf.adg.fi_dtarg4'
)
as import from 'tables'
with dbms = IMA,
structure = sortkeyed,
key = (server);
\p\g
grant all on ima_dbms_fis to ingres;
\p\g
grant select on ima_dbms_fis to public;
\p\g

Adding this table to ima_dbms_types and ima_dbms_operators adds the ability to retrieve the list of functions and their signatures.  The query makes use of an internal function iitypename which translates the numeric type code into a name.

select
    a.name,
    case when a.type='COMPARISON' then
        trim(iitypename(b.dtresult)) + ' = ( ' +
        trim(iitypename(b.dtarg1)) + ' ' +
        a.name + ' ' +
        trim(iitypename(b.dtarg2)) + ' )'
        when a.type='OPERATOR' then
        trim(iitypename(b.dtresult)) + ' = ( ' +
        trim(iitypename(b.dtarg1)) + ' ' +
        a.name + ' ' +
        trim(iitypename(b.dtarg2)) + ' )'
    else
        trim(iitypename(b.dtresult)) + ' = ' +
        a.name + '( ' +
            case when b.dtarg1 != '' then trim(iitypename(b.dtarg1)) else '' end +
            case when b.dtarg2 != '' then ', ' + trim(iitypename(b.dtarg2)) else '' end +
            case when b.dtarg3 != '' then ', ' + trim(iitypename(b.dtarg3)) else '' end +
            case when b.dtarg4 != '' then ', ' + trim(iitypename(b.dtarg4)) else '' end
        + ' )'
    end as signature
from
    ima_dbms_operators a,
    ima_dbms_fis b
where
    a.opid = b.opid
group by a.name, 2
order by a.name

Some sample output from this query:

|name                          |signature                       |
|soundex                       |char = soundex( text )          |
|soundex                       |char = soundex( varchar )       |
|sqrt                          |float = sqrt( float )           |
|squeeze                       |nvarchar = squeeze( nchar )     |
|squeeze                       |nvarchar = squeeze( nvarchar )  |
|squeeze                       |text = squeeze( c )             |

So in answer to my own question; yes, it is useful.  I’ll be trying this on an IngresGeospatial build when I get my hands on one.

  • Share/Bookmark

Button clicks do nothing in Ingres Database Workbench, Eclipse and its derivatives

04-Feb-10

On some distributions of Linux when running Eclipse and applications derived from Eclipse the buttons on dialogs whilst accepting clicks do not seem to do anything.

After some minutes of frustration and even more minutes searching for an answer on Google I found this https://bugs.eclipse.org/bugs/show_bug.cgi?id=291257 Any way the temporary solution is to set the environment variable GDK_NATIVE_WINDOWS to 1 before invoking the Eclipse launcher.  For example, use a script that implements the following:

#!/bin/sh
export GDK_NATIVE_WINDOWS=1
/usr/local/Eclipse/eclipse/eclipse

Another workaround would be to try using the keyboard’s space bar to make a button selection, but this gets a bit tedious.

Alternatively wait patiently for the advent of 3.6.

  • Share/Bookmark

Every journey begins with a single step

01-Dec-09

Have you ever had to create a development stack on a machine from scratch to develop on or to check out a new technology?

You have?  Then you must have suffered some of the same frustrations and annoyances of ensuring that the prerequisites and dependencies of each component are satisfied; ending up with downloading some huge quantity of software. The plethora of download, installation and configuration steps required just to get to the starting point can be enough to dissuade all but the most tenacious.
The helpful people at Exadel have taken those many steps to get to the starting point and created an Amazon Machine Image (AMI) called Cloud in a box that includes all the components to create Rich Internet Applications (RIA). With an Amazon Web Services (AWS) account you can launch an instance of the image and take your first step to being productive.  Read the blog post about it RIA on the Cloud with RichFaces and Ingres and register for a free account on the Exadel Web site for more detailed instructions.

  • Share/Bookmark

Jira 4.0

13-Oct-09

Those nice people at Atlassian have another starter introductory offer http://www.atlassian.com/starter/.  Not being a person to look a gift horse in the mouth, and already using and evaluation of Jira 3.12 with Ingres I decided to put my hand in my pocket.

I’ve updated the scripts and the notes to get Jira working with Ingres and uploaded them to the the Jira issue [#JRA-6150].  As you’ll notice there were no plans to support Ingres a year ago. With the current happenings in the market I wonder if that has changed.

During my last foray into this arena I got to meet Sarat Pediredla who help me get Ingres working with Fixx.  With the release of Ingres 9.3 I’ll have to see if Sarat would consider including Ingres out-of-the-box.

  • Share/Bookmark

Hello, Eclipse calling …

12-Oct-09

A follow on post on setting up the Eclipse Communications Framework (ECF).

If like me you have to work and communicate whilst connected to private systems, but from time-to-time need to collaborate with developers who are not privy to those systems then this article http://ecf1.osuosl.org/updateReleasedSiteInstructions.html may help.  It describes how to install a plug-in into the Eclipse IDE that enables it to use the Skype API as an instant messaging provider.

Using Galileo SR1 on Windows XP I found that selecting Skype directly from the Connection to Provider button did not establish after installation and choosing Skype from the dialog offered more success.  However, once Eclipse had been restarted all was again right with the world.

  • Share/Bookmark

Learning to share

07-Oct-09

Have you ever needed a discussion with a colleague or a mentor whilst you were coding?  Tried to in an instant messenger conversation and found switching between your editor and IM client frustrating?

There is an project within Eclipse called the Eclipse Communication Framework (ECF) that transforms the Eclipse IDE into a instant collaboration tool that includes shared editing.  The shared editing feature in ECF allows multiple contributors to make simultaneous edits and differentiates it from other tools where each contributor needs to hold the

What differentiates the shared editing in ECF with other tools is that multiple contributors can make real time edits simultaneously.

I’ve been working with colleagues who are distributed across the globe looking at some java code so we installed ECF to try shared editing and ended up with more than we expected.

I’m using Eclipse Galileo SR1 and followed the instructions for ECF installation on http://www.eclipse.org/ecf/downloads.php.

To get file sharing an ECF generic server is required for workspace collaboration, installation instructions are on http://wiki.eclipse.org/ECF_Servers and I also followed the section “Starting an ECF Generic Server with java only”.  I updated versions of the jar files using the ones from my updated Eclipse plug-ins:

  • org.eclipse.core.jobs_3.4.100.v20090429-1800.jar
  • org.eclipse.core.runtime.compatibility_3.2.0.v20090413.jar
  • org.eclipse.equinox.app_1.2.0.v20090520-1800.jar
  • org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.jar
  • org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar
  • org.eclipse.osgi.services_3.2.0.v20090520-1800.jar
  • org.eclipse.osgi_3.5.1.R35x_v20090827.jar
  • org.eclipse.ecf.discovery_3.0.0.v20090616-0832.jar
  • org.eclipse.ecf.identity_3.0.0.v20090831-1906.jar
  • org.eclipse.ecf.server.generic_2.0.0.v20090616-0832.jar
  • org.eclipse.ecf.provider_2.0.0.v20090616-0832.jar
  • org.eclipse.ecf.sharedobject_2.0.0.v20090616-0832.jar
  • org.eclipse.ecf_3.0.0.v20090831-1906.jar

I also created a simple server.xml file for changing the listening port number to facilitate navigation through firewalls.
Assuming JRE, paths and permissions are already configured I start the server using this script created based on the instructions.

#!/bin/bash
HOME=/home/eclipse
LOG=.
java -Dfile.encoding=ISO-8859-1 -classpath ${HOME}/plugins/org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.jar:\
${HOME}/plugins/org.eclipse.core.runtime.compatibility_3.2.0.v20090413.jar:\
${HOME}/plugins/org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar:\
${HOME}/plugins/org.eclipse.osgi.services_3.2.0.v20090520-1800.jar:\
${HOME}/plugins/org.eclipse.osgi_3.5.1.R35x_v20090827.jar:\
${HOME}/plugins/org.eclipse.core.jobs_3.4.100.v20090429-1800.jar:\
${HOME}/plugins/org.eclipse.equinox.app_1.2.0.v20090520-1800.jar:\
${HOME}/plugins/org.eclipse.ecf.discovery_3.0.0.v20090616-0832.jar:\
${HOME}/plugins/org.eclipse.ecf.identity_3.0.0.v20090831-1906.jar:\
${HOME}/plugins/org.eclipse.ecf.server.generic_2.0.0.v20090616-0832.jar:\
${HOME}/plugins/org.eclipse.ecf.provider_2.0.0.v20090616-0832.jar:\
${HOME}/plugins/org.eclipse.ecf.sharedobject_2.0.0.v20090616-0832.jar:\
${HOME}/plugins/org.eclipse.ecf_3.0.0.v20090831-1906.jar\
 org.eclipse.ecf.server.generic.app.ServerApplication -c ${HOME}/server.xml > ${LOG}/ecf-server.log 2>&1 &

Once the server is running connect to it from Eclipse using the collaboration icon.  A collaboration view is opened with the members of the session ready in a group chat .

To make shared edits to a file; open the file in the editor, right click in the editor pane and select the context menu option Share Editor With and select the name of a collaborating editor, both of you can start editing.

  • Share/Bookmark

More time flies when you’re distracted!

29-Sep-09

I put down my pen (keyboard) and looked away from the blog and when I looked up three months have passed and I have been remiss at writing articles.  Trying to decide on (what I think are) interesting articles is very taxing on my diminishing grey cells and I have to allocate more of them to be creative.

A couple of weeks back we had an inaugural meeting with the contributors from UCSOP supporting the Ingres project.  One of the primary projects is to use of Ingres geospatial support as the backing database for the OpenLayers plug-in in Drupal.  A few of the team travelled to Toronto for a face-to-face meeting and seem to have enjoyed their first experiences with Ingres.

Yesterday I sat-in on the preliminary presentations for the Ingres OpenROAD Code Sprint taking place in the European headquarters.  My interest was the processes employed to make the code and tools available to the participants and then to introduce the working practices of making a code contribution and I took away a few ideas.

Most of the past few months has been spent on working on issues ready for the impending Ingres 9.3 release. Some of which involved reading byte-code and assembler to document a compiler bug.

Much has been going on since my last post but most notable from the Emerging Technologies Team were:

More catching-up later, but hopefully not three months :)

  • Share/Bookmark

UK IUA Conference 2009

15-Jun-09

Another successful and worthwhile conference hosted by the UK Ingres User Association wrapped up Tuesday evening following a day cram packed with keynotes speeches and presentations.  Most notably, this year’s keynote speakers were Roger Burqhart, Phillip Andrew from RedHat and Dr. Ian Howells from Alfresco each with a similar message; Open source is a key influence in the New Economics of IT.  The most poignant part of the message was that in the current economic climate a subscription based payment model releases funds in a restrictive IT budget earmarked for software licenses for delivering new projects.  The subscription payment moves purchasing software from a capital expenditure to an operational expenditure.

Emma McGrattan reported on the preceding code sprint some details of which are here http://blogs.planetingres.org/notnull/2009/06/10/ingres-code-sprint-09/ and Bill Maimone gave a glimpse of some of the projects that are currently in development both internally and in conjunction with the community.  His live demonstration was hampered by Windows but he showed a new table structure type which running on a laptop out performed MS SQL Server running on a large server environment.  Other developments include MVCC and long object names, more available at http://community.ingres.com/forum/blogs/stephenb/4-whats-happening-dbms-group.html.

In a amended plenary agenda, Rick van der Lans was presented with an award for ‘Contribution to the Ingres Community’ and was available to autograph copies of the newest addition to the Ingres bookshelf for over 20 years http://www.lulu.com/content/paperback-book/the-sql-guide-to-ingres/6608333.

The afternoon breakout agenda contained more presentations than one person could attend.  I chose !EasyIngres, Multiple Simultaneous Assignment, Ingres 9.2 features and Ingres 9.3 and roadmap.

!EasyIngres a simple pre-configured bundle of the components required to start developing with PHP on Windows.  A community development mentored by Bruno Bompar; the project is starting to look at a similar Linux bundle.

Multiple Simultaneous Assignment a presentation on the research being carried out by Adrian Hudnott at Warwick University.  I attended this presentation despite being warned by colleagues that this presentation would make my brain hurt and I can confirm that it did indeed make my brain hurt.

Doug Inkster presented the new features available in Ingres 9.2 and some of the new features in 9.3.  Features such as cached dynamic queries and table auto structure.  Cached dynamic queries takes a prepared query and hashes the query text and uses it to identify a cached query plan removing the need to optimize the query again. Of particular benefit for queries which have long compilation times and short execution times.

Table auto structure implements a different default table structure and enforcement of primary keys.  The default table structure is heap and unique constraints are enforced with a secondary index.  With table auto structure enabled during a CREATE TABLE statement the primary key or unique constraint is used for a B-tree base table structure removing the need for the secondary index.  Previously this would have been achieved using the MODIFY and ALTER TABLE statements after the table had been created.

For the 9.3 and beyond presentation by Christine Normile, I attempted to keep notes on the community wiki http://community.ingres.com/wiki/UK_IUA_2009#9.4_Features and live on IRC #ingres logs available http://irc.planetingres.org/%23ingres.2009-06-09.log.html.

The conference closed with the announcement that next year’s conference will start on June 08 2010 and maybe a 2 day event.

I hope to see you all there.

  • Share/Bookmark

Ingres Code Sprint 09

10-Jun-09

Following the popularity and attendance at last year’s code sprint a repeat of the event was held on the two days prior to the UK IUA.  The objective of the event was to introduce, and in some cases re-introduce, the sprinters to the Ingres source code and build environment; either a pre-configured VMWare virtual machine provided on a flash drive or the same image running as a machine in Amazon EC2 if required.

Projects compiled from the community and from other sources were considered and ranked according to the expertise in the room.

In no particular order they are:

  • Improved SOUNDEX() function Daitch Mokotoff
  • Default to enable command history in terminal monitor on Linux and UNIX
  • Drupal with Ingres running in Amazon EC2
  • Pull ABF parser into the terminal monitor
  • CASE statements in ABF
  • IF statements within the terminal monitor
  • Rename Column
  • Bit column
  • optimizedb from within SQL
  • createdb from within SQL (Paul and Alex)
  • Online sysmod
  • DBfunctions as well as db procedures.   Difference between procedures only return a status
  • Storing a QEP so that you can reference it later
  • Renamedb
  • ckpdb – include the ability to use bzip2/gzip for compressed checkpoints
  • Incremental checkpoint
  • copydb with no logging
  • Utility to map process ids to gcc port numbers
  • List databases that you don’t want to use no logging
  • SQL Terminal monitor \s[hell] syntax to be extended to: \s[hell] [/full/path/to/file|{shell command;...}]

Projects were assigned and investigated and were quickly excluded if proved more challenging and time consuming than the available two days.  Look out for the design documents for some of the implementation coming soon, take a look at the tickets from Jun 7 and 8 at http://bugs.ingres.com/timeline.

I worked with Roy Simon from Boarding Data A/S, taking a copy Drupal 6.1 which included updates for using Ingres built from the iuasprint09 SVN branch as its repository.  We also built the Ingres PHP driver with the latest patch.

All of the pre-requisites were installed and configurations updated so that when the machine is started, Ingres is started as a service and Drupal’s installation wizard is available by directing a Web browser to the Drupal Web page.  Once we had it running correctly, I used the Amazon Web Services (AWS) plug-in in Eclipse and created an Amazon Machine Image (AMI).

Although more an exercise in packaging than coding it was still satisfying to launch a machine in the Amazon Cloud and just start using it.

These early sprints are a way to have a guided tour of the Ingres source code with people who work with it every day. I look forward to seeing you at the next one, which may be before the next IUA 08/Jun/2010.

  • Share/Bookmark

Vote now

23-May-09

2009 Community Choice Awards

Nominate your favourite open source projects. Click the link and get voting ….

  • Share/Bookmark