Changeset: c53732ddf552 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/c53732ddf552
Modified Files:
        monetdb5/modules/kernel/vss.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_statement.c
Branch: nested
Log Message:

fix stmt output when vector literal


diffs (82 lines):

diff --git a/monetdb5/modules/kernel/vss.c b/monetdb5/modules/kernel/vss.c
--- a/monetdb5/modules/kernel/vss.c
+++ b/monetdb5/modules/kernel/vss.c
@@ -137,29 +137,34 @@ DEFINE_METRIC_L2SQ(f64, dbl, dbl)
  * @param T    The scalar type for input vectors (e.g., float, double).
  * @param R    The result/accumulation type (to prevent overflow).
  */
-#define DEFINE_METRIC_COS(NAME, T, R)                                          
\
-static R                                                                       
                                                                \
-metric_cos_##NAME(MalStkPtr stk, InstrPtr pci, size_t dim) {                 \
-    R ab = 0, a2 = 0, b2 = 0;                                                  
\
-                                                                               
\
-    /* SIMD optimization hints */                                              
\
-    GCC_Pragma("GCC ivdep")                                                    
   \
-    for (size_t i = 0; i < dim; i++) {                                         
\
+#define DEFINE_METRIC_COS(NAME, T, R)                                          
                                        \
+static R                                                                       
                                                                        \
+metric_cos_##NAME(MalStkPtr stk, InstrPtr pci, size_t dim) {                   
                \
+    R ab = 0, a2 = 0, b2 = 0;                                                  
                                                \
+                                                                               
                                                                                
\
+    /* SIMD optimization hints */                                              
                                                \
+    GCC_Pragma("GCC ivdep")                                                    
 \
+    for (size_t i = 0; i < dim; i++) {                                         
                                        \
         T ai = *getArgReference_##T(stk, pci, 1 + i);                          
 \
         T bi = *getArgReference_##T(stk, pci, 1 + dim + i);                    
 \
-        ab += ai * bi;                                                         
\
-        a2 += ai * ai;                                                         
\
-        b2 += bi * bi;                                                         
\
-    }                                                                          
\
-    R result_if_zero[2][2];                                                    
\
-    R norm_a = SELECT_SQRT(R, a2);                                             
\
-    R norm_b = SELECT_SQRT(R, b2);                                             
\
-                                                                               
\
-    result_if_zero[0][0] = (R)1.0 - (ab / (norm_a * norm_b));                  
\
-    result_if_zero[0][1] = (R)1.0;                                             
\
-    result_if_zero[1][0] = (R)1.0;                                             
\
-    result_if_zero[1][1] = (R)0.0;                                             
\
-    return result_if_zero[a2 == 0][b2 == 0];                                   
\
+        ab += (R)ai * (R)bi;                                                   
                                                                \
+        a2 += (R)ai * (R)ai;                                                   
                                                                \
+        b2 += (R)bi * (R)bi;                                                   
                                                                \
+    }                                                                          
                                                                        \
+    R result_if_zero[2][2];                                                    
                                                        \
+    R norm_a = SELECT_SQRT(R, a2);                                             
                                                \
+    R norm_b = SELECT_SQRT(R, b2);                                             
                                                \
+       R similarity = (ab / (norm_a * norm_b));                                
                                        \
+       /* Keep in range */                                                     
                                                                \
+    if (similarity > (R)1.0)                                                   
                                                \
+        similarity = (R)1.0;                                                   
                                                \
+    else if (similarity < (R)-1.0)                                             
                                                \
+        similarity = (R)-1.0;                                                  
                                                \
+    result_if_zero[0][0] = (R)1.0 - (R)similarity;                             
                                \
+    result_if_zero[0][1] = (R)1.0;                                             
        \
+    result_if_zero[1][0] = (R)1.0;                                             
        \
+    result_if_zero[1][1] = (R)0.0;                                             
        \
+    return result_if_zero[a2 == 0][b2 == 0];                                   
        \
 }
 
 // For float (32-bit)
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1597,7 +1597,6 @@ exp2stmt_vector(backend *be, sql_exp *e,
        }
        stmt *s = stmt_list(be, l);
        s->nested = true;
-       s->nrcols = 3;
        s->subtype = *t;
        return s;
 }
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -3620,7 +3620,7 @@ stmt_output(backend *be, stmt *lst)
        stmt *first = n->data;
 
        /* single value result, has a fast exit */
-       if (cnt == 1 && first->nrcols <= 0 ){
+       if (cnt == 1 && first && (first->nrcols <= 0) && !first->nested){
                allocator *ta = MT_thread_getallocator();
                allocator_state ta_state = ma_open(ta);
                stmt *c = n->data;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to