in sources/cg_java.c [330:464]
static void cg_java_proc_result_set(ast_node *ast, cg_java_context *java_context) {
EXTRACT_MISC_ATTRS(ast, misc_attrs);
EXTRACT_STRING(name, ast->left);
// if getters are suppressed the entire class is moot
// if result set is suppressed the entire class is moot
// private implies result set suppressed so also moot
bool_t suppressed =
exists_attribute_str(misc_attrs, "suppress_getters") ||
exists_attribute_str(misc_attrs, "suppress_result_set") ||
exists_attribute_str(misc_attrs, "private");
if (suppressed) {
return;
}
Invariant(!use_encode);
Invariant(!encode_context_column);
Invariant(!encode_columns);
encode_columns = symtab_new();
init_encode_info(misc_attrs, &use_encode, &encode_context_column, encode_columns);
bool_t custom_type_for_encoded_column = !!exists_attribute_str(misc_attrs, "custom_type_for_encoded_column");
uint32_t frag_type = find_fragment_attr_type(misc_attrs, &base_fragment_name);
bool_t is_query_proc = cg_java_frag_type_query_proc(frag_type);
cg_java_validate_proc_count(java_context, frag_type);
Contract(is_ast_create_proc_stmt(ast));
Contract(is_struct(ast->sem->sem_type));
EXTRACT_NOTNULL(proc_params_stmts, ast->right);
EXTRACT(params, proc_params_stmts->left);
sem_struct *sptr = ast->sem->sptr;
uint32_t count = sptr->count;
uint32_t col_count_for_base = 0;
if (!options.java_fragment_interface_mode) {
cg_java_fragment_columns(name, java_context, frag_type, &count, &col_count_for_base);
}
CHARBUF_OPEN(body);
CHARBUF_OPEN(class_name);
extract_base_path_without_extension(&class_name, options.file_names[0]);
CHARBUF_OPEN(implements_interface);
if (options.java_fragment_interface_mode && frag_type != FRAG_TYPE_NONE) {
cg_java_write_implements_interface(&implements_interface, name, java_context, frag_type);
}
bool_t out_stmt_proc = has_out_stmt_result(ast);
// Stored procedure name constant does not make sense for extension fragments since the application layer
// that coordinates access to them will be dealing with assembly
if (is_query_proc) {
bprintf(&body, "public static final String STORED_PROCEDURE_NAME = \"%s\";\n\n", name);
}
if (!options.java_fragment_interface_mode) {
cg_java_write_fragment_class_accessors(&body, name, frag_type, java_context, col_count_for_base);
}
if (!options.java_fragment_interface_mode || is_query_proc) {
bprintf(&body,
"public %s(CQLResultSet resultSet) {\n"
" super(resultSet);\n"
"}\n\n",
class_name.ptr);
}
bool_t is_string_column_encoded = false;
// For each field emit the _get_field method
for (int32_t i = 0; i < count; i++) {
sem_t sem_type = sptr->semtypes[i];
CSTR col = sptr->names[i];
bool_t encode = should_encode_col(col, sem_type, use_encode, encode_columns);
is_string_column_encoded += custom_type_for_encoded_column && encode && core_type_of(sem_type) == SEM_TYPE_TEXT;
cg_java_proc_result_set_getter(
out_stmt_proc,
name,
col,
i,
&body,
sem_type,
encode,
custom_type_for_encoded_column,
frag_type,
col_count_for_base);
}
CG_CHARBUF_OPEN_SYM(get_count, "", "get_count");
CHARBUF_OPEN(get_count_sig);
cg_java_getter_sig(&get_count_sig, rt->cql_int32, get_count.ptr, "");
if (!options.java_fragment_interface_mode || is_query_proc) {
bprintf(&body, rt->cql_result_set_get_count, get_count_sig.ptr);
} else {
bprintf(&body, "%s;\n\n", get_count_sig.ptr);
}
bool_t generate_copy = misc_attrs && exists_attribute_str(misc_attrs, "generate_copy");
if (generate_copy) {
bprintf(&body, rt->cql_result_set_copy, class_name.ptr, class_name.ptr);
}
if (!options.java_fragment_interface_mode || is_query_proc) {
bool_t include_identity_columns = misc_attrs != NULL ? find_identity_columns(misc_attrs, no_op, NULL) != 0 : 0;
bprintf(&body, rt->cql_result_set_has_identity_columns, include_identity_columns ? "true" : "false");
}
CHARBUF_OPEN(cg_java_output);
CSTR custom_class_import = is_string_column_encoded ? rt->cql_string_ref_encode_include : "";
bprintf(&cg_java_output, "%s", rt->source_prefix);
bprintf(&cg_java_output, rt->source_wrapper_begin, options.java_package_name, custom_class_import);
cg_java_write_imports(&cg_java_output, frag_type);
cg_java_write_class_or_interface(
&cg_java_output,
frag_type,
&class_name,
&implements_interface,
&body);
cql_write_file(options.file_names[0], cg_java_output.ptr);
CHARBUF_CLOSE(cg_java_output);
CHARBUF_CLOSE(get_count_sig);
CHARBUF_CLOSE(get_count);
CHARBUF_CLOSE(implements_interface);
CHARBUF_CLOSE(class_name);
CHARBUF_CLOSE(body);
java_context->generated_proc_count++;
use_encode = 0;
symtab_delete(encode_columns);
encode_columns = NULL;
encode_context_column = NULL;
}