Data Transformations Inc.

(A few pieces of interesting code written for clients or ourselves)

DBA work and database tuning can be interesting, but writing good code is the basis for all computer work.

Remember: there is no such thing as a good designer who is not a good programmer.

DB2/Oracle Data Compare Utility: This Java app compares ALL data (meaning all columns in as many rows as you specify) in corresponding DB2 and Oracle Tables. Such data comparison is frequently required for database conversion or replication projects. Rows from pairs of tables being compared are sorted based on programmatic discovery of a primary key or unique index.

Fast Oracle Unload (for later DB2 load) Utility: This OCI C++ program rapidly (1000 row fetch blocks) unloads Oracle data into delimited files for later load into DB2. A DB2 (for Unix) Load statement is also built.

DB2 Sockets Server: This application was created to solve the problem that DB2 7 does not allow SQL INSERT's to occur under the auspices of a SELECT. Thus, if a DB2 UDF (user defined SQL function) needs to insert into a DB2 table, it cannot, since the UDF was invoked via some sort of SELECT against the table. This sockets server listens on a port, to insert into DB2 (via RRSAF), using normal Sockets server multithreading (via MTF) architecture. An IPC version of this server was also created.

Java Numeric Editor: This non-gui (to make it more versatile) Java code is what all numeric editors should be. Why shouldn't commas be allowed, etc. You pass the text String (which the user entered in your JTextField or whatever), along with the permitted number of digits to the left and to the right of the decimal point, as well as whether negatives are allowed, and I tell you whether the number "passed" the edit, and give it to you as a Double or an Integer, and also as a masked displayable field (commas and all). This is deployable as a bean.

XML/CORBA Relational Data Replicator: This pair of Java applications function as follows:
1. The CORBA client app passes an SQL Select statement you enter to the CORBA Server.
2. The CORBA server app receives the Select statement, and fetches from the table involved.
3. The CORBA server app places both metadata and the data fetched from the particular table into a zipped XML stream which is passed back to the CORBA client.
4. The CORBA client app parses the XML and does SQL Inserts into the table on its end with the same name.

Web Page Reader: This Visual C++ batch app reads whatever page or pages you want from a URL address. Programmatically parsing and extracting data from web site pages has many uses.

CGI and ISAPI SQL Query Utilities: These are C++ programs. The ISAPI one uses ODBC, the CGI one uses Oracle OCI.

Lots of Numbers: Suppose you have to store thousands of numbers for a given database primary key. Suppose your application must read all of these numbers when processing this key. One way to do it is to store these numbers as a zipped data stream into a BLOB type column. These Java routines place your giant array of Doubles into the database, or populate the Java array from the database.

Java Obfuscator: This program reads and writes Java source code, and turns all global and local variables into nonsense names, thus rendering reverse compiles almost worthless.

Generate C language host variable struct's for Oracle Schema: This program creates a set of host variable C/C++ structures for all tables in a given schema. This is kind of like DB2's DCLGEN utility, but it works at a schema level.

DB2 DSN1COPY Generator: This java program accepts many parameters, then generates DSN1COPY JCL for database to database DSN1COPY JCL. It can generate either VSAM to VSAM or Image Copy to VSAM JCL. DSN1COPY is very fast and useful for some replication needs.

C++ Oracle Fast Loader: This program takes advantage of Oracle's Direct Path Load API (a feature of Oracle 8's OCI enhancements). Either a file of delimited data, or a CORBA stream of delimited data, are placed into the Oracle table just as if sqlldr had been run with the DIRECT PATH option (much faster than insert statements).

Back to Corporate Information