Skip to content

Commit

Permalink
Manual merge from "evo" branch
Browse files Browse the repository at this point in the history
  • Loading branch information
mridoni committed Sep 9, 2023
1 parent c1c9920 commit 738282e
Show file tree
Hide file tree
Showing 45 changed files with 747 additions and 439 deletions.
25 changes: 12 additions & 13 deletions common/varlen_defs.h
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
#pragma once

#ifdef USE_VARLEN_16
#define VARLEN_LENGTH_PIC "9(4) COMP-5"
#define VARLEN_PIC_SZ 4
#define VARLEN_LENGTH_SZ 2
#define VARLEN_LENGTH_T uint16_t
#define VARLEN_BSWAP COB_BSWAP_16
#else
#define VARLEN_LENGTH_PIC "9(8) COMP-5"
#define VARLEN_PIC_SZ 9
#define VARLEN_LENGTH_SZ 4
#define VARLEN_LENGTH_T uint32_t
#define VARLEN_BSWAP COB_BSWAP_32
#endif

#define S_VARLEN_LENGTH_PIC "9(4) COMP-5"
#define S_VARLEN_PIC_SZ 4
#define S_VARLEN_LENGTH_SZ 2
#define S_VARLEN_LENGTH_T uint16_t
#define S_VARLEN_BSWAP COB_BSWAP_16

#define L_VARLEN_LENGTH_PIC "9(8) COMP-5"
#define L_VARLEN_PIC_SZ 9
#define L_VARLEN_LENGTH_SZ 4
#define L_VARLEN_LENGTH_T uint32_t
#define L_VARLEN_BSWAP COB_BSWAP_32
15 changes: 13 additions & 2 deletions gixpp/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ USA.

#define GIXPP_VER VERSION

#define DEFAULT_VARYING_LEN_SZ "4"

using namespace popl;

bool is_alias(const std::string& f, std::string& ext);
Expand Down Expand Up @@ -77,7 +79,7 @@ int main(int argc, char** argv)
auto opt_esql = options.add<Switch>("e", "esql", "preprocess for ESQL");
auto opt_esql_preprocess_copy = options.add<Switch>("p", "esql-preprocess-copy", "ESQL: preprocess all included COPY files");
auto opt_esql_copy_exts = options.add<Value<std::string>>("E", "esql-copy-exts", "ESQL: copy files extension list (comma-separated)");
auto opt_esql_param_style = options.add<Value<std::string>>("z", "param-style", "ESQL: generated parameters style (=a|d|c", "d");
auto opt_esql_param_style = options.add<Value<std::string>>("z", "param-style", "ESQL: generated parameters style (=a|d|c)", "d");
auto opt_esql_static_calls = options.add<Switch>("S", "esql-static-calls", "ESQL: emit static calls");
auto opt_debug_info = options.add<Switch>("g", "debug-info", "generate debug info");
auto opt_consolidate = options.add<Switch>("c", "consolidate", "consolidate source to single-file");
Expand All @@ -88,6 +90,7 @@ int main(int argc, char** argv)
auto opt_emit_map_file = options.add<Switch>("m", "map", "emit map file");
auto opt_emit_cobol85 = options.add<Switch>("C", "cobol85", "emit COBOL85-compliant code");
auto opt_varying_ids = options.add<Value<std::string>>("Y", "varying", "length/data suffixes for varlen fields (=LEN,ARR)");
auto opt_varying_len_sz = options.add<Value<std::string>>("N", "varying-length-size", "size of the length indicator fields for VARYING fields(=2|4))", DEFAULT_VARYING_LEN_SZ);
auto opt_picx_as_varchar = options.add<Value<std::string>>("P", "picx-as", "text field options (=char|charf|varchar)", "char");
auto opt_no_rec_code = options.add<Value<std::string>>("", "no-rec-code", "custom code for \"no record\" condition(=nnn)");

Expand Down Expand Up @@ -129,7 +132,6 @@ int main(int argc, char** argv)

if (opt_picx_as_varchar->is_set() && opt_picx_as_varchar->value() != "char" && opt_picx_as_varchar->value() != "charf" && opt_picx_as_varchar->value() != "varchar") {
std::cout << options << std::endl;
fprintf(stderr, "ERROR: picx argument must be \"charf\" or \"varchar\"\n");
fprintf(stderr, "ERROR: -P/--picx-as argument must be one of \"char\", \"charf\", \"varchar\"\n");
return 1;
}
Expand All @@ -144,6 +146,12 @@ int main(int argc, char** argv)
}
}

if (opt_varying_len_sz->is_set() && opt_varying_len_sz->value() != "2" && opt_varying_len_sz->value() != "4") {
std::cout << options << std::endl;
fprintf(stderr, "ERROR: -N/--varying-length-size argument must be one of \"2\", \"4\"\n");
return 1;
}

CopyResolver copy_resolver(filename_get_dir(filename_absolute_path(opt_infile->value())));

copy_resolver.setVerbose(opt_verbose->is_set());
Expand Down Expand Up @@ -176,6 +184,9 @@ int main(int argc, char** argv)
gp.setOpt("picx_as_varchar", to_lower(opt_picx_as_varchar->value()) == "varchar");
gp.setOpt("debug_parser_scanner", opt_parser_scanner_debug->is_set());

std::string vls = opt_varying_len_sz->value_or(DEFAULT_VARYING_LEN_SZ);
gp.setOpt("varying_len_sz_short", (vls == "2"));

if (opt_esql_copy_exts->is_set())
copy_resolver.setExtensions(string_split(opt_esql_copy_exts->value(), ","));

Expand Down
2 changes: 1 addition & 1 deletion gixsql-tests-nunit/data/TSQL006A.cbl
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
DISPLAY 'EXECUTE IMMEDIATE(1): ' SQLCODE

MOVE 'UPDATE TAB1 SET FLD1=FLD1+100, FLD2=FLD2+300'
- TO DYNSTMT1-ARR.
TO DYNSTMT1-ARR.

MOVE FUNCTION LENGTH(FUNCTION TRIM(DYNSTMT1-ARR))
TO DYNSTMT1-LEN.
Expand Down
10 changes: 7 additions & 3 deletions gixsql-tests-nunit/data/TSQL017A.cbl
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,14 @@
100-MAIN.

MOVE 1 TO IDX.
MOVE 'INSERT INTO TAB_A (KEY01, COL1, COL2)
- ' VALUES ($1, $2, $3)' TO STMT-1
MOVE 'INSERT INTO TAB_A
- ' (KEY01, COL1, COL2)
- ' VALUES
- ' ($1, $2, $3)' TO STMT-1.

EXEC SQL AT :DBS PREPARE ST1 FROM :STMT-1 END-EXEC.
EXEC SQL AT :DBS
PREPARE ST1
FROM :STMT-1 END-EXEC.
DISPLAY 'PREPARE(1) SQLCODE: ' SQLCODE.
IF SQLCODE <> 0 THEN
GO TO 100-EXIT
Expand Down
14 changes: 7 additions & 7 deletions gixsql-tests-nunit/data/TSQL030A.cbl
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@
EXEC SQL PREPARE ST1
FROM
"SELECT MAX(CID) FROM TAB00 WHERE
- VCFLD1 NOT IN (
- 'AAAAA' ,'BBBBBB' ,'CCCCCCCC' ,'DDDD' ,'EEEEEEEE'
- )"
- "VCFLD1 NOT IN (
- "'AAAAA' ,'BBBBBB' ,'CCCCCCCC' ,'DDDD' ,'EEEEEEEE'
- ")"
END-EXEC.
IF SQLCODE <> 0 THEN
DISPLAY 'PREPARE-1 SQLCODE. ' SQLCODE
Expand All @@ -134,10 +134,10 @@
EXEC SQL PREPARE ST2
FROM
"SELECT MAX(CID) FROM TAB00 WHERE
- VCFLD1 NOT IN (
- 'AAAAA ' ,'BBBBBB ' ,'CCCCCCCC ' ,
- ' DDDD' ,' EEEEEEEE '
- )"
- " VCFLD1 NOT IN (
- " 'AAAAA ' ,'BBBBBB ' ,'CCCCCCCC ' ,
- " ' DDDD' ,' EEEEEEEE '
- " )"
END-EXEC.
IF SQLCODE <> 0 THEN
DISPLAY 'PREPARE-1 SQLCODE. ' SQLCODE
Expand Down
59 changes: 57 additions & 2 deletions gixsql-tests-nunit/data/gixsql_test_data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,8 @@
<compile value="true" />
<run value="true" />

<additional-preprocess-params value="-N 2" />

<expected-output>
<line>employee #: [+0123]</line>
<line>last name : [Doe ]</line>
Expand Down Expand Up @@ -519,6 +521,59 @@
</expected-output>
</test>

<test name="TSQL005D" enabled="true">
<description>BINARY/VARBINARY data types</description>
<issue-coverage>#000</issue-coverage>
<group></group>
<architecture>all</architecture>
<compiler-type>all</compiler-type>

<cobol-sources>
<src name="TSQL005D.cbl" />
</cobol-sources>

<generate-payload id=":p1" type="byte-sequence" length="80" start="33" />
<generate-payload id=":p2" type="byte-sequence" length="80" start="33" />

<data-sources count="1" />
<pre-run-drop-table data-source-index="1">bintest</pre-run-drop-table>
<pre-run-sql-statement data-source-index="1" type="pgsql">create table bintest (bfld bytea, vbfld bytea, cfld char(100), vcfld varchar(100), num1 numeric(4,2))</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" type="oracle">create table bintest (bfld RAW(100), vbfld LONG RAW, cfld char(100), vcfld varchar(100), num1 number(4,2))</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" type="mysql">create table bintest (bfld binary(100), vbfld varbinary(100), cfld char(100), vcfld varchar(100), num1 numeric(4,2))</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" type="sqlite">create table bintest (bfld binary(100), vbfld varbinary(100), cfld char(100), vcfld varchar(100), num1 numeric(4,2))</pre-run-sql-statement>

<pre-run-sql-statement data-source-index="1" type="odbc" comment="For ODBC, we assume PostgreSQL to be the underlying DBMS">create table bintest (bfld bytea, vbfld bytea, cfld char(100), vcfld varchar(100), num1 numeric(4,2))</pre-run-sql-statement>

<pre-run-sql-statement data-source-index="1" params=":p1,:p2" type="pgsql">insert into bintest (bfld, vbfld, cfld, vcfld, num1) values (:p1, :p2, 'ABCDEFGHIJK', 'ABCDEFGHIJK', 12.34)</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" params=":p1,:p2" type="oracle">insert into bintest (bfld, vbfld, cfld, vcfld, num1) values (:p1, :p2, 'ABCDEFGHIJK', 'ABCDEFGHIJK', 12.34)</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" params=":p1,:p2" type="sqlite">insert into bintest (bfld, vbfld, cfld, vcfld, num1) values (:p1, :p2, 'ABCDEFGHIJK', 'ABCDEFGHIJK', 12.34)</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" params=":p1,:p2" type="mysql">insert into bintest (bfld, vbfld, cfld, vcfld, num1) values (?, ?, 'ABCDEFGHIJK', 'ABCDEFGHIJK', 12.34)</pre-run-sql-statement>
<pre-run-sql-statement data-source-index="1" params=":p1,:p2" type="odbc">insert into bintest (bfld, vbfld, cfld, vcfld, num1) values (?, ?, 'ABCDEFGHIJK', 'ABCDEFGHIJK', 12.34)</pre-run-sql-statement>

<environment>
<variable key="DATASRC" value="${datasource1-noauth-url}" />
<variable key="DATASRC_USR" value="${datasource1-username}.${datasource1-password}" />
</environment>

<preprocess value="true" />
<compile value="true" />
<run value="true" />

<expected-output>
<line>DIGIT1 : +0033</line>
<line>DIGIT2 : +0034</line>
<line>DIGIT83: +0000</line>
<line>{{SW}}BFLD : [!"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop</line>
<line>BFLD LENGTH: 100</line>
<line>VBFLD-ARR : [!"#$%&amp;'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop]</line>
<line>VBFLD-LEN: 0000000080</line>
<line>CFLD : [ABCDEFGHIJK ]</line>
<line>CFLD LENGTH: 100</line>
<line>VCFLD-ARR : [ABCDEFGHIJK]</line>
<line>VCFLD-LEN: 0000000011</line>
</expected-output>
</test>

<test name="TSQL006A" enabled="true">
<description>Prepared statements</description>
<issue-coverage>#000</issue-coverage>
Expand Down Expand Up @@ -2044,8 +2099,8 @@

<expected-output>
<line>SET APPLICATION_NAME TO "Identifier1 Identifier2 Identifier3"</line>
<line>SELECT MAX(CID) FROM TAB00 WHERE VCFLD1 NOT IN ( 'AAAAA' ,'BBBBBB' ,'CCCCCCCC' ,'DDDD' ,'EEEEEEEE' )</line>
<line>SELECT MAX(CID) FROM TAB00 WHERE VCFLD1 NOT IN ( 'AAAAA ' ,'BBBBBB ' ,'CCCCCCCC ' , ' DDDD' ,' EEEEEEEE ' )</line>
<line>SELECT MAX(CID) FROM TAB00 WHERE VCFLD1 NOT IN ( 'AAAAA' ,'BBBBBB' ,'CCCCCCCC' ,'DDDD' ,'EEEEEEEE' )</line>
<line>SELECT MAX(CID) FROM TAB00 WHERE VCFLD1 NOT IN ( 'AAAAA ' ,'BBBBBB ' ,'CCCCCCCC ' , ' DDDD' ,' EEEEEEEE ' )</line>
</expected-output>

<expected-preprocessed-file-content>
Expand Down
2 changes: 2 additions & 0 deletions gixsql-tests-nunit/gixsql-tests-nunit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<None Remove="data\TSQL005A.cbl" />
<None Remove="data\TSQL005B.cbl" />
<None Remove="data\TSQL005C.cbl" />
<None Remove="data\TSQL005D.cbl" />
<None Remove="data\TSQL006A.cbl" />
<None Remove="data\TSQL006B.cbl" />
<None Remove="data\TSQL006C.cbl" />
Expand Down Expand Up @@ -117,6 +118,7 @@
<EmbeddedResource Include="data\ssl\pgsql-test.key" />
<EmbeddedResource Include="data\ssl\root-ca.crt" />
<EmbeddedResource Include="data\ssl\root-ca.key" />
<EmbeddedResource Include="data\TSQL005D.cbl" />
<EmbeddedResource Include="data\TSQL043A.cbl" />
<EmbeddedResource Include="data\TSQL042A.cbl" />
<EmbeddedResource Include="data\TSQL001A.cbl" />
Expand Down
5 changes: 5 additions & 0 deletions gixsql-tests-nunit/gixsql_test_local_windows.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@

<environment>
<variable key="GIXSQL_FIXUP_PARAMS" value="on" />
<!--<variable key="GIXSQL_VARYING_LEN_SZ_SHORT" value="1" />-->
<!--<variable key="GIXSQL_LOG_ROTATE" value="1" />-->
<!--<variable key="GIXSQL_LOG_ROTATE_MAX_SIZE" value="1K" />-->
<!--<variable key="GIXSQL_LOG_ROTATE_MAX_FILES" value="100" />-->
<!--<variable key="GIXSQL_LOG_ROTATE_ON_OPEN" value="1" />-->
</environment>
</global>

Expand Down
8 changes: 7 additions & 1 deletion libgixpp/ESQLDefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ struct cb_field_t;

typedef cb_field_t *cb_field_ptr;

#ifndef DATA_SECTION_TYPE
#define DATA_SECTION_TYPE
enum class DataSectionType
{
Unknown = 0,
Expand All @@ -194,6 +196,7 @@ enum class DataSectionType
LinkageSection,
FileSection
};
#endif

struct cb_field_t
{
Expand Down Expand Up @@ -241,7 +244,9 @@ struct connect_to_info_t
#define _GIXPP_BLOCK_

enum class PreprocessedBlockType {
ESQL = 1
ESQL = 1,
CICS = 2,
DLI = 3
};

struct PreprocessedBlockInfo {
Expand All @@ -258,6 +263,7 @@ struct PreprocessedBlockInfo {
int pp_gen_end_line = 0;

PreprocessedBlockType type;

std::string command;
};

Expand Down
Loading

0 comments on commit 738282e

Please sign in to comment.