I am starting on the UDT buddy testing and am trying to understand what happens when a fields change or are added to a class.

What I did was created a Price class with a single double field price, generated the serial version with serialver and then inserted a value into a table.

Then I added a String field for a currencyCode and a function to retrieve it.

I recompiled and tried to regenerate the serialver, which I was surprised stayed the same. Then I inserted another row. when I selected the currency code from the table, it was all pretty nice, and just said it was NULL for the first object.
ij> select getCurrencyCode(pr) from items;
1
----
NULL
USD

2 rows selected

So are changing types all automagical like that or is there typically something that needs to be done as they change?

Below is the sql and final Price class. The first version just had the stuff related to currencyCode missing.


package com.acme.types;

import java.io.Serializable;

public class Price implements Serializable {

    static final long serialVersionUID = -5418678247307617965L;

    double price = 0;
    String currencyCode = "USD";

    public Price(double pr) {
    price = pr;
    }

    public Price (double pr, String cc) {
    price = pr;
    currencyCode = cc;
    }


    public static double getPrice(Price p) {
    return p.price;
    }

    public static String  getCurrencyCode(Price p) {
    return p.currencyCode;
    }

    public static Price newPrice(double pr) {
    return new Price(pr);
    }


    public String toString() {
    return "My price is " +price + "My Currency code is " + currencyCode;

    }
}
--------
connect 'jdbc:derby:wombat;create=true';
CREATE TYPE price
EXTERNAL NAME 'com.acme.types.Price'
LANGUAGE JAVA;

CREATE FUNCTION newprice(pr double) RETURNS Price PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'com.acme.types.Price.newPrice';

CREATE FUNCTION getPrice(pr Price) RETURNS DOUBLE PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'com.acme.types.Price.getPrice';


create table items (name LONG VARCHAR, pr Price);

insert into items values('stuffed bear', newprice(2.0));

-- change type to add currencyCode

CREATE FUNCTION getCurrencyCode(pr Price) RETURNS CHAR(3) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'com.acme.types.Price.getCurrencyCode';


select getCurrencyCode(pr) from items;

Reply via email to