@@ -2624,4 +2624,134 @@ public function testVectorQueryInNestedQuery(): void
26242624 // Cleanup
26252625 $ database ->deleteCollection ('vectorNested ' );
26262626 }
2627+
2628+ public function testVectorQueryCount (): void
2629+ {
2630+ /** @var Database $database */
2631+ $ database = static ::getDatabase ();
2632+
2633+ if (!$ database ->getAdapter ()->getSupportForVectors ()) {
2634+ $ this ->expectNotToPerformAssertions ();
2635+ return ;
2636+ }
2637+
2638+ $ database ->createCollection ('vectorCount ' );
2639+ $ database ->createAttribute ('vectorCount ' , 'embedding ' , Database::VAR_VECTOR , 3 , true );
2640+
2641+ $ database ->createDocument ('vectorCount ' , new Document ([
2642+ '$permissions ' => [
2643+ Permission::read (Role::any ())
2644+ ],
2645+ 'embedding ' => [1.0 , 0.0 , 0.0 ],
2646+ ]));
2647+
2648+ $ count = $ database ->count ('vectorCount ' , [
2649+ Query::vectorCosine ('embedding ' , [1.0 , 0.0 , 0.0 ]),
2650+ ]);
2651+
2652+ $ this ->assertEquals (1 , $ count );
2653+
2654+ $ database ->deleteCollection ('vectorCount ' );
2655+ }
2656+
2657+ public function testVectorQuerySum (): void
2658+ {
2659+ /** @var Database $database */
2660+ $ database = static ::getDatabase ();
2661+
2662+ if (!$ database ->getAdapter ()->getSupportForVectors ()) {
2663+ $ this ->expectNotToPerformAssertions ();
2664+ return ;
2665+ }
2666+
2667+ $ database ->createCollection ('vectorSum ' );
2668+ $ database ->createAttribute ('vectorSum ' , 'embedding ' , Database::VAR_VECTOR , 3 , true );
2669+ $ database ->createAttribute ('vectorSum ' , 'value ' , Database::VAR_INTEGER , 0 , true );
2670+
2671+ // Create documents with different values
2672+ $ database ->createDocument ('vectorSum ' , new Document ([
2673+ '$permissions ' => [
2674+ Permission::read (Role::any ())
2675+ ],
2676+ 'embedding ' => [1.0 , 0.0 , 0.0 ],
2677+ 'value ' => 10
2678+ ]));
2679+
2680+ $ database ->createDocument ('vectorSum ' , new Document ([
2681+ '$permissions ' => [
2682+ Permission::read (Role::any ())
2683+ ],
2684+ 'embedding ' => [0.0 , 1.0 , 0.0 ],
2685+ 'value ' => 20
2686+ ]));
2687+
2688+ $ database ->createDocument ('vectorSum ' , new Document ([
2689+ '$permissions ' => [
2690+ Permission::read (Role::any ())
2691+ ],
2692+ 'embedding ' => [0.5 , 0.5 , 0.0 ],
2693+ 'value ' => 30
2694+ ]));
2695+
2696+ // Test sum with vector query - should sum all matching documents
2697+ $ sum = $ database ->sum ('vectorSum ' , 'value ' , [
2698+ Query::vectorCosine ('embedding ' , [1.0 , 0.0 , 0.0 ]),
2699+ ]);
2700+
2701+ $ this ->assertEquals (60 , $ sum );
2702+
2703+ // Test sum with vector query and filter combined
2704+ $ sum = $ database ->sum ('vectorSum ' , 'value ' , [
2705+ Query::vectorCosine ('embedding ' , [1.0 , 0.0 , 0.0 ]),
2706+ Query::greaterThan ('value ' , 15 ),
2707+ ]);
2708+
2709+ $ this ->assertEquals (50 , $ sum );
2710+
2711+ $ database ->deleteCollection ('vectorSum ' );
2712+ }
2713+
2714+ public function testVetorUpsert (): void
2715+ {
2716+ /** @var Database $database */
2717+ $ database = static ::getDatabase ();
2718+
2719+ if (!$ database ->getAdapter ()->getSupportForVectors ()) {
2720+ $ this ->expectNotToPerformAssertions ();
2721+ return ;
2722+ }
2723+
2724+ $ database ->createCollection ('vectorUpsert ' );
2725+ $ database ->createAttribute ('vectorUpsert ' , 'embedding ' , Database::VAR_VECTOR , 3 , true );
2726+
2727+ $ insertedDoc = $ database ->upsertDocument ('vectorUpsert ' , new Document ([
2728+ '$id ' => 'vectorUpsert ' ,
2729+ '$permissions ' => [
2730+ Permission::read (Role::any ()),
2731+ Permission::update (Role::any ())
2732+ ],
2733+ 'embedding ' => [1.0 , 0.0 , 0.0 ],
2734+ ]));
2735+
2736+ $ this ->assertEquals ([1.0 , 0.0 , 0.0 ], $ insertedDoc ->getAttribute ('embedding ' ));
2737+
2738+ $ insertedDoc = $ database ->getDocument ('vectorUpsert ' , 'vectorUpsert ' );
2739+ $ this ->assertEquals ([1.0 , 0.0 , 0.0 ], $ insertedDoc ->getAttribute ('embedding ' ));
2740+
2741+ $ updatedDoc = $ database ->upsertDocument ('vectorUpsert ' , new Document ([
2742+ '$id ' => 'vectorUpsert ' ,
2743+ '$permissions ' => [
2744+ Permission::read (Role::any ()),
2745+ Permission::update (Role::any ())
2746+ ],
2747+ 'embedding ' => [2.0 , 0.0 , 0.0 ],
2748+ ]));
2749+
2750+ $ this ->assertEquals ([2.0 , 0.0 , 0.0 ], $ updatedDoc ->getAttribute ('embedding ' ));
2751+
2752+ $ updatedDoc = $ database ->getDocument ('vectorUpsert ' , 'vectorUpsert ' );
2753+ $ this ->assertEquals ([2.0 , 0.0 , 0.0 ], $ updatedDoc ->getAttribute ('embedding ' ));
2754+
2755+ $ database ->deleteCollection ('vectorUpsert ' );
2756+ }
26272757}
0 commit comments