xtdb

eval2020 2024-12-17T09:56:02.710829Z

Is there a way to get the server-version? The driver I’m writing would benefit from it to see what syntax it can/should generate. The pg-adapter sends the following: SELECT CAST(current_setting('server_version_num') AS integer) AS v returning something like 140013 . https://github.com/jeremyevans/sequel/blob/7a520bb9c013947bd60d9170e727fb52a2287ba1/lib/sequel/adapters/shared/postgres.rb#L757-L762

eval2020 2024-12-17T11:51:18.673269Z

👍 that needs some parsing for my purpose then. And I see nightly returns "XTDB @ nightly" 🙂 I can open an issue (if not already on the roadmap).

refset 2024-12-17T12:21:48.531999Z

I don't think there's anything open in this area currently 🤔 does the number need to be stable / monotonic?

refset 2024-12-17T12:22:01.302059Z

perhaps a timestamp of the build time?

eval2020 2024-12-17T13:01:16.769299Z

my usecase would be: easily comparable. What pg does: major * 10_000 + minor e.g. output snippet of show all

...
 {:name=>"server_version", :setting=>"14.13 (Postgres.app)", :description=>"Shows the server version."},
 {:name=>"server_version_num", :setting=>"140013", :description=>"Shows the server version as an integer."},
...
What sequel does for mssql: "13.14.1500" => 13141500 For betas and nightlies both ‘upcoming’ or ‘current + revision’ would work: 2.3.4-pre => 2003004, 2.3.4.1234 => 2003004 Prior art: https://github.com/search?q=repo%3Ajeremyevans%2Fsequel+server_version+path%3A%2F%5Elib%5C%2Fsequel%5C%2F%2F&type=code

refset 2024-12-17T17:07:33.902709Z

how's https://play.xtdb.com/?version=2.0.0-beta3&type=sql-beta&txs=W3sic3lzdGVtLXRpbWUiOm51bGwsInR4cyI6IiJ9XQ%3D%3D&query=V0lUSCBzMCBBUyAoCiAgIFNFTEVDVCAnWFREQiBAIDIuMy40LWJldGEzJyBBUyBpMAopLApzMSBBUyAoCiAgU0VMRUNUIFNVQlNUUklORyhpMCBGUk9NIFBPU0lUSU9OKCcgQCAnIElOIGkwKSArIDMpIEFTIGkxCiAgRlJPTSBzMAopLApzMiBBUyAoCiAgU0VMRUNUIFNVQlNUUklORyAoaTEgRlJPTSBQT1NJVElPTignLicgSU4gaTEpICsgMSkgQVMgaTIsCiAgICAgICAgIENBU1QoU1VCU1RSSU5HKGkxIEZST00gMCBGT1IgUE9TSVRJT04oJy4nIElOIGkxKSkgQVMgSU5URUdFUikgQVMgbWFqb3IKICBGUk9NIHMxCiksCnMzIEFTICgKICBTRUxFQ1QgU1VCU1RSSU5HIChpMiBGUk9NIFBPU0lUSU9OKCcuJyBJTiBpMikgKyAxKSBBUyBpMywKICAgICAgICAgQ0FTVChTVUJTVFJJTkcoaTIgRlJPTSAwIEZPUiBQT1NJVElPTignLicgSU4gaTIpKSBBUyBJTlRFR0VSKSBBUyBtaW5vcgogIEZST00gczIKKSwKczQgQVMgKAogIFNFTEVDVCBDQVNUKFNVQlNUUklORyhpMyBGUk9NIDAgRk9SIFBPU0lUSU9OKCctJyBJTiBpMykpIEFTIElOVEVHRVIpIEFTIHBhdGNoCiAgRlJPTSBzMwopClNFTEVDVCBtYWpvciAqIDEwMDAwMDAgKyBtaW5vciAqIDEwMDAgKyBwYXRjaCBBUyBzZXJ2ZXJfdmVyc2lvbl9udW0gRlJPTSBzMCwgczEsIHMyLCBzMywgczQ7Cg%3D%3D 🙂

WITH s0 AS (
   SELECT 'XTDB @ 2.3.4-beta3' AS i0
),
s1 AS (
  SELECT SUBSTRING(i0 FROM POSITION(' @ ' IN i0) + 3) AS i1
  FROM s0
),
s2 AS (
  SELECT SUBSTRING (i1 FROM POSITION('.' IN i1) + 1) AS i2,
         CAST(SUBSTRING(i1 FROM 0 FOR POSITION('.' IN i1)) AS INTEGER) AS major
  FROM s1
),
s3 AS (
  SELECT SUBSTRING (i2 FROM POSITION('.' IN i2) + 1) AS i3,
         CAST(SUBSTRING(i2 FROM 0 FOR POSITION('.' IN i2)) AS INTEGER) AS minor
  FROM s2
),
s4 AS (
  SELECT CAST(SUBSTRING(i3 FROM 0 FOR POSITION('-' IN i3)) AS INTEGER) AS patch
  FROM s3
)
SELECT major * 1000000 + minor * 1000 + patch AS server_version_num FROM s0, s1, s2, s3, s4;

eval2020 2024-12-17T17:13:15.566739Z

that would work! 🙂

🙌 1
eval2020 2024-12-17T17:41:16.923389Z

…though it would require a proper version instead of XTDB @ nightly 😬 hope that that’s possible.

refset 2024-12-17T19:12:04.497719Z

https://play.xtdb.com/?version=2.0.0-beta3&type=sql&txs=W3sic3lzdGVtLXRpbWUiOm51bGwsInR4cyI6IklOU0VSVCBJTlRPIGRvY3MgKF9pZCwgY29sMSkgVkFMVUVTICgxLCAnZm9vJyk7XG5JTlNFUlQgSU5UTyBkb2NzIFJFQ09SRFMge19pZDogMiwgY29sMTogJ2JhcicsIGNvbDI6JyBiYXonfTsifV0%3D&query=V0lUSCBzMCBBUyAoCiAgIFNFTEVDVCAKICAgICAgIENBU0UgCiAgICAgICAgICAgV0hFTiBpMCA9ICdYVERCIEAgbmlnaHRseScgVEhFTiAnWFREQiBAIDIuMC4wJwogICAgICAgICAgIEVMU0UgaTAgCiAgICAgICBFTkQgQVMgaTAKICAgRlJPTSAoU0VMRUNUICdYVERCIEAgMS4yLjMnIEFTIGkwKSBpbnB1dAopLApzMSBBUyAoCiAgU0VMRUNUIFNVQlNUUklORyhpMCBGUk9NIFBPU0lUSU9OKCcgQCAnIElOIGkwKSArIDMpIEFTIGkxCiAgRlJPTSBzMAopLApzMiBBUyAoCiAgU0VMRUNUIFNVQlNUUklORyAoaTEgRlJPTSBQT1NJVElPTignLicgSU4gaTEpICsgMSkgQVMgaTIsCiAgICAgICAgIENBU1QoU1VCU1RSSU5HKGkxIEZST00gMCBGT1IgUE9TSVRJT04oJy4nIElOIGkxKSkgQVMgSU5URUdFUikgQVMgbWFqb3IKICBGUk9NIHMxCiksCnMzIEFTICgKICBTRUxFQ1QgU1VCU1RSSU5HIChpMiBGUk9NIFBPU0lUSU9OKCcuJyBJTiBpMikgKyAxKSBBUyBpMywKICAgICAgICAgQ0FTVChTVUJTVFJJTkcoaTIgRlJPTSAwIEZPUiBQT1NJVElPTignLicgSU4gaTIpKSBBUyBJTlRFR0VSKSBBUyBtaW5vcgogIEZST00gczIKKSwKczQgQVMgKAogIFNFTEVDVCAKICAgICAgICAgQ0FTVCgKICAgICAgICAgICAgIENBU0UgCiAgICAgICAgICAgICAgICAgV0hFTiBQT1NJVElPTignLScgSU4gaTMpID4gMCBUSEVOIFNVQlNUUklORyhpMyBGUk9NIDAgRk9SIFBPU0lUSU9OKCctJyBJTiBpMykpCiAgICAgICAgICAgICAgICAgRUxTRSBpMwogICAgICAgICAgICAgRU5EIAogICAgICAgICBBUyBJTlRFR0VSKSBBUyBwYXRjaAogIEZST00gczMKKQpTRUxFQ1QgbWFqb3IgKiAxMDAwMDAwICsgbWlub3IgKiAxMDAwICsgcGF0Y2ggQVMgc2VydmVyX3ZlcnNpb25fbnVtIApGUk9NIHMwLCBzMSwgczIsIHMzLCBzNDsK?

emccue 2024-12-17T19:59:19.118189Z

how do NEST_MANY and NEST_ONE work with a jdbc driver? I'm curious partially because it feels like it could be a standard postgres extension as well

seancorfield 2024-12-17T20:01:13.676319Z

JDBC drivers mostly send SQL "as-is" to the database to deal with, so the NEST_* functionality is on the database end of the pg-wire protocol, not the driver.

emccue 2024-12-17T20:01:29.398229Z

I mean from a ResultSet

emccue 2024-12-17T20:01:40.954839Z

the result of a NEST_MANY would turn into...something

seancorfield 2024-12-17T20:01:47.955409Z

PGObject / JSON-like stuff as I understand it.

emccue 2024-12-17T20:01:52.508239Z

is it like a nested resultset?

emccue 2024-12-17T20:01:57.423369Z

ah okay

seancorfield 2024-12-17T20:02:12.899649Z

See their xtdb-jdbc module that has next.jdbc helpers for unpacking the result sets.

seancorfield 2024-12-17T20:02:52.396239Z

(since builder fns only handle top-level column values, their builders walk the entire object tree to produce vectors and hash maps)

seancorfield 2024-12-17T20:03:50.681579Z

JDBC allows for arbitrary objects to come back from the database as column values -- but they're opaque to JDBC itself, and the getObject() part is implemented by the specific driver.

refset 2024-12-17T20:24:36.524479Z

the xtdb-jdbc module helps convert things back to regular maps via a custom transit+json Postgres wire protocol OID format (i.e. it's not limited json types)