diff --git a/db2i_blobCollection.cc b/db2i_blobCollection.cc index 9f36894..2395af4 100644 --- a/db2i_blobCollection.cc +++ b/db2i_blobCollection.cc @@ -61,9 +61,9 @@ BlobCollection::getSizeToAllocate(int fieldIndex, bool& shouldProtect) uint curMaxSize = table->getBlobFieldActualSize(fieldIndex); - uint defaultAllocSize = min(defaultAllocation, fieldLength); + uint defaultAllocSize = std::min(defaultAllocation, fieldLength); - return max(defaultAllocSize, curMaxSize); + return std::max(defaultAllocSize, curMaxSize); } diff --git a/db2i_conversion.cc b/db2i_conversion.cc index 9b21fde..0e3744d 100644 --- a/db2i_conversion.cc +++ b/db2i_conversion.cc @@ -535,13 +535,13 @@ int ha_ibmdb2i::getFieldTypeMapping(Field* field, { if (field->type() == MYSQL_TYPE_STRING) { - sprintf(stringBuildBuffer, "BINARY(%d)", max(fieldLength, 1)); + sprintf(stringBuildBuffer, "BINARY(%u)", std::max(fieldLength, 1u)); } else { if (fieldLength <= MAX_VARCHAR_LENGTH) { - sprintf(stringBuildBuffer, "VARBINARY(%d)", max(fieldLength, 1)); + sprintf(stringBuildBuffer, "VARBINARY(%u)", std::max(fieldLength, 1u)); } else if (blobMapping == AS_VARCHAR && (field->flags & PART_KEY_FLAG)) @@ -550,8 +550,8 @@ int ha_ibmdb2i::getFieldTypeMapping(Field* field, } else { - fieldLength = min(MAX_BLOB_LENGTH, fieldLength); - sprintf(stringBuildBuffer, "BLOB(%d)", max(fieldLength, 1)); + fieldLength = std::min(MAX_BLOB_LENGTH, fieldLength); + sprintf(stringBuildBuffer, "BLOB(%u)", std::max(fieldLength, 1u)); } } mapping.append(stringBuildBuffer); @@ -586,14 +586,14 @@ int ha_ibmdb2i::getFieldTypeMapping(Field* field, return 1; if (fieldCharSet->mbmaxlen > 1 && (!is_utf8 || is_utf8_general_ci)) { - sprintf(stringBuildBuffer, "GRAPHIC(%d)", max(fieldLength / fieldCharSet->mbmaxlen, 1)); // Number of characters + sprintf(stringBuildBuffer, "GRAPHIC(%u)", std::max(fieldLength / fieldCharSet->mbmaxlen, 1u)); // Number of characters // Need to set CCSID to 1200 (UTF-16) when using multi-byte charsets // As well as when the collation is utf*_general_ci because of sort sequence issues db2Ccsid = 1200; } else { - sprintf(stringBuildBuffer, "CHAR(%d)", max(fieldLength, 1)); + sprintf(stringBuildBuffer, "CHAR(%u)", std::max(fieldLength, 1u)); } mapping.append(stringBuildBuffer); } @@ -603,14 +603,14 @@ int ha_ibmdb2i::getFieldTypeMapping(Field* field, { if (fieldCharSet->mbmaxlen > 1 && (!is_utf8 || is_utf8_general_ci)) { - sprintf(stringBuildBuffer, "VARGRAPHIC(%d)", max(fieldLength / fieldCharSet->mbmaxlen, 1)); // Number of characters + sprintf(stringBuildBuffer, "VARGRAPHIC(%u)", std::max(fieldLength / fieldCharSet->mbmaxlen, 1u)); // Number of characters // Need to set CCSID to 1200 (UTF-16) when using multi-byte charsets // As well as when the collation is utf*_general_ci because of sort sequence issues db2Ccsid = 1200; } else { - sprintf(stringBuildBuffer, "VARCHAR(%d)", max(fieldLength, 1)); + sprintf(stringBuildBuffer, "VARCHAR(%u)", std::max(fieldLength, 1u)); } } else if (blobMapping == AS_VARCHAR && @@ -630,18 +630,18 @@ int ha_ibmdb2i::getFieldTypeMapping(Field* field, } else { - fieldLength = min(MAX_BLOB_LENGTH, fieldLength); + fieldLength = std::min(MAX_BLOB_LENGTH, fieldLength); if (fieldCharSet->mbmaxlen > 1 && (!is_utf8 || is_utf8_general_ci)) { - sprintf(stringBuildBuffer, "DBCLOB(%d)", max(fieldLength / fieldCharSet->mbmaxlen, 1)); // Number of characters + sprintf(stringBuildBuffer, "DBCLOB(%u)", std::max(fieldLength / fieldCharSet->mbmaxlen,1u)); // Number of characters // Need to set CCSID to 1200 (UTF-16) when using multi-byte charsets // As well as when the collation is utf*_general_ci because of sort sequence issues db2Ccsid = 1200; } else { - sprintf(stringBuildBuffer, "CLOB(%d)", max(fieldLength, 1)); // Number of characters + sprintf(stringBuildBuffer, "CLOB(%u)", std::max(fieldLength, 1u)); // Number of characters } } @@ -689,7 +689,7 @@ int32 ha_ibmdb2i::convertMySQLtoDB2(Field* field, const DB2Field& db2Field, char { uint precision= ((Field_new_decimal*)field)->precision; uint scale= field->decimals(); - uint db2Precision = min(precision, MAX_DEC_PRECISION); + uint db2Precision = std::min(precision, MAX_DEC_PRECISION); uint truncationAmount = precision - db2Precision; if (scale >= truncationAmount) @@ -1160,8 +1160,8 @@ int32 ha_ibmdb2i::convertMySQLtoDB2(Field* field, const DB2Field& db2Field, char if (maxDisplayLength == 0 && db2FieldType == QMY_GRAPHIC) maxDb2BytesToStore = 2; else - maxDb2BytesToStore = min(((bytesToStore * 2) / fieldCharSet->mbminlen), - ((maxDisplayLength * 2) / fieldCharSet->mbmaxlen)); + maxDb2BytesToStore = std::min(bytesToStore * 2 / fieldCharSet->mbminlen, + maxDisplayLength * 2 / fieldCharSet->mbmaxlen); if (bytesToStore == 0) db2BytesToStore = 0; @@ -1205,8 +1205,8 @@ int32 ha_ibmdb2i::convertMySQLtoDB2(Field* field, const DB2Field& db2Field, char else // Else Far East, special UTF8 or non-special UTF8/UCS2 { size_t maxDb2BytesToStore; - maxDb2BytesToStore = min(((bytesToStore * 2) / fieldCharSet->mbminlen), - ((maxDisplayLength * 2) / fieldCharSet->mbmaxlen)); + maxDb2BytesToStore = std::min(bytesToStore * 2 / fieldCharSet->mbminlen, + maxDisplayLength * 2 / fieldCharSet->mbmaxlen); temp = getCharacterConversionBuffer(field->field_index, maxDb2BytesToStore); rc = convertFieldChars(toDB2, field->field_index, (char*)dataToStore,temp,bytesToStore, maxDb2BytesToStore, &db2BytesToStore); if (rc) @@ -1258,7 +1258,7 @@ int32 ha_ibmdb2i::convertDB2toMySQL(const DB2Field& db2Field, Field* field, cons { uint precision= ((Field_new_decimal*)field)->precision; uint scale= field->decimals(); - uint db2Precision = min(precision, MAX_DEC_PRECISION); + uint db2Precision = std::min(precision, MAX_DEC_PRECISION); uint decimalPlace = precision-scale+1; char temp[80]; diff --git a/db2i_file.cc b/db2i_file.cc index 09b2ae9..fd9d530 100644 --- a/db2i_file.cc +++ b/db2i_file.cc @@ -346,14 +346,14 @@ size_t db2i_table::smartFilenameToTableName(const char *in, char* out, size_t ou { strncpy(out, in, outlen); my_free(test); - return min(outlen, strlen(out)); + return std::min(outlen, strlen(out)); } ++cur; } strncpy(out, test, outlen); my_free(test); - return min(outlen, strlen(out)); + return std::min(outlen, strlen(out)); } void db2i_table::filenameToTablename(const char* in, char* out, size_t outlen) @@ -376,10 +376,13 @@ void db2i_table::filenameToTablename(const char* in, char* out, size_t outlen) if (!part4) part4 = strend(in); } - - memcpy(temp, part1, min(outlen, part2 - part1)); - temp[min(outlen-1, part2-part1)] = 0; - + + { + size_t num_bytes = std::min(outlen-1, static_cast(part2 - part1)); + memcpy(temp, part1, num_bytes); + temp[num_bytes] = 0; + } + int32 accumLen = smartFilenameToTableName(temp, out, outlen); if (part2 && (accumLen + 4 < (int) outlen)) @@ -387,9 +390,11 @@ void db2i_table::filenameToTablename(const char* in, char* out, size_t outlen) strcat(out, "#P#"); accumLen += 4; - memset(temp, 0, min(outlen, part2-part1)); - memcpy(temp, part3, min(outlen, part4-part3)); - temp[min(outlen-1, part4-part3)] = 0; + { + size_t num_bytes = std::min(outlen, static_cast(part4-part3)); + memcpy(temp, part3, std::min(outlen, num_bytes)); + temp[std::min(static_cast(outlen-1), num_bytes)] = 0; + } accumLen += smartFilenameToTableName(temp, strend(out), outlen-accumLen); @@ -496,7 +501,7 @@ int32 db2i_table::appendQualifiedIndexFileName(const char* indexName, strncat(generatedName, tableName+1, - min(strlen(tableName), (MAX_DB2_FILENAME_LENGTH-lenWithoutFile))-2 ); + std::min(strlen(tableName), static_cast(MAX_DB2_FILENAME_LENGTH-lenWithoutFile))-2 ); char finalName[MAX_DB2_FILENAME_LENGTH+1]; convertMySQLNameToDB2Name(generatedName, finalName, sizeof(finalName), true, (format==ASCII_SQL)); diff --git a/db2i_global.h b/db2i_global.h index 0d08f6d..4b838f6 100644 --- a/db2i_global.h +++ b/db2i_global.h @@ -74,8 +74,7 @@ OF SUCH DAMAGE. * Explicit macro will be used. */ -#define min(a,b) ((long long)(a)>(long long)(b) ? (b) : (a)) -#define max(a,b) ((long long)(a)<(long long)(b) ? (b) : (a)) +#include #define db2i_beint16_from_ptr2leint16(V,M) \ do { int16 def_temp;\ diff --git a/db2i_ileBridge.cc b/db2i_ileBridge.cc index bf55b0a..5fc1851 100644 --- a/db2i_ileBridge.cc +++ b/db2i_ileBridge.cc @@ -612,7 +612,7 @@ int32 db2i_ileBridge::prepOpen(const char* statement, { Qmy_MSPO0100_output* output = (Qmy_MSPO0100_output*)parmBlock->outParms; *rfileHandle = output->ObjHnd; - *recLength = max(output->InNxtRowOff, output->OutNxtRowOff); + *recLength = std::max(output->InNxtRowOff, output->OutNxtRowOff); } diff --git a/db2i_misc.cc b/db2i_misc.cc index e67e815..ab0e793 100644 --- a/db2i_misc.cc +++ b/db2i_misc.cc @@ -82,7 +82,7 @@ EXTERN bool convertMySQLNameToDB2Name(const char* input, bool delimit, bool delimitQuotes) { - uint o = 0; + size_t o = 0; if (delimit) output[o++] = '"'; @@ -100,7 +100,7 @@ EXTERN bool convertMySQLNameToDB2Name(const char* input, if (delimit) output[o++] = '"'; - output[min(o, outlen-1)] = 0; // This isn't the most user-friendly way to handle overflows, + output[std::min(o, outlen-1)] = 0; // This isn't the most user-friendly way to handle overflows, // but at least its safe. return (o <= outlen-1); } diff --git a/db2i_safeString.cc b/db2i_safeString.cc index ac5852f..17596a9 100644 --- a/db2i_safeString.cc +++ b/db2i_safeString.cc @@ -67,7 +67,7 @@ OF SUCH DAMAGE. SafeString& SafeString::strncat(const char* str, size_t len) { - uint64 amountToCopy = min((allocSize-1) - curPos, len); + size_t amountToCopy = std::min(allocSize-1 - curPos, len); memcpy(buf + curPos, str, amountToCopy); curPos += amountToCopy; buf[curPos] = 0; diff --git a/db2i_safeString.h b/db2i_safeString.h index a1d5af2..17a5c75 100644 --- a/db2i_safeString.h +++ b/db2i_safeString.h @@ -65,7 +65,7 @@ class SafeString private: char* buf; - uint64 curPos; + size_t curPos; size_t allocSize; }; diff --git a/ha_ibmdb2i.cc b/ha_ibmdb2i.cc index 4953ec2..a0f3048 100644 --- a/ha_ibmdb2i.cc +++ b/ha_ibmdb2i.cc @@ -63,7 +63,7 @@ static const char __NOT_NULL_VALUE_EBCDIC = 0xF0; // '0' static const char __NULL_VALUE_EBCDIC = 0xF1; // '1' static const char __DEFAULT_VALUE_EBCDIC = 0xC4; // 'D' static const char BlankASPName[19] = " "; -static const int DEFAULT_MAX_ROWS_TO_BUFFER = 4096; +static const ha_rows DEFAULT_MAX_ROWS_TO_BUFFER = 4096; static const char SAVEPOINT_PREFIX[] = {0xD4, 0xE8, 0xE2, 0xD7}; // MYSP (in EBCDIC) @@ -2791,10 +2791,9 @@ int ha_ibmdb2i::prepReadBuffer(ha_rows rowsToRead, const db2i_file* file, char i forceSingleRowRead = true; rowsToRead = 1; } + rowsToRead = std::min(stats.records+1,std::min(rowsToRead, DEFAULT_MAX_ROWS_TO_BUFFER)); - rowsToRead = min(stats.records+1,min(rowsToRead, DEFAULT_MAX_ROWS_TO_BUFFER)); - - uint bufSize = min((format->readRowLen * rowsToRead), THDVAR(thd, max_read_buffer_size)); + uint bufSize = std::min(format->readRowLen * rowsToRead, static_cast(THDVAR(thd, max_read_buffer_size))); multiRowReadBuf.allocBuf(format->readRowLen, format->readRowNullOffset, bufSize); activeReadBuf = &multiRowReadBuf; @@ -2830,9 +2829,9 @@ int ha_ibmdb2i::prepWriteBuffer(ha_rows rowsToWrite, const db2i_file* file) if (unlikely(rc)) DBUG_RETURN(rc); - rowsToWrite = min(rowsToWrite, DEFAULT_MAX_ROWS_TO_BUFFER); + rowsToWrite = std::min(rowsToWrite, DEFAULT_MAX_ROWS_TO_BUFFER); - uint bufSize = min((format->writeRowLen * rowsToWrite), THDVAR(ha_thd(), max_write_buffer_size)); + uint bufSize = std::min((format->writeRowLen * rowsToWrite), static_cast(THDVAR(ha_thd(), max_write_buffer_size))); multiRowWriteBuf.allocBuf(format->writeRowLen, format->writeRowNullOffset, bufSize); activeWriteBuf = &multiRowWriteBuf; @@ -2916,8 +2915,8 @@ int ha_ibmdb2i::flushWrite(FILE_HANDLE fileHandle, uchar* buf ) else { char unknownIndex[MAX_DB2_FILENAME_LENGTH+1]; - convFromEbcdic(lastDupKeyNamePtr, unknownIndex, min(lastDupKeyNameLen, MAX_DB2_FILENAME_LENGTH)); - unknownIndex[min(lastDupKeyNameLen, MAX_DB2_FILENAME_LENGTH)] = 0; + convFromEbcdic(lastDupKeyNamePtr, unknownIndex, std::min(lastDupKeyNameLen, static_cast(MAX_DB2_FILENAME_LENGTH))); + unknownIndex[std::min(lastDupKeyNameLen, static_cast(MAX_DB2_FILENAME_LENGTH))] = 0; getErrTxt(DB2I_ERR_UNKNOWN_IDX, unknownIndex); } } @@ -3292,7 +3291,7 @@ void ha_ibmdb2i::doInitialRead(char orientation, if (forceSingleRowRead) rowsToBuffer = 1; else - rowsToBuffer = min(rowsToBuffer, activeReadBuf->getRowCapacity()); + rowsToBuffer = std::min(rowsToBuffer, activeReadBuf->getRowCapacity()); activeReadBuf->newReadRequest(activeHandle, orientation, @@ -3430,7 +3429,7 @@ double ha_ibmdb2i::read_time(uint index, uint ranges, ha_rows rows) double dataPageCount = stats.data_file_length/IO_SIZE; cost = (rows * dataPageCount / totalRecords) + - min(idxPageCnt, (log_2(idxPageCnt) * ranges + + std::min(idxPageCnt, (log_2(idxPageCnt) * ranges + rows * (log_2(idxPageCnt) + log_2(rows) - log_2(totalRecords)))); } } @@ -3579,7 +3578,7 @@ void ha_ibmdb2i::setIndexReadEstimate(uint index, ha_rows rows) ha_rows ha_ibmdb2i::getIndexReadEstimate(uint index) { if (indexReadSizeEstimates) - return max(indexReadSizeEstimates[index], 1); + return std::max(indexReadSizeEstimates[index], ha_rows{1}); return 10000; // Assume index scan if no estimate exists. }