COBOL Pre-Compiler Handling Variable-Length SQL Strings

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Current pre-compilers, such as Oracle's Pro*COBOL, are unable to replace expressions of predefined form in embedded SQL instructions with generic COBOL code, particularly when using variable-length character variables, limiting their compatibility with different databases.

Innovation Solution

A pre-compiler that analyzes source code in COBOL, identifies variables of variable length, and replaces embedded SQL instructions with indicator variables, converting them into COBOL replacement code to ensure compatibility with any database, allowing only the first N characters of the main variable to be sent, thus enabling interpretation by any database system.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Adaptability or versatility

If a pre-compiler uses predefined form expressions in embedded SQL instructions with variable-length character variables, then the database can interpret and process the character strings, but the system is incompatible with databases that do not support such predefined forms

Engineering Contradiction:
Improvedatabase compatibilityVSAvoidpreprocessing complexity
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The pre-compiler performs preliminary substitution of predefined form expressions (like :VAR:LEN) with generic COBOL code that extracts the first N characters. This advance processing eliminates the need for database-specific interpretation of predefined forms, enabling compatibility with any database while maintaining variable-length character variable functionality.

Inventive Principle:
Principle #10Preliminary action

2Adaptability or versatility

If the pre-compiler replaces predefined form expressions with generic COBOL code, then compatibility with any database is achieved, but the database loses the ability to directly interpret the original expressions

Engineering Contradiction:
Improvedatabase portabilityVSAvoidexpression semantics
Core Design Contradiction:
Adaptability or versatilityVSLoss of information

Solution Approach 1:

The pre-compiler acts as an intermediary that translates database-specific predefined form expressions into universal COBOL code. The substitution mechanism preserves the semantic meaning of variable-length character handling by using COBOL's intrinsic capabilities to extract the first N characters, ensuring that the functional intent is maintained while achieving database portability.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Loss of energy

If indicator variables are used to specify the number of characters to be used, then only relevant data is processed, but the syntax becomes more complex requiring predefined form expressions

Engineering Contradiction:
Improvedata processing efficiencyVSAvoidsyntax complexity
Core Design Contradiction:
Loss of energyVSDevice complexity

Solution Approach 1:

The invention extracts the indicator variable mechanism from Oracle-specific syntax and implements it through standard COBOL code. By substituting predefined form expressions with COBOL's native string extraction capabilities, the solution maintains the efficiency benefit of processing only the first N characters while eliminating the syntax complexity of database-specific predefined forms.

Inventive Principle:
Principle #2Taking out (Extraction)

Data Source

PatentEP3588274B1Pre compilation for embedded SQL in cobol source code
Publication Date: 2024.04.03 BULL SA
  • EP3588274B1 patent drawingFigure 1
  • EP3588274B1 patent drawingFigure 2

AI summary

This precompiler (120) is designed to analyze source code (116) comprising main code written in a primary programming language and at least one block of code written in another programming language embedded within the main code, and to replace each embedded code block with replacement code in the primary programming language. It is further designed to search within the embedded code block(s) for an expression containing a main variable intended to hold a string, an indicator variable intended to hold an integer, and one or more predefined characters for associating the main and indicator variables, and to replace each expression found with code in the primary programming language providing the first N characters of the first variable, where N is the value of the indicator variable.