Skip to content

Commit 456225c

Browse files
committed
WIP
1 parent f81571e commit 456225c

File tree

2 files changed

+346
-119
lines changed

2 files changed

+346
-119
lines changed

packages/compass-collection/src/transform-schema-to-field-info.spec.ts

Lines changed: 222 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -326,11 +326,6 @@ describe('processSchema', function () {
326326
const result = processSchema(schema);
327327

328328
expect(result).to.deep.equal({
329-
'items[]': {
330-
type: 'Document',
331-
sample_values: [], // no sample values for Documents
332-
probability: 1.0,
333-
},
334329
'items[].id': {
335330
type: 'Number',
336331
sample_values: [1, 2],
@@ -479,11 +474,6 @@ describe('processSchema', function () {
479474
const result = processSchema(schema);
480475

481476
expect(result).to.deep.equal({
482-
'matrix[][]': {
483-
type: 'Document',
484-
sample_values: [],
485-
probability: 1.0,
486-
},
487477
'matrix[][].x': {
488478
type: 'Number',
489479
sample_values: [1, 3],
@@ -582,11 +572,6 @@ describe('processSchema', function () {
582572
const result = processSchema(schema);
583573

584574
expect(result).to.deep.equal({
585-
'deepMatrix[][][]': {
586-
type: 'Document',
587-
sample_values: [],
588-
probability: 1.0,
589-
},
590575
'deepMatrix[][][].value': {
591576
type: 'Number',
592577
sample_values: [42],
@@ -714,4 +699,226 @@ describe('processSchema', function () {
714699
},
715700
});
716701
});
702+
703+
it('handles array of documents with nested arrays', function () {
704+
// teams: [{ name: "Team A", members: ["Alice", "Bob"] }, { name: "Team B", members: ["Charlie"] }]
705+
const schema: Schema = {
706+
fields: [
707+
{
708+
name: 'teams',
709+
path: ['teams'],
710+
count: 1,
711+
type: ['Array'],
712+
probability: 1.0,
713+
hasDuplicates: false,
714+
types: [
715+
{
716+
name: 'Array',
717+
bsonType: 'Array',
718+
path: ['teams'],
719+
count: 1,
720+
probability: 1.0,
721+
lengths: [2],
722+
averageLength: 2,
723+
totalCount: 2,
724+
values: [
725+
[
726+
{ name: 'Team A', members: ['Alice', 'Bob'] },
727+
{ name: 'Team B', members: ['Charlie'] },
728+
],
729+
],
730+
types: [
731+
{
732+
name: 'Document',
733+
bsonType: 'Document',
734+
path: ['teams'],
735+
count: 2,
736+
probability: 1.0,
737+
fields: [
738+
{
739+
name: 'name',
740+
path: ['teams', 'name'],
741+
count: 2,
742+
type: ['String'],
743+
probability: 1.0,
744+
hasDuplicates: false,
745+
types: [
746+
{
747+
name: 'String',
748+
bsonType: 'String',
749+
path: ['teams', 'name'],
750+
count: 2,
751+
probability: 1.0,
752+
values: ['Team A', 'Team B'],
753+
} as SchemaType,
754+
],
755+
} as SchemaField,
756+
{
757+
name: 'members',
758+
path: ['teams', 'members'],
759+
count: 2,
760+
type: ['Array'],
761+
probability: 1.0,
762+
hasDuplicates: false,
763+
types: [
764+
{
765+
name: 'Array',
766+
bsonType: 'Array',
767+
path: ['teams', 'members'],
768+
count: 2,
769+
probability: 1.0,
770+
lengths: [2, 1],
771+
averageLength: 1.5,
772+
totalCount: 3,
773+
values: [['Alice', 'Bob'], ['Charlie']],
774+
types: [
775+
{
776+
name: 'String',
777+
bsonType: 'String',
778+
path: ['teams', 'members'],
779+
count: 3,
780+
probability: 1.0,
781+
values: ['Alice', 'Bob', 'Charlie'],
782+
} as SchemaType,
783+
],
784+
} as ArraySchemaType,
785+
],
786+
} as SchemaField,
787+
],
788+
} as DocumentSchemaType,
789+
],
790+
} as ArraySchemaType,
791+
],
792+
} as SchemaField,
793+
],
794+
count: 1,
795+
};
796+
797+
const result = processSchema(schema);
798+
799+
expect(result).to.deep.equal({
800+
'teams[].name': {
801+
type: 'String',
802+
sample_values: ['Team A', 'Team B'],
803+
probability: 1.0,
804+
},
805+
'teams[].members[]': {
806+
type: 'String',
807+
sample_values: [['Alice', 'Bob'], ['Charlie']],
808+
probability: 1.0,
809+
},
810+
});
811+
});
812+
813+
it('handles triple nested arrays (3D matrix)', function () {
814+
// cube: [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
815+
const schema: Schema = {
816+
fields: [
817+
{
818+
name: 'cube',
819+
path: ['cube'],
820+
count: 1,
821+
type: ['Array'],
822+
probability: 1.0,
823+
hasDuplicates: false,
824+
types: [
825+
{
826+
name: 'Array',
827+
bsonType: 'Array',
828+
path: ['cube'],
829+
count: 1,
830+
probability: 1.0,
831+
lengths: [2],
832+
averageLength: 2,
833+
totalCount: 2,
834+
values: [
835+
[
836+
[
837+
[1, 2],
838+
[3, 4],
839+
],
840+
[
841+
[5, 6],
842+
[7, 8],
843+
],
844+
],
845+
],
846+
types: [
847+
{
848+
name: 'Array',
849+
bsonType: 'Array',
850+
path: ['cube'],
851+
count: 2,
852+
probability: 1.0,
853+
lengths: [2],
854+
averageLength: 2,
855+
totalCount: 4,
856+
values: [
857+
[
858+
[1, 2],
859+
[3, 4],
860+
],
861+
[
862+
[5, 6],
863+
[7, 8],
864+
],
865+
],
866+
types: [
867+
{
868+
name: 'Array',
869+
bsonType: 'Array',
870+
path: ['cube'],
871+
count: 4,
872+
probability: 1.0,
873+
lengths: [2],
874+
averageLength: 2,
875+
totalCount: 8,
876+
values: [
877+
[1, 2],
878+
[3, 4],
879+
[5, 6],
880+
[7, 8],
881+
],
882+
types: [
883+
{
884+
name: 'Number',
885+
bsonType: 'Number',
886+
path: ['cube'],
887+
count: 8,
888+
probability: 1.0,
889+
values: [1, 2, 3, 4, 5, 6, 7, 8],
890+
} as SchemaType,
891+
],
892+
} as ArraySchemaType,
893+
],
894+
} as ArraySchemaType,
895+
],
896+
} as ArraySchemaType,
897+
],
898+
} as SchemaField,
899+
],
900+
count: 1,
901+
};
902+
903+
const result = processSchema(schema);
904+
905+
expect(result).to.deep.equal({
906+
'cube[][][]': {
907+
type: 'Number',
908+
sample_values: [
909+
[
910+
[
911+
[1, 2],
912+
[3, 4],
913+
],
914+
[
915+
[5, 6],
916+
[7, 8],
917+
],
918+
],
919+
],
920+
probability: 1.0,
921+
},
922+
});
923+
});
717924
});

0 commit comments

Comments
 (0)