Thread: JDBC idea with special JDBC views
Hello, I have idea for few methods in JDBC We can add views pg_gettables, pg_getcolumns, pg_getprimarykeys etc. and method work only connection.executeQuery("select * from pg_gettables") (and like).Columns in view are like JDBC specification. Now JDBC source stay unchanged and we can speedup query for view and change with change JDBC specification In begining schema can be null, but later we add schema support with only change views (without change JDBC source) We need COLUMN_SIZE and PRECISION for any view.We can make function like format_type in postgresql source or simple view like (for getColumns) : create view pg_getcolumns as (this is not complete view for getColumns, only example - can be much better) select null::varchar as "TABLE CAT", null::varchar as "TABLE_SCHEM", c.relname as "TABLE_NAME",a.attname as "COLUMN_NAME", CASE t.typname when 'int2' then 'Types.SMALLINT' when 'int4' then 'Types.INTEGER' when 'oid' then 'Types.INTEGER' when 'numeric' then 'Types.NUMERIC' else 'Types.OTHER' end as "DATA_TYPE", typname as "TYPE_NAME", case typname when 'varchar' then case atttypmod when -1 then null else (atttypmod-4) end when 'bpchar' then case atttypmod when -1 then null else (atttypmod-4) end else attlen end as "COLUMN_SIZE", null::int4 as "BUFFER_LENGTH", case typname when 'numeric' then case atttypmod when -1 then null else (atttypmod-4) >> 16 end when 'decimal' then case atttypmod when -1 then null else (atttypmod-4) >>16 end end as "DECIMAL_DIGITS", case typname when 'numeric' then case atttypmod when -1 then null else (int4(atttypmod)-int4('4')) & int4('65535') end when 'decimal' then case atttypmod when -1 then null else (int4(atttypmod)-int4('4')) & int4('65535') end end as "NUM_PREC_RADIX" from pg_class c,pg_catalog.pg_type t,pg_catalog.pg_attribute a where c.oid=a.attrelid and t.oid=a.atttypid; getColumns is like : connection.CreateStatement().executeQuery("SELECT * " + "FROM pg_getcolumns " + "WHERE \"TABLE_CAT\" LIKE " + catalog==null ? "%" : catalog + etc Maybe is better with PreparedStatement in this method regards Haris Peco
This is a very good idea, however it will be a tough sell to the core group to add views for an interface. Keep in mind that if the jdbc interface gets a few views, then all the other interfaces will want them as well. There is a new table called pg_depend which will help in identifying relationships between tables. Dave On Thu, 2002-09-12 at 18:40, snpe wrote: > Hello, > I have idea for few methods in JDBC > We can add views pg_gettables, pg_getcolumns, pg_getprimarykeys > etc. and method work only connection.executeQuery("select * from > pg_gettables") (and like).Columns in view are like JDBC specification. > Now JDBC source stay unchanged and we can speedup query for view and change > with change JDBC specification > In begining schema can be null, but later we add schema support with only > change views (without change JDBC source) > We need COLUMN_SIZE and PRECISION for any view.We can make function like > format_type in postgresql source or simple view like (for getColumns) : > create view pg_getcolumns as (this is not complete view for getColumns, only > example - can be much better) > select null::varchar as "TABLE CAT", > null::varchar as "TABLE_SCHEM", > c.relname as "TABLE_NAME",a.attname as "COLUMN_NAME", > CASE t.typname > when 'int2' then 'Types.SMALLINT' > when 'int4' then 'Types.INTEGER' > when 'oid' then 'Types.INTEGER' > when 'numeric' then 'Types.NUMERIC' > else > 'Types.OTHER' > end as "DATA_TYPE", > typname as "TYPE_NAME", > case typname > when 'varchar' then > case atttypmod > when -1 then null > else > (atttypmod-4) > end > when 'bpchar' then > case atttypmod > when -1 then null > else > (atttypmod-4) > end > else > attlen > end as "COLUMN_SIZE", > null::int4 as "BUFFER_LENGTH", > case typname > when 'numeric' then > case atttypmod > when -1 then null > else > (atttypmod-4) >> 16 > end > when 'decimal' then > case atttypmod > when -1 then null > else > (atttypmod-4) >>16 > end > end as "DECIMAL_DIGITS", > case typname > when 'numeric' then > case atttypmod > when -1 then null > else > (int4(atttypmod)-int4('4')) & int4('65535') > end > when 'decimal' then > case atttypmod > when -1 then null > else > (int4(atttypmod)-int4('4')) & int4('65535') > end > end as "NUM_PREC_RADIX" > from pg_class c,pg_catalog.pg_type t,pg_catalog.pg_attribute a > where c.oid=a.attrelid and t.oid=a.atttypid; > > getColumns is like : > > connection.CreateStatement().executeQuery("SELECT * " + > "FROM pg_getcolumns " + > "WHERE \"TABLE_CAT\" LIKE " + catalog==null ? "%" : catalog + > etc > > Maybe is better with PreparedStatement in this method > > regards > Haris Peco > >
That is special views and pg_depned don't help. For core group : we need sql script when start with initdb and views for any interfaces go here with special syntax, btw for jdbc are pg_jdbc_xxx , for c pg_jdbc_c. etc We can that core sql script call special sql script (jdbc_views.sql, c_view.sql etc.) jdbc_views.sql maintain JDBC group etc regards Haris Peco On Friday 13 September 2002 02:33 am, Dave Cramer wrote: > This is a very good idea, however it will be a tough sell to the core > group to add views for an interface. Keep in mind that if the jdbc > interface gets a few views, then all the other interfaces will want them > as well. There is a new table called pg_depend which will help in > identifying relationships between tables. > > Dave > > On Thu, 2002-09-12 at 18:40, snpe wrote: > > Hello, > > I have idea for few methods in JDBC > > We can add views pg_gettables, pg_getcolumns, pg_getprimarykeys > > etc. and method work only connection.executeQuery("select * from > > pg_gettables") (and like).Columns in view are like JDBC specification. > > Now JDBC source stay unchanged and we can speedup query for view and > > change with change JDBC specification > > In begining schema can be null, but later we add schema support with only > > change views (without change JDBC source) > > We need COLUMN_SIZE and PRECISION for any view.We can make function like > > format_type in postgresql source or simple view like (for getColumns) : > > create view pg_getcolumns as (this is not complete view for getColumns, > > only example - can be much better) > > select null::varchar as "TABLE CAT", > > null::varchar as "TABLE_SCHEM", > > c.relname as "TABLE_NAME",a.attname as "COLUMN_NAME", > > CASE t.typname > > when 'int2' then 'Types.SMALLINT' > > when 'int4' then 'Types.INTEGER' > > when 'oid' then 'Types.INTEGER' > > when 'numeric' then 'Types.NUMERIC' > > else > > 'Types.OTHER' > > end as "DATA_TYPE", > > typname as "TYPE_NAME", > > case typname > > when 'varchar' then > > case atttypmod > > when -1 then null > > else > > (atttypmod-4) > > end > > when 'bpchar' then > > case atttypmod > > when -1 then null > > else > > (atttypmod-4) > > end > > else > > attlen > > end as "COLUMN_SIZE", > > null::int4 as "BUFFER_LENGTH", > > case typname > > when 'numeric' then > > case atttypmod > > when -1 then null > > else > > (atttypmod-4) >> 16 > > end > > when 'decimal' then > > case atttypmod > > when -1 then null > > else > > (atttypmod-4) >>16 > > end > > end as "DECIMAL_DIGITS", > > case typname > > when 'numeric' then > > case atttypmod > > when -1 then null > > else > > (int4(atttypmod)-int4('4')) & > > int4('65535') end > > when 'decimal' then > > case atttypmod > > when -1 then null > > else > > (int4(atttypmod)-int4('4')) & > > int4('65535') end > > end as "NUM_PREC_RADIX" > > from pg_class c,pg_catalog.pg_type t,pg_catalog.pg_attribute a > > where c.oid=a.attrelid and t.oid=a.atttypid; > > > > getColumns is like : > > > > connection.CreateStatement().executeQuery("SELECT * " + > > "FROM pg_getcolumns " + > > "WHERE \"TABLE_CAT\" LIKE " + catalog==null ? "%" : catalog + > > etc > > > > Maybe is better with PreparedStatement in this method > > > > regards > > Haris Peco