mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
4765ab612c
Use LONG_TIMEOUT (one year) instead of ~0 for long timeouts Fixed error messages. Fixed problem with const propagation when comparing columns of different types BitKeeper/deleted/.del-.cvsignore~a91d63182f0b2366: Delete: sql/share/norwegian/.cvsignore BitKeeper/deleted/.del-.cvsignore~469064b5190d703d: Delete: sql/share/norwegian-ny/.cvsignore Docs/manual.texi: Changelog client/client_priv.h: Update for OS2 client/mysqldump.c: Update for OS2 include/mysqld_error.h: Updated error texts isam/create.c: Removed warning myisam/myisamchk.c: Fix for OS2 myisam/myisampack.c: Fix for OS2 mysys/mf_cache.c: Fix for OS2 mysys/mf_tempfile.c: Fix for OS2 mysys/my_os2file64.c: Fix for OS2 mysys/my_tempnam.c: Fix for OS2 os2/ChangeLog.os2: Fix for OS2 os2/MySQL-Client.icc: Fix for OS2 os2/MySQL-Opt.icc: Fix for OS2 os2/MySQL-Source.icc: Fix for OS2 os2/MySQL-Sql.icc: Fix for OS2 os2/MySQL-Util.icc: Fix for OS2 sql/mysqld.cc: Use LONG_TIMEOUT (one year) instead of ~0 for long timeouts. This avoids some problems when users spefices wrong arguments to mysqld. sql/nt_servc.cc: C sql/share/czech/errmsg.txt: Updated error texts sql/share/danish/errmsg.txt: Updated error texts sql/share/dutch/errmsg.txt: Updated error texts sql/share/english/errmsg.txt: Updated error texts sql/share/estonian/errmsg.txt: Updated error texts sql/share/french/errmsg.txt: Updated error texts sql/share/german/errmsg.txt: Updated error texts sql/share/greek/errmsg.txt: Updated error texts sql/share/hungarian/errmsg.txt: Updated error texts sql/share/italian/errmsg.txt: Updated error texts sql/share/japanese/errmsg.txt: Updated error texts sql/share/korean/errmsg.txt: Updated error texts sql/share/norwegian-ny/errmsg.txt: Updated error texts sql/share/norwegian/errmsg.txt: Updated error texts sql/share/polish/errmsg.txt: Updated error texts sql/share/portuguese/errmsg.txt: Updated error texts sql/share/romanian/errmsg.txt: Updated error texts sql/share/russian/errmsg.txt: Updated error texts sql/share/slovak/errmsg.txt: Updated error texts sql/share/spanish/errmsg.txt: Updated error texts sql/share/swedish/errmsg.txt: Updated error texts sql/share/ukrainian/errmsg.txt: Updated error texts sql/sql_select.cc: Fixed problem with const propagation when comparing columns of different types. Fixed bug when HEAP table is converted to MyISAM tables in GROUP BY on long strings.
570 lines
16 KiB
Batchfile
570 lines
16 KiB
Batchfile
/* $Id: BldLevelInf.cmd,v 1.5 2001/01/26 21:33:13 phaller Exp $
|
|
*
|
|
* Adds a Description string to the given .def-file.
|
|
* Fills in default values; like build time and host.
|
|
*
|
|
*/
|
|
|
|
if RxFuncQuery('SysLoadFuncs') = 1 then
|
|
do
|
|
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
|
|
call SysLoadFuncs;
|
|
end
|
|
|
|
|
|
/*
|
|
* Set default parameter values.
|
|
*/
|
|
sDefFileIn = '';
|
|
sDefFileOut = '';
|
|
sASDFeatureId = '';
|
|
sCountryCode = '';
|
|
sDateTime = left(' 'date()' 'time(), 26);
|
|
sDescription = 'Odin32';
|
|
sFixPakVer = '';
|
|
sHostname = strip(substr(VALUE('HOSTNAME',,'OS2ENVIRONMENT'), 1, 11));
|
|
sLanguageCode = '';
|
|
sMiniVer = '';
|
|
sVendor = 'Project Odin';
|
|
sVersion = '0.5';
|
|
|
|
|
|
/*
|
|
* Parse parameters.
|
|
*/
|
|
parse arg sArgs
|
|
if (sArgs = '') then
|
|
do
|
|
call syntax;
|
|
exit(1);
|
|
end
|
|
|
|
do while (sArgs <> '')
|
|
sArgs = strip(sArgs);
|
|
if (substr(sArgs, 1, 1) = '-' | substr(sArgs, 1, 1) = '/') then
|
|
do /*
|
|
* Option.
|
|
*/
|
|
ch = translate(substr(sArgs, 2, 1));
|
|
if (pos(ch, 'ACDHLMNPRTV') < 1) then
|
|
do
|
|
say 'invalid option:' substr(sArgs, 1, 2);
|
|
call syntax;
|
|
exit(2);
|
|
end
|
|
|
|
/* get value and advance sArgs to next or to end. */
|
|
if (substr(sArgs, 3, 1) = '"') then
|
|
do
|
|
iNext = pos('"', sArgs, 4);
|
|
fQuote = 1;
|
|
end
|
|
else
|
|
do
|
|
iNext = pos(' ', sArgs, 3);
|
|
if (iNext <= 0) then
|
|
iNext = length(sArgs);
|
|
fQuote = 0;
|
|
end
|
|
|
|
if (iNext > 3 | ch = 'R') then
|
|
do
|
|
sValue = substr(sArgs, 3 + fQuote, iNext - 3 - fQuote);
|
|
sArgs = strip(substr(sArgs, iNext+1));
|
|
/*say 'iNext:' iNext 'sValue:' sValue 'sArgs:' sArgs; */
|
|
|
|
/* check if we're gonna search for something in an file. */
|
|
if (sValue <> '' & pos('#define=', sValue) > 0) then
|
|
sValue = LookupDefine(sValue);
|
|
end
|
|
else
|
|
do
|
|
say 'syntax error near' substr(sArgs, 1, 2)'.';
|
|
call syntax;
|
|
exit(3);
|
|
end
|
|
|
|
|
|
/* set value */
|
|
select
|
|
when (ch = 'A') then /* ASD Feature Id */
|
|
sASDFeatureId = sValue;
|
|
|
|
when (ch = 'C') then /* Country code */
|
|
sCountryCode = sValue;
|
|
|
|
when (ch = 'D') then /* Description */
|
|
sDescription = sValue;
|
|
|
|
when (ch = 'H') then /* Hostname */
|
|
sHostname = sValue;
|
|
|
|
when (ch = 'L') then /* Language code */
|
|
sLanguageCode = sValue;
|
|
|
|
when (ch = 'M') then /* MiniVer */
|
|
sMiniVer = sValue;
|
|
|
|
when (ch = 'N') then /* Vendor */
|
|
sVendor = sValue;
|
|
|
|
when (ch = 'R') then /* Vendor */
|
|
sDescription = ReadDescription(sValue, sDefFile);
|
|
|
|
when (ch = 'P') then /* Fixpak version */
|
|
sFixPakVer = sValue;
|
|
|
|
when (ch = 'T') then /* Date Time */
|
|
sDateTime = sValue;
|
|
|
|
when (ch = 'V') then /* Version */
|
|
sVersion = sValue;
|
|
|
|
/* Otherwise it's an illegal option */
|
|
otherwise
|
|
say 'invalid option:' substr(sArgs, 1, 2);
|
|
call syntax;
|
|
exit(2);
|
|
end /* select */
|
|
end
|
|
else
|
|
do /*
|
|
* Defition file...
|
|
*/
|
|
if (sDefFileOut <> '') then
|
|
do
|
|
say 'Syntax error: Can''t specify more than two defintion files!';
|
|
exit(4);
|
|
end
|
|
if (sDefFileIn = '') then
|
|
parse value sArgs with sDefFileIn' 'sArgs
|
|
else
|
|
parse value sArgs with sDefFileOut' 'sArgs
|
|
sArgs = strip(sArgs);
|
|
end
|
|
end
|
|
|
|
|
|
/* check that a defintion file was specified. */
|
|
if (sDefFileIn = '') then
|
|
do
|
|
say 'Syntax error: Will have to specify a .def-file to update.';
|
|
call syntax;
|
|
exit(5);
|
|
end
|
|
|
|
|
|
/*
|
|
* Trim strings to correct lengths.
|
|
*/
|
|
sVendor = strip(substr(sVendor, 1, 31));
|
|
if (substr(sDateTime, 1, 1) <> ' ') then
|
|
sDateTime = ' ' || sDateTime;
|
|
sDateTime = left(sDateTime, 26);
|
|
sHostname = strip(substr(sHostname, 1, 11));
|
|
sMiniVer = strip(substr(sMiniVer, 1, 11));
|
|
sDescription = strip(substr(sDescription, 1, 80));
|
|
sCountryCode = strip(substr(sCountryCode, 1, 4));
|
|
sLanguageCode = strip(substr(sLanguageCode, 1, 4));
|
|
sASDFeatureId = strip(substr(sASDFeatureId, 1, 11));
|
|
sFixPakVer = strip(substr(sFixPakVer, 1, 11));
|
|
|
|
|
|
/*
|
|
* Signature
|
|
*/
|
|
sEnhSign = '##1##'
|
|
|
|
/*
|
|
* Build description string.
|
|
*/
|
|
sDescription = '@#'sVendor':'sVersion'#@'sEnhSign||,
|
|
sDateTime||sHostname||,
|
|
':'sASDFeatureId':'sLanguageCode':'sCountryCode':'sMiniVer||,
|
|
'::'sFixPakVer'@@'sDescription;
|
|
|
|
/*
|
|
* Update .def-file.
|
|
*/
|
|
call SysFileDelete(sDefFileIn);
|
|
rc = lineout( sDefFileIn, 'RCDATA 1 { "' || sDescription || '" }');
|
|
|
|
/*rc = UpdateDefFile(sDefFileIn, sDefFileOut, sDescription);*/
|
|
exit(rc);
|
|
|
|
|
|
/**
|
|
* Display script syntax.
|
|
*/
|
|
syntax: procedure
|
|
say 'Syntax: MakeDesc.cmd [options] <deffile in> <deffile out> [options]'
|
|
say ' <deffile> Defitionfile which will have an DESCRIPTION appended.'
|
|
say 'Options:'
|
|
say ' -A<string> ASD Feature Id.'
|
|
say ' -C<string> Country code.'
|
|
say ' -D<string> Description.'
|
|
say ' -R[deffile] Read description from .def file.'
|
|
say ' -H<string> Hostname.'
|
|
say ' -L<string> Language code.'
|
|
say ' -M<string> MiniVer.'
|
|
say ' -N<string> Vendor.'
|
|
say ' -P<string> Fixpak version.'
|
|
say ' -T<string> Date Time.'
|
|
say ' -V<string> Version.'
|
|
say '<string> could be a double qoute qouted string or a single word.'
|
|
say ' You could also reference #defines in C/C++ include files.'
|
|
say ' The string should then have this form:'
|
|
say ' "#define=<DEFINE_NAME>,<includefile.h>"'
|
|
say '';
|
|
|
|
return;
|
|
|
|
|
|
/**
|
|
* Search for a #define in an C/C++ header or source file.
|
|
*
|
|
* @returns String containing the defined value
|
|
* found for the define in the header file.
|
|
* Quits on fatal errors.
|
|
* @param A string on the form: "#define=DEFINETOFIND,includefile.h"
|
|
* @remark Write only code... - let's hope it works.
|
|
*/
|
|
LookupDefine: procedure
|
|
parse arg '#'sDefine'='sMacro','sIncludeFile
|
|
|
|
/*
|
|
* Validate parameters.
|
|
*/
|
|
sMacro = strip(sMacro);
|
|
sIncludeFile = strip(sIncludeFile);
|
|
if (sMacro = '') then
|
|
do
|
|
say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.';
|
|
say ' <DEFINE_NAME> was empty.';
|
|
exit(-20);
|
|
end
|
|
if (sIncludeFile = '') then
|
|
do
|
|
say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.';
|
|
say ' <includefile.h> was empty.';
|
|
exit(-20);
|
|
end
|
|
|
|
|
|
sIllegal = translate(translate(sMacro),,
|
|
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!',,
|
|
'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_');
|
|
|
|
if (strip(translate(sIllegal, ' ', '!')) <> '') then
|
|
do
|
|
say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.';
|
|
say ' <DEFINE_NAME> contains illegal charater(s).'
|
|
say ' 'sMacro;
|
|
say ' 'translate(sIllegal, ' ', '!');
|
|
exit(-20);
|
|
end
|
|
|
|
/*
|
|
* Open include file.
|
|
*/
|
|
sRc = stream(sIncludeFile, 'c', 'open read');
|
|
if (pos('READY', sRc) <> 1) then
|
|
do /* search INCLUDE variable */
|
|
sFile = SysSearchPath('INCLUDE', sIncludeFile);
|
|
if (sFile = '') then
|
|
do
|
|
say 'Can''t find include file 'sIncludeFile'.';
|
|
exit(-20);
|
|
end
|
|
sIncludeFile = sFile;
|
|
|
|
sRc = stream(sIncludeFile, 'c', 'open read');
|
|
if (pos('READY', sRc) <> 1) then
|
|
do
|
|
say 'Failed to open include file' sIncludeFile'.';
|
|
exit(-20);
|
|
end
|
|
end
|
|
|
|
/*
|
|
* Search the file line by line.
|
|
* We'll check for lines starting with a hash (#) char.
|
|
* Then check that the word after the hash is 'define'.
|
|
* Then match the next word with the macro name.
|
|
* Then then get the next rest of the line to comment or continuation char.
|
|
* (continuation is not supported)
|
|
* Finally strip quotes.
|
|
*/
|
|
sValue = '';
|
|
do while (lines(sIncludeFile) > 0)
|
|
sLine = strip(linein(sIncludeFile));
|
|
if (sLine = '') then
|
|
iterate;
|
|
if (substr(sLine, 1, 1) <> '#') then
|
|
iterate;
|
|
sLine = substr(sLine, 2);
|
|
if (word(sLine, 1) <> 'define') then
|
|
iterate;
|
|
sLine = strip(substr(sLine, wordpos(sLine, 1) + length('define')+1));
|
|
if ( substr(sLine, 1, length(sMacro)) <> sMacro,
|
|
| substr(sLine, length(sMacro)+1, 1) <> ' ') then
|
|
iterate;
|
|
sLine = strip(substr(sLine, length(sMacro) + 1));
|
|
if (sLine = '') then
|
|
do
|
|
say 'error: #define' sMacro' is empty.';
|
|
call stream sIncludeFile, 'c', 'close';
|
|
exit(-20);
|
|
end
|
|
|
|
chQuote = substr(sLine, 1, 1);
|
|
if (chQuote = '"' | chQuote = "'") then
|
|
do /* quoted string */
|
|
iLastQuote = 0;
|
|
do forever
|
|
iLast = pos(chQuote, sLine, 2);
|
|
if (iLast <= 0) then
|
|
leave;
|
|
if (substr(sLine, iLast, 1) = '\') then
|
|
iterate;
|
|
iLastQuote = iLast;
|
|
leave;
|
|
end
|
|
|
|
if (iLastQuote <= 0) then
|
|
do
|
|
say 'C/C++ syntax error in 'sIncludefile': didn''t find end quote.';
|
|
call stream sIncludeFile, 'c', 'close';
|
|
exit(-20);
|
|
end
|
|
|
|
call stream sIncludeFile, 'c', 'close';
|
|
sValue = substr(sLine, 2, iLastQuote - 2);
|
|
say 'Found 'sMacro'='sValue;
|
|
return sValue;
|
|
end
|
|
else
|
|
do
|
|
iCommentCPP = pos('//',sLine);
|
|
iCommentC = pos('/*',sLine);
|
|
if (iCommentC > 0 & iCommentCPP > 0 & iCommentC > iCommentCPP) then
|
|
iComment = iCommentCPP;
|
|
else if (iCommentC > 0 & iCommentCPP > 0 & iCommentC < iCommentCPP) then
|
|
iComment = iCommentC;
|
|
else if (iCommentCPP > 0) then
|
|
iComment = iCommentCPP;
|
|
else if (iCommentC > 0) then
|
|
iComment = iCommentC;
|
|
else
|
|
iComment = 0;
|
|
|
|
if (iComment > 0) then
|
|
sValue = strip(substr(sLine, 1, iComment-1));
|
|
else
|
|
sValue = strip(sLine);
|
|
|
|
if (sValue <> '') then
|
|
do
|
|
if (substr(sValue, length(sValue)) = '\') then
|
|
do
|
|
say 'Found continuation char: Multiline definitions are not supported!\n';
|
|
call stream sIncludeFile, 'c', 'close';
|
|
exit(-20);
|
|
end
|
|
end
|
|
|
|
if (sValue = '') then
|
|
say 'warning: The #define has no value.';
|
|
|
|
call stream sIncludeFile, 'c', 'close';
|
|
say 'Found 'sMacro'='sValue;
|
|
return sValue;
|
|
end
|
|
end
|
|
|
|
call stream sIncludeFile, 'c', 'close';
|
|
say 'error: didn''t find #define' sMacro'.';
|
|
exit(-20);
|
|
|
|
|
|
|
|
/**
|
|
* Reads the description line for a .def-file.
|
|
* @returns The Description string, with quotes removed.
|
|
* Empty string is acceptable.
|
|
* On error we'll terminate the script.
|
|
* @param sDefFile Filaname of .def-file to read the description from.
|
|
* @param sDefFile2 Used if sDefFile is empty.
|
|
* @author knut st. osmundsen (knut.stange.osmundsen@mynd.no)
|
|
*/
|
|
ReadDescription: procedure;
|
|
parse arg sDefFile, sDefFile2
|
|
|
|
/*
|
|
* Validate parameters.
|
|
*/
|
|
if (sDefFile = '') then
|
|
sDefFile = sDefFile2;
|
|
if (sDefFile = '') then
|
|
do
|
|
say 'error: no definition file to get description from.'
|
|
exit(-1);
|
|
end
|
|
|
|
/*
|
|
* Open file
|
|
*/
|
|
rc = stream(sDefFile, 'c', 'open read');
|
|
if (pos('READY', rc) <> 1) then
|
|
do
|
|
say 'error: failed to open deffile file.';
|
|
exit(-1);
|
|
end
|
|
|
|
|
|
/*
|
|
* Search for the 'DESCRIPTION' line.
|
|
*/
|
|
do while (lines(sDefFile) > 0)
|
|
sLine = strip(linein(sDefFile));
|
|
if (sLine = '') then
|
|
iterate;
|
|
if (translate(word(sLine, 1)) <> 'DESCRIPTION') then
|
|
iterate;
|
|
sLine = strip(substr(sLine, wordpos(sLine, 1) + length('DESCRIPTION')+1));
|
|
|
|
ch = substr(sLine, 1, 1);
|
|
if (ch <> "'" & ch <> '"') then
|
|
do
|
|
say 'syntax error: description line in' sDefFile 'is misformed.';
|
|
call stream sDefFile, 'c', 'close';
|
|
exit(-10);
|
|
end
|
|
|
|
iEnd = pos(ch, sLine, 2);
|
|
if (iEnd <= 0) then
|
|
do
|
|
say 'syntax error: description line in' sDefFile 'is misformed.';
|
|
call stream sDefFile, 'c', 'close';
|
|
exit(-10);
|
|
end
|
|
|
|
call stream sDefFile, 'c', 'close';
|
|
sValue = substr(sLine, 2, iEnd - 2);
|
|
say 'Found Description:' sValue;
|
|
return sValue;
|
|
end
|
|
|
|
call stream sDefFile, 'c', 'close';
|
|
say 'info: Didn''t find description line in' sDefFile'.';
|
|
return '';
|
|
|
|
|
|
/**
|
|
* This is a function which reads sDefFileIn into and
|
|
* internal array and changes the DESCRIPTION text if found.
|
|
* If DESCRIPTION isn't found, it is added at the end.
|
|
* The array is written to sDefFileOut.
|
|
* @returns 0 on succes.
|
|
* Errorcode on error.
|
|
* @param sDefFileIn Input .def-file.
|
|
* @param sDefFileOut Output .def-file. Overwritten.
|
|
* @param sDescription New description string.
|
|
* @author knut st. osmundsen (knut.stange.osmundsen@mynd.no)
|
|
*/
|
|
UpdateDefFile: procedure;
|
|
parse arg sDefFileIn, sDefFileOut, sDescription
|
|
|
|
/*
|
|
* Validate parameters.
|
|
*/
|
|
if (sDefFileOut = '') then
|
|
sDefFileOut = sDefFileIn;
|
|
|
|
/*
|
|
* Open file input file.
|
|
*/
|
|
rc = stream(sDefFileIn, 'c', 'open read');
|
|
if (pos('READY', rc) <> 1) then
|
|
do
|
|
say 'error: failed to open' sDefFileIn 'file.';
|
|
return 110;
|
|
end
|
|
|
|
|
|
/*
|
|
* Search for the 'BLDLEVEL' line.
|
|
*/
|
|
i = 0;
|
|
fDescription = 0;
|
|
do while (lines(sDefFileIn) > 0)
|
|
/*
|
|
* Read line.
|
|
*/
|
|
i = i + 1;
|
|
asFile.i = linein(sDefFileIn);
|
|
|
|
/*
|
|
* Look for BLDLEVEL;
|
|
*/
|
|
if (asFile.i = '') then
|
|
iterate;
|
|
if (translate(word(strip(asFile.i), 1)) <> 'BLDLEVEL') then
|
|
iterate;
|
|
if (fDescription) then
|
|
do
|
|
say 'warning: multiple descriptions lines. Line' i 'removed';
|
|
i = i - 1;
|
|
iterate;
|
|
end
|
|
|
|
/*
|
|
* Found description - replace with new description.
|
|
*/
|
|
asFile.i = "BldLevel = '"||sDescription||"'";
|
|
fDescription = 1;
|
|
end
|
|
|
|
/*
|
|
* Add description is none was found.
|
|
*/
|
|
if (\fDescription) then
|
|
do
|
|
i = i + 1;
|
|
asFile.i = "BldLevel = '"||sDescription||"'";
|
|
end
|
|
asFile.0 = i;
|
|
|
|
|
|
/*
|
|
* Close input file and open output file.
|
|
*/
|
|
call stream sDefFileIn, 'c', 'close';
|
|
call SysFileDelete(sDefFileOut);
|
|
rc = stream(sDefFileOut, 'c', 'open write');
|
|
if (pos('READY', rc) <> 1) then
|
|
do
|
|
say 'error: failed to open outputfile' sDefFileOut 'file.';
|
|
return 110;
|
|
end
|
|
|
|
/*
|
|
* Make firstline and write all the lines to the output file.
|
|
*/
|
|
/*call lineout sDefFileOut, '; Updated by makedesc.cmd', 1;*/
|
|
do i = 1 to asFile.0
|
|
rc = lineout(sDefFileOut, asFile.i);
|
|
if (rc > 0) then
|
|
do
|
|
say 'error: failed to write line' i 'to' sDefFileOut'.'
|
|
call stream sDefFileOut, 'c', 'close';
|
|
return 5;
|
|
end
|
|
end
|
|
|
|
/*
|
|
* Close output file and return succesfully.
|
|
*/
|
|
call stream sDefFileOut, 'c', 'close';
|
|
return 0;
|
|
|