| 1118 | // |
| 1119 | |
| 1120 | static void gen_blob_open( const act* action) |
| 1121 | { |
| 1122 | const TEXT* pattern1 = |
| 1123 | "CALL \"isc_%IFcreate%ELopen%EN_blob2\" USING %V1, %RF%DH%RE, %RF%RT%RE, %RF%BH%RE, %RF%FR%RE, %VF%N1%VE, %RF%I1%RE\n"; |
| 1124 | const TEXT* pattern2 = |
| 1125 | "CALL \"isc_%IFcreate%ELopen%EN_blob2\" USING %V1, %RF%DH%RE, %RF%RT%RE, %RF%BH%RE, %RF%FR%RE, %VF0%VE, %VF0%VE\n"; |
| 1126 | |
| 1127 | if (gpreGlob.sw_auto && (action->act_flags & ACT_sql)) |
| 1128 | { |
| 1129 | t_start_auto(action->act_request, status_vector(action), action, true); |
| 1130 | printa(names[COLUMN], false, "IF %s NOT = 0 THEN", request_trans(action, action->act_request)); |
| 1131 | } |
| 1132 | |
| 1133 | TEXT s[MAX_REF_SIZE]; |
| 1134 | const blb* blob; |
| 1135 | const ref* reference; |
| 1136 | if (action->act_flags & ACT_sql) |
| 1137 | { |
| 1138 | gen_cursor_open(action, action->act_request); |
| 1139 | blob = (blb*) action->act_request->req_blobs; |
| 1140 | reference = ((open_cursor*) action->act_object)->opn_using; |
| 1141 | gen_name(s, reference, true); |
| 1142 | } |
| 1143 | else |
| 1144 | { |
| 1145 | blob = (blb*) action->act_object; |
| 1146 | reference = blob->blb_reference; |
| 1147 | } |
| 1148 | |
| 1149 | const USHORT column = static_cast<USHORT>(strlen(names[COLUMN])); |
| 1150 | PAT args; |
| 1151 | args.pat_condition = (action->act_type == ACT_blob_create); // open or create blob |
| 1152 | args.pat_vector1 = status_vector(action); // status vector |
| 1153 | args.pat_database = blob->blb_request->req_database; // database handle |
| 1154 | args.pat_request = blob->blb_request; // transaction handle |
| 1155 | args.pat_blob = blob; // blob handle |
| 1156 | args.pat_reference = reference; // blob identifier |
| 1157 | args.pat_ident1 = blob->blb_bpb_ident; // blob parameter block |
| 1158 | |
| 1159 | if ((action->act_flags & ACT_sql) && action->act_type == ACT_blob_open) |
| 1160 | printa(names[COLUMN], false, "MOVE %s TO %s", reference->ref_value, s); |
| 1161 | |
| 1162 | if (args.pat_value1 = blob->blb_bpb_length) |
| 1163 | PATTERN_expand(column, pattern1, &args); |
| 1164 | else |
| 1165 | PATTERN_expand(column, pattern2, &args); |
| 1166 | |
| 1167 | if (action->act_flags & ACT_sql) |
| 1168 | { |
| 1169 | printa(names[COLUMN], false, "END-IF"); |
| 1170 | printa(names[COLUMN], false, "END-IF"); |
| 1171 | printa(names[COLUMN], false, "END-IF"); |
| 1172 | printa(names[COLUMN], false, "END-IF"); |
| 1173 | if (gpreGlob.sw_auto) |
| 1174 | printa(names[COLUMN], false, "END-IF"); |
| 1175 | set_sqlcode(action); |
| 1176 | if (action->act_type == ACT_blob_create) |
| 1177 | { |
no test coverage detected