This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information

Upgradeprobleme von 2.5.1 auf 2.8.5

Allgemeine Fragen zur Entwicklung von und mit JVx.

Upgradeprobleme von 2.5.1 auf 2.8.5

Postby mzeller » Thu Jan 04, 2024 11:09 am

Hallo,

wir upgraden gerade unsere nicht gerade kleine JVX-Applikation von 2.5.1 (Postgres 9.2) auf 2.8.5 (Postgres 15.3.).

Funktioniert alles großteils recht gut. Dabei sind uns bisher nur folgende Probleme bezügl. backward compatibility untergekommen:

1. Equals

Die Klasse javax.rad.model.condition.Equals verwenden wir für einige Filter. Da haben wir mit Version 2.5.1 als ersten Parameter so Dinge stehen wie "COLX::DATE" oder "CAST(..." oder "EXTRACT(YEAR FROM COLX)". Das alles funktioniert jetzt aber mit Version 2.8.5 nicht mehr, weil hier intern eine Überprüfung auf Sonderzeichen etc passiert. Gibt es hier eine andere schnelle Lösung, ohne dass wir da haufenweise Code umschreiben müssen?

2. Custom Types und Dropdown in UITable

Wir nutzen mit der Postgres viele custom enum types. Mit Version 2.5.1 wurden in UITables diese Spalten standardmäßig als Dropdown-Boxen dargestellt, wo man dann den Typ auswählen konnte. Jetzt sind diese Felder einfache Stringfelder, die aber nicht brauchbar sind. Wo ist hier das Problem?

3. UIDateCellEditor (bzw. Postgres-Typen generell?)

Mit Version 2.5.1 nutzten wir Postgres "time"-Datentypen mit UIDateCellEditor so:
new UIDateCellEditor("HH:mm")
Das funktioniert jetzt nicht mehr, weil der Postgres-"time"-Datentyp scheinbar als String ankommt.

Bitte um Hinweise, wie wir diese Probleme schnell lösen können - das sind keine Einzelfälle, sondern quer durch die ganze Applikation.

Danke
Martin
mzeller
 
Posts: 27
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Upgradeprobleme von 2.5.1 auf 2.8.5

Postby mzeller » Thu Jan 11, 2024 8:19 pm

Leider gibt es in Details immer wieder Probleme.

4. bei 2.5.1 wurden die Selects in der Datenbank mit "select * from" abgesetzt. Jetzt werden die Spaltennamen aus den Metadaten dafür verwendet. Leider haben wir hier historisch den Spaltennamen "table" dabei, der nun ein ungültiges SQL-Statement erzeugt. Gibt es eine Möglichkeit, wo man das alte Verhalten wieder herstellen kann oder dafür sorgen kann, dass problematische Spaltennamen escaped (bei postgres mit double quotes) werden?
mzeller
 
Posts: 27
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Upgradeprobleme von 2.5.1 auf 2.8.5

Postby mzeller » Tue Jan 30, 2024 12:28 pm

Ich führe mal meinen Monolog weiter.

Pkt 1 und 4 konnten wir mit Umschreiben der Applikation für das jvx-Upgrade beheben.

Pkt 2 und ev. auch 3 hängen aber mit einem Problem zusammen, für das es scheinbar keine sinnvolle Lösung gibt???

Unsere Applikation verwendet custom data types in der Postgres-Datenbank, was mit der jvx 2.5.1 kein Problem war. Beim Starten der Applikation mit der Version 2.8.5 können Metadaten aber nicht geladen werden, weil bei einem unbekannten Datentyp eine Exception geworfen wird:

Code: Select all
com.sibvisions.rad.persist.jdbc.DBAccess.getColumnMetaDataIntern (Line: 5925) Couldn't preload MetaData for "public"."xyz-table" Column: "xyz-column"! null :: SQL Type '2001' is not supported!


Und das erzeugt viele Folgeprobleme.
mzeller
 
Posts: 27
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Upgradeprobleme von 2.5.1 auf 2.8.5

Postby mzeller » Wed Jan 31, 2024 1:14 pm

Wir wissen jetzt wo das Problem liegt. jvx holt sich die Metadaten in der Klasse PostgreSQLDBAccess über dieses selbstgebaute SQL-Statement:

Code: Select all
private static String sColumnMetaDataSelect =
            "select c.table_schema as table_schem " +
                  ",c.table_name " +
                  ",c.column_name " +
                  ",case when c.domain_name is not null then 2001 " +
                        "when c.udt_name in ('name', 'text', 'varchar') then 12 " +
                        "when c.udt_name in ('char', 'bpchar') then 1 " +
                        "when c.udt_name = 'numeric' then 2 " +
                        "when c.udt_name in ('int4', 'serial') then 4 " +
                        "when c.udt_name in ('int2', 'smallserial') then 5 " +
                        "when c.udt_name = 'float4' then 7 " +
                        "when c.udt_name = 'float8' then 8 " +
                        "when substr(c.udt_name, 1, 9) = 'timestamp' then 93 " +
                        "when c.udt_name = 'date' then 91 " +
                        "when c.udt_name = 'bytea' then -2 " +
                        "when c.udt_name in ('int8', 'oid', 'bigserial') then -5 " +
                        "when c.udt_name = 'bool' then -7 " +
                        "when substr(c.udt_name, 1, 1) = '_' then 2003 " +
                        "when substr(c.udt_name, 1, 3) in ('pg_', 'reg') or " +
                             "c.udt_name in ('abstime', 'anyarray', 'inet', 'int2vector', 'interval', 'oidvector', 'xid') then 1111 " +
                        "else 12 " +
                   "end as data_type " +
                  ",case when c.domain_name is null then c.udt_name else '\"'||c.domain_schema||'\".\"'||c.domain_name||'\"' end as type_name " +
                  ",case when c.is_nullable = 'NO' then 0 else 1 end as nullable " +
                  ",case when c.udt_name = 'date' then 13 " +
                        "when substr(c.udt_name, 1, 9) = 'timestamp' then " +
                              "case when c.datetime_precision = 0 then 22 else 23 + c.datetime_precision end " +
                   "else coalesce(c.character_maximum_length, ceil(c.numeric_precision * ln(c.numeric_precision_radix) / ln(10)), 0) " +
                   "end as column_size " +
                  ",coalesce(c.numeric_scale, c.datetime_precision, 0) as decimal_digits " +
                  ",case when lower(c.column_default) like 'nextval(%)' then 'Y' else 'N' end as is_autoincrement " +
              "from information_schema.columns c " +
             "where c.table_schema not in ('information_schema', 'pg_catalog') " +
             "order by c.table_schema, c.table_name, c.ordinal_position";


Und genau hier werden mindestens diese beiden Postgres-Datentypen nicht berücksichtigt: percent und money

Daher bekommen diese fälschlicherweise den Typ 2001 und nicht 2 und 4, wie es eigentlich sein sollte.

Falls hier noch jemand von sibvision mitliest: kann man von eurer Seite mit einem Bugfix in baldiger Zukunft rechnen oder sollen wir es selbst fixen?

LG
Martin
mzeller
 
Posts: 27
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Upgradeprobleme von 2.5.1 auf 2.8.5

Postby mzeller » Thu Feb 01, 2024 3:06 pm

Wir haben die Bugs selbst gefixed. Da waren dann noch mehr Fehler in der PostgreSQLDBAccess-Klasse, vor allem im Zusammenhang mit Metadaten und enum-Datentypen.
mzeller
 
Posts: 27
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna


Return to Development (DE)