1- <<<<<<< add -oracle -store
21/*
32 ** Semantic Kernel Oracle connector version 1.0.
43 **
54 ** Copyright (c) 2025 Oracle and/or its affiliates.
65 ** Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
76 */
8- =======
9- >>>>>>> main
107package com .microsoft .semantickernel .data .jdbc .oracle ;
118
129import com .microsoft .semantickernel .data .jdbc .oracle .OracleVectorStoreQueryProvider .StringTypeMapping ;
1310import com .microsoft .semantickernel .data .vectorstorage .definition .VectorStoreRecordDataField ;
14- <<<<<<< add -oracle -store
1511import com .microsoft .semantickernel .data .vectorstorage .definition .VectorStoreRecordField ;
16- =======
17- >>>>>>> main
1812import com .microsoft .semantickernel .data .vectorstorage .definition .VectorStoreRecordKeyField ;
1913import com .microsoft .semantickernel .data .vectorstorage .definition .VectorStoreRecordVectorField ;
2014import oracle .jdbc .OracleTypes ;
2923import java .util .stream .Collectors ;
3024
3125/**
32- <<<<<<< add-oracle-store
3326 * Helper class for field operations. Handles mapping between field java types to DB types and
3427 * generating SQL statement to create field indexes.
3528 */
@@ -39,29 +32,13 @@ class OracleVectorStoreFieldHelper {
3932 * The logger
4033 */
4134 private static final Logger LOGGER = Logger .getLogger (OracleVectorStoreFieldHelper .class .getName ());
42- =======
43- * Helper class for field operations .
44- */
45- public class OracleVectorStoreFieldHelper {
46- private static final Logger LOGGER = Logger .getLogger (OracleVectorStoreQueryProvider .class .getName ());
47- >>>>>>> main
4835
4936 /**
5037 * Maps supported key java classes to Oracle database types
5138 */
5239 private static final HashMap <Class <?>, String > supportedKeyTypes = new HashMap () {
5340 {
5441 put (String .class , String .format (OracleDataTypesMapping .STRING_VARCHAR , 255 ));
55- <<<<<<< add -oracle -store
56- =======
57- put (short .class , OracleDataTypesMapping .SHORT );
58- put (Short .class , OracleDataTypesMapping .SHORT );
59- put (int .class , OracleDataTypesMapping .INTEGER );
60- put (Integer .class , OracleDataTypesMapping .INTEGER );
61- put (long .class , OracleDataTypesMapping .LONG );
62- put (Long .class , OracleDataTypesMapping .LONG );
63- put (UUID .class , OracleDataTypesMapping .UUID );
64- >>>>>>> main
6542 }
6643 };
6744
@@ -75,17 +52,6 @@ public class OracleVectorStoreFieldHelper {
7552 put (Collection .class , OracleDataTypesMapping .VECTOR_FLOAT );
7653 put (float [].class , OracleDataTypesMapping .VECTOR_FLOAT );
7754 put (Float [].class , OracleDataTypesMapping .VECTOR_FLOAT );
78- <<<<<<< add -oracle -store
79- =======
80- /*
81- put(byte[].class,"VECTOR(%s, INT8)");
82- put(Byte[].class,"VECTOR(%s, INT8)");
83- put(double[].class,"VECTOR(%s, FLOAT64)");
84- put(Double[].class,"VECTOR(%s, FLOAT64)");
85- put(boolean[].class,"VECTOR(%s, BINARY)");
86- put(Boolean[].class,"VECTOR(%s, BINARY)");
87- */
88- >>>>>>> main
8955 }
9056 };
9157
@@ -114,35 +80,12 @@ public class OracleVectorStoreFieldHelper {
11480 put (byte [].class , OracleDataTypesMapping .BYTE_ARRAY );
11581 put (List .class , OracleDataTypesMapping .JSON );
11682 }
117- <<<<<<< add -oracle -store
11883 };
11984
12085 /**
12186 * Suffix added to the effective column name to generate the index name for a vector column.
12287 */
12388 public static final String VECTOR_INDEX_SUFFIX = "_VECTOR_INDEX" ;
124- =======
125-
126- };
127-
128- /**
129- * Maps vector type to OracleTypes. Only needed if types other than FLOAT_32 are supported.
130- */
131- private static final Map <Class <?>, Integer > mapOracleTypeToVector = new HashMap () {
132- {
133- put (float [].class , OracleTypes .VECTOR_FLOAT32 );
134- put (Float [].class , OracleTypes .VECTOR_FLOAT32 );
135- /*
136- put(byte[].class, OracleTypes.VECTOR_INT8);
137- put(Byte[].class, OracleTypes.VECTOR_INT8);
138- put(Double[].class, OracleTypes.VECTOR_FLOAT64);
139- put(double[].class, OracleTypes.VECTOR_FLOAT64);
140- put(Boolean[].class, OracleTypes.VECTOR_BINARY);
141- put(boolean[].class, OracleTypes.VECTOR_BINARY);
142- */
143- }
144- };
145- >>>>>>> main
14689
14790 /**
14891 * Gets the mapping between the supported Java key types and the Oracle database type.
@@ -160,20 +103,11 @@ public static HashMap<Class<?>, String> getSupportedKeyTypes() {
160103 */
161104 public static Map <Class <?>, String > getSupportedDataTypes (
162105 StringTypeMapping stringTypeMapping , int defaultVarCharLength ) {
163- <<<<<<< add -oracle -store
164106 String stringType = stringTypeMapping .equals (StringTypeMapping .USE_VARCHAR )
165107 ? String .format (OracleDataTypesMapping .STRING_VARCHAR , defaultVarCharLength )
166108 : OracleDataTypesMapping .STRING_CLOB ;
167109 supportedDataTypes .put (String .class , stringType );
168110 LOGGER .finest ("Mapping String columns to " + stringType );
169- =======
170-
171- if (stringTypeMapping .equals (StringTypeMapping .USE_VARCHAR )) {
172- supportedDataTypes .put (String .class , String .format (OracleDataTypesMapping .STRING_VARCHAR , defaultVarCharLength ));
173- } else {
174- supportedDataTypes .put (String .class , OracleDataTypesMapping .STRING_CLOB );
175- }
176- >>>>>>> main
177111 return supportedDataTypes ;
178112 }
179113
@@ -224,22 +158,14 @@ public static String getCreateVectorIndexStatement(VectorStoreRecordVectorField
224158 */
225159 public static String createIndexForDataField (String collectionTableName , VectorStoreRecordDataField dataField , Map <Class <?>, String > supportedDataTypes ) {
226160 if (supportedDataTypes .get (dataField .getFieldType ()) == "JSON" ) {
227- <<<<<<< add -oracle -store
228161 String dataFieldIndex = "CREATE MULTIVALUE INDEX IF NOT EXISTS %s ON %s t (t.%s.%s)" ;
229- =======
230- String dataFieldIndex = "CREATE MULTIVALUE INDEX %s ON %s t (t.%s.%s)" ;
231- >>>>>>> main
232162 return String .format (dataFieldIndex ,
233163 collectionTableName + "_" + dataField .getEffectiveStorageName (),
234164 collectionTableName ,
235165 dataField .getEffectiveStorageName (),
236166 getFunctionForType (supportedDataTypes .get (dataField .getFieldSubType ())));
237167 } else {
238- <<<<<<< add -oracle -store
239168 String dataFieldIndex = "CREATE INDEX IF NOT EXISTS %s ON %s (%s ASC)" ;
240- =======
241- String dataFieldIndex = "CREATE INDEX %s ON %s (%s ASC)" ;
242- >>>>>>> main
243169 return String .format (dataFieldIndex ,
244170 collectionTableName + "_" + dataField .getEffectiveStorageName (),
245171 collectionTableName ,
@@ -249,7 +175,6 @@ public static String createIndexForDataField(String collectionTableName, VectorS
249175 }
250176
251177 /**
252- <<<<<<< add-oracle-store
253178 * Returns vector columns names and types for CREATE TABLE statement
254179 * @param fields list of vector record fields.
255180 * @return comma separated list of columns and types for CREATE TABLE statement.
@@ -294,8 +219,6 @@ private static String getTypeForVectorField(VectorStoreRecordVectorField field)
294219 }
295220
296221 /**
297- =======
298- >>>>>>> main
299222 * Gets the function that allows to return the function that converts the JSON value to the
300223 * data type.
301224 * @param jdbcType The JDBC type.
@@ -321,93 +244,4 @@ private static String getFunctionForType(String jdbcType) {
321244 }
322245 }
323246
324- <<<<<<< add -oracle -store
325- =======
326- /**
327- * Gets the type of the vector given the field definition. This method is not needed if only
328- *
329- * @param field the vector field definition.
330- * @return returns the type of vector for the given field type.
331- */
332- public static String getTypeForVectorField (VectorStoreRecordVectorField field ) {
333- String dimension = field .getDimensions () > 0 ? String .valueOf (field .getDimensions ()) : "*" ;
334- return String .format (supportedVectorTypes .get (field .getFieldType ()), dimension );
335- /* Not needed since all types are FLOAT32
336- if (field.getFieldSubType() != null) {
337- String vectorType;
338- switch (field.getFieldSubType().getName()) {
339- case "java.lang.Double":
340- vectorType = "FLOAT64";
341- break;
342- case "java.lang.Byte":
343- vectorType = "INT8";
344- break;
345- case "java.lang.Boolean":
346- vectorType = "BINARY";
347- break;
348- default:
349- vectorType = "FLOAT32";
350- }
351- return String.format(supportedVectorTypes.get(field.getFieldType()), dimension, vectorType);
352- } else {
353- return String.format(supportedVectorTypes.get(field.getFieldType()), dimension);
354- }
355- */
356- }
357-
358- /**
359- * Gets the JDBC oracle of the vector field definition.
360- * @param field the vector field definition.
361- * @return the JDBC oracle type.
362- */
363- public static int getOracleTypeForField (VectorStoreRecordVectorField field ) {
364- if (field .getFieldSubType () == null ) {
365- return mapOracleTypeToVector .get (field .getFieldType ()).intValue ();
366- } else {
367- switch (field .getFieldSubType ().getName ()) {
368- case "java.lang.Double" :
369- return OracleTypes .VECTOR_FLOAT64 ;
370- case "java.lang.Byte" :
371- return OracleTypes .VECTOR_INT8 ;
372- case "java.lang.Boolean" :
373- return OracleTypes .VECTOR_BINARY ;
374- default :
375- return OracleTypes .VECTOR_FLOAT32 ;
376- }
377- }
378- }
379-
380- /**
381- * Generates the index name given the field name. by suffixing "_VECTOR_INDEX" to the field name.
382- * @param effectiveStorageName the field name.
383- * @return the index name.
384- */
385- private static String getIndexName (String effectiveStorageName ) {
386- return effectiveStorageName + "_VECTOR_INDEX" ;
387- }
388-
389- /**
390- * Returns vector columns names and types for CREATE TABLE statement
391- * @param fields list of vector record fields.
392- * @return comma separated list of columns and types for CREATE TABLE statement.
393- */
394- public static String getVectorColumnNamesAndTypes (List <VectorStoreRecordVectorField > fields ) {
395- List <String > columns = fields .stream ()
396- .map (field -> field .getEffectiveStorageName () + " " +
397- OracleVectorStoreFieldHelper .getTypeForVectorField (field )
398- ).collect (Collectors .toList ());
399-
400- return String .join (", " , columns );
401- }
402-
403- /**
404- * Returns key column names and type for key column for CREATE TABLE statement
405- * @param field the key field.
406- * @return column name and type of the key field for CREATE TABLE statement.
407- */
408- public static String getKeyColumnNameAndType (VectorStoreRecordKeyField field ) {
409- return field .getEffectiveStorageName () + " " + supportedKeyTypes .get (field .getFieldType ());
410- }
411-
412- >>>>>>> main
413247}
0 commit comments