@@ -312,6 +312,8 @@ describe("detectEnvVars", () => {
312312 "PGHOST" , "PGPORT" , "PGDATABASE" , "PGUSER" , "PGPASSWORD" , "DATABASE_URL" ,
313313 "MYSQL_HOST" , "MYSQL_TCP_PORT" , "MYSQL_DATABASE" , "MYSQL_USER" , "MYSQL_PASSWORD" ,
314314 "REDSHIFT_HOST" , "REDSHIFT_PORT" , "REDSHIFT_DATABASE" , "REDSHIFT_USER" , "REDSHIFT_PASSWORD" ,
315+ "CLICKHOUSE_HOST" , "CLICKHOUSE_URL" , "CLICKHOUSE_PORT" , "CLICKHOUSE_DB" ,
316+ "CLICKHOUSE_DATABASE" , "CLICKHOUSE_USER" , "CLICKHOUSE_USERNAME" , "CLICKHOUSE_PASSWORD" ,
315317 ]
316318 for ( const v of vars ) {
317319 delete process . env [ v ]
@@ -502,6 +504,62 @@ describe("detectEnvVars", () => {
502504 expect ( rs ! . config . user ) . toBe ( "admin" )
503505 } )
504506
507+ test ( "detects ClickHouse via CLICKHOUSE_HOST" , async ( ) => {
508+ clearWarehouseEnvVars ( )
509+ process . env . CLICKHOUSE_HOST = "clickhouse.example.com"
510+ process . env . CLICKHOUSE_PORT = "8443"
511+ process . env . CLICKHOUSE_DATABASE = "analytics"
512+ process . env . CLICKHOUSE_USER = "default"
513+ process . env . CLICKHOUSE_PASSWORD = "secret"
514+
515+ const result = await detectEnvVars ( )
516+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
517+ expect ( ch ) . toBeDefined ( )
518+ expect ( ch ! . name ) . toBe ( "env_clickhouse" )
519+ expect ( ch ! . source ) . toBe ( "env-var" )
520+ expect ( ch ! . signal ) . toBe ( "CLICKHOUSE_HOST" )
521+ expect ( ch ! . config . host ) . toBe ( "clickhouse.example.com" )
522+ expect ( ch ! . config . port ) . toBe ( "8443" )
523+ expect ( ch ! . config . database ) . toBe ( "analytics" )
524+ expect ( ch ! . config . user ) . toBe ( "default" )
525+ expect ( ch ! . config . password ) . toBe ( "***" )
526+ } )
527+
528+ test ( "detects ClickHouse via CLICKHOUSE_URL" , async ( ) => {
529+ clearWarehouseEnvVars ( )
530+ process . env . CLICKHOUSE_URL = "https://clickhouse.example.com:8443"
531+
532+ const result = await detectEnvVars ( )
533+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
534+ expect ( ch ) . toBeDefined ( )
535+ expect ( ch ! . signal ) . toBe ( "CLICKHOUSE_URL" )
536+ expect ( ch ! . config . connection_string ) . toBe ( "***" )
537+ } )
538+
539+ test ( "detects ClickHouse via DATABASE_URL with clickhouse scheme" , async ( ) => {
540+ clearWarehouseEnvVars ( )
541+ process . env . DATABASE_URL = "clickhouse://default:pass@clickhouse.example.com:8443/analytics"
542+
543+ const result = await detectEnvVars ( )
544+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
545+ expect ( ch ) . toBeDefined ( )
546+ expect ( ch ! . signal ) . toBe ( "DATABASE_URL" )
547+ expect ( ch ! . config . connection_string ) . toBe ( "***" )
548+ } )
549+
550+ test ( "detects ClickHouse via DATABASE_URL with clickhouse+http and clickhouse+https schemes" , async ( ) => {
551+ for ( const scheme of [ "clickhouse+http" , "clickhouse+https" ] ) {
552+ clearWarehouseEnvVars ( )
553+ process . env . DATABASE_URL = `${ scheme } ://default:pass@clickhouse.example.com:8443/analytics`
554+
555+ const result = await detectEnvVars ( )
556+ const ch = result . find ( ( r ) => r . type === "clickhouse" )
557+ expect ( ch ) . toBeDefined ( )
558+ expect ( ch ! . signal ) . toBe ( "DATABASE_URL" )
559+ expect ( ch ! . type ) . toBe ( "clickhouse" )
560+ }
561+ } )
562+
505563 test ( "detects multiple warehouses simultaneously" , async ( ) => {
506564 clearWarehouseEnvVars ( )
507565 process . env . SNOWFLAKE_ACCOUNT = "sf_account"
0 commit comments