@@ -200,7 +200,18 @@ describe("column completion", () => {
200200 dialect : POSTGRESQL_SQL_RELATION_DIALECT ,
201201 outcome : usable ( [
202202 {
203- columns : [ column ( "id" , "users" , 0 ) ] ,
203+ columns : [
204+ column ( "id" , "users" , 0 ) ,
205+ Object . freeze ( {
206+ ...column ( "id" , "users" , 1 ) ,
207+ columnEntityId : "users:id-alternate" ,
208+ insertText : "id_alternate" ,
209+ provenance : Object . freeze ( {
210+ ...column ( "id" , "users" , 1 ) . provenance ,
211+ columnEntityId : "users:id-alternate" ,
212+ } ) ,
213+ } ) ,
214+ ] ,
204215 coverage : "partial" ,
205216 relationEntityId : "users" ,
206217 requestKey : "binding:0" ,
@@ -390,6 +401,11 @@ describe("column completion", () => {
390401 expect ( result ) . toMatchObject ( {
391402 sources : [ {
392403 coverage : "partial" ,
404+ failures : [ {
405+ code : "unavailable" ,
406+ requestKey : "binding:1" ,
407+ retry : "next-request" ,
408+ } ] ,
393409 outcome : "ready" ,
394410 } ] ,
395411 value : {
@@ -415,6 +431,81 @@ describe("column completion", () => {
415431 providerId : "columns" ,
416432 site : current ,
417433 } ) ?. sources [ 0 ] ,
418- ) . toMatchObject ( { outcome : "failed" } ) ;
434+ ) . toMatchObject ( {
435+ failures : [ {
436+ code : "unavailable" ,
437+ requestKey : "binding:0" ,
438+ retry : "next-request" ,
439+ } ] ,
440+ outcome : "failed" ,
441+ } ) ;
442+ } ) ;
443+
444+ it ( "uses deterministic code-unit ordering" , ( ) => {
445+ const current = site ( ) ;
446+ const prepared = prepareSqlColumnCatalogRelations (
447+ current ,
448+ POSTGRESQL_SQL_RELATION_DIALECT ,
449+ ) ;
450+ const result = composeSqlColumnCompletion ( {
451+ dialect : POSTGRESQL_SQL_RELATION_DIALECT ,
452+ outcome : usable ( [ {
453+ columns : [
454+ column ( "ä_value" , "users" , 0 ) ,
455+ column ( "z_value" , "users" , 1 ) ,
456+ ] ,
457+ coverage : "complete" ,
458+ relationEntityId : "users" ,
459+ requestKey : "binding:0" ,
460+ status : "ready" ,
461+ } ] ) ,
462+ prepared,
463+ providerId : "columns" ,
464+ site : current ,
465+ } ) ;
466+
467+ expect ( result ?. value . items . map ( ( item ) => item . label ) ) . toEqual ( [
468+ "z_value" ,
469+ "ä_value" ,
470+ ] ) ;
471+ } ) ;
472+
473+ it ( "uses relation detail to order columns with equal labels" , ( ) => {
474+ const current = site ( ) ;
475+ const prepared = prepareSqlColumnCatalogRelations (
476+ current ,
477+ POSTGRESQL_SQL_RELATION_DIALECT ,
478+ ) ;
479+ const result = composeSqlColumnCompletion ( {
480+ dialect : POSTGRESQL_SQL_RELATION_DIALECT ,
481+ outcome : usable ( [
482+ {
483+ columns : [ column ( "id" , "users" , 0 ) ] ,
484+ coverage : "complete" ,
485+ relationEntityId : "users" ,
486+ requestKey : "binding:0" ,
487+ status : "ready" ,
488+ } ,
489+ {
490+ columns : [ column ( "id" , "orders" , 0 ) ] ,
491+ coverage : "complete" ,
492+ relationEntityId : "orders" ,
493+ requestKey : "binding:1" ,
494+ status : "ready" ,
495+ } ,
496+ ] ) ,
497+ prepared,
498+ providerId : "columns" ,
499+ site : current ,
500+ } ) ;
501+
502+ expect ( result ?. value . items . map ( ( item ) => item . detail ) ) . toEqual ( [
503+ "VARCHAR — o" ,
504+ "VARCHAR — u" ,
505+ ] ) ;
506+ expect ( result ?. value . items . map ( ( item ) => item . edit . insert ) ) . toEqual ( [
507+ "id" ,
508+ "id" ,
509+ ] ) ;
419510 } ) ;
420511} ) ;
0 commit comments