From e33892822af8a3c5d728404170cd740685599c70 Mon Sep 17 00:00:00 2001 From: Joerg-Christian Boehme Date: Tue, 14 Jan 2020 10:28:52 +0100 Subject: [PATCH 001/120] Enable unit test in cmake build --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index a88f94c3b..52c4a5e61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -107,12 +107,12 @@ matrix: - env: TEST_NAME="gcc-5.4.0 (CMake)" compiler: gcc script: - - cmake -H. -Bcmake-build -GNinja -DENABLE_PDF=OFF -DENABLE_TESTS=ON && cmake --build cmake-build --target all + - cmake -H. -Bcmake-build -GNinja -DENABLE_PDF=OFF -DENABLE_TESTS=ON && cmake --build cmake-build --target all && sudo -s PWD=`pwd` PATH=$PWD/cmake-3.5.1-Linux-x86_64/bin:$PATH POCO_BASE=$PWD CTEST_OUTPUT_ON_FAILURE=1 cmake --build cmake-build --target test - env: TEST_NAME="clang (CMake)" compiler: clang script: - - cmake -H. -Bcmake-build -GNinja -DENABLE_PDF=OFF -DENABLE_TESTS=ON && cmake --build cmake-build --target all + - cmake -H. -Bcmake-build -GNinja -DENABLE_PDF=OFF -DENABLE_TESTS=ON && cmake --build cmake-build --target all && sudo -s PWD=`pwd` PATH=$PWD/cmake-3.5.1-Linux-x86_64/bin:$PATH POCO_BASE=$PWD CTEST_OUTPUT_ON_FAILURE=1 cmake --build cmake-build --target test - env: TEST_NAME="arm-linux-gnueabi-g++ (CMake)" script: From 7be832bac267a2dc393cfaf11ff3fb619cf1f28c Mon Sep 17 00:00:00 2001 From: Alex Fabijanic Date: Wed, 15 Jan 2020 20:15:57 +0100 Subject: [PATCH 002/120] add BLOB SQLite test --- Data/SQLite/testsuite/src/SQLiteTest.cpp | 43 ++++++++++++++++++++++++ Data/SQLite/testsuite/src/SQLiteTest.h | 1 + 2 files changed, 44 insertions(+) mode change 100644 => 100755 Data/SQLite/testsuite/src/SQLiteTest.cpp mode change 100644 => 100755 Data/SQLite/testsuite/src/SQLiteTest.h diff --git a/Data/SQLite/testsuite/src/SQLiteTest.cpp b/Data/SQLite/testsuite/src/SQLiteTest.cpp old mode 100644 new mode 100755 index db47c1de8..a874ff3c9 --- a/Data/SQLite/testsuite/src/SQLiteTest.cpp +++ b/Data/SQLite/testsuite/src/SQLiteTest.cpp @@ -54,6 +54,7 @@ using Poco::Data::SQLChannel; using Poco::Data::LimitException; using Poco::Data::ConnectionFailedException; using Poco::Data::CLOB; +using Poco::Data::BLOB; using Poco::Data::Date; using Poco::Data::Time; using Poco::Data::Transaction; @@ -1418,6 +1419,47 @@ void SQLiteTest::testCLOB() } +void SQLiteTest::testBLOB() +{ + std::string lastName("lastname"); + std::string firstName("firstname"); + std::string address("Address"); + Session tmp(Poco::Data::SQLite::Connector::KEY, "dummy.db"); + tmp << "DROP TABLE IF EXISTS Person", now; + tmp << "CREATE TABLE IF NOT EXISTS Person (LastName VARCHAR(30), FirstName VARCHAR, Address VARCHAR, Image BLOB)", now; + typedef struct + { + int i = 0; + Poco::Int64 i64 = 1; + float f = 2.5; + double d = 3.5; + char c[16] = {0}; + } DataStruct; + DataStruct ds; + strcpy(ds.c, "123456789ABCDEF"); + BLOB img(reinterpret_cast(&ds), sizeof(ds)); + assertTrue(img.size() == sizeof(ds)); + int count = 0; + tmp << "INSERT INTO PERSON VALUES(:ln, :fn, :ad, :img)", use(lastName), use(firstName), use(address), use(img), now; + tmp << "SELECT COUNT(*) FROM PERSON", into(count), now; + assertTrue(count == 1); + BLOB res; + assertTrue(res.size() == 0); + + tmp << "SELECT Image FROM Person WHERE LastName == :ln", bind("lastname"), into(res), now; + assertTrue(res.size() == img.size()); + assertTrue(0 == std::memcmp(res.rawContent(), img.rawContent(), sizeof(img))); + assertTrue(0 == std::memcmp(res.rawContent(), &ds, sizeof(ds))); + DataStruct dsCopy; + std::memcpy(&dsCopy, res.rawContent(), sizeof(dsCopy)); + assertTrue(ds.i == dsCopy.i); + assertTrue(ds.i64 == dsCopy.i64); + assertTrue(ds.f == dsCopy.f); + assertTrue(ds.d == dsCopy.d); + assertTrue(std::string(ds.c) == std::string(dsCopy.c)); +} + + void SQLiteTest::testTuple10() { Session tmp (Poco::Data::SQLite::Connector::KEY, "dummy.db"); @@ -3432,6 +3474,7 @@ CppUnit::Test* SQLiteTest::suite() CppUnit_addTest(pSuite, SQLiteTest, testSingleSelect); CppUnit_addTest(pSuite, SQLiteTest, testEmptyDB); CppUnit_addTest(pSuite, SQLiteTest, testCLOB); + CppUnit_addTest(pSuite, SQLiteTest, testBLOB); CppUnit_addTest(pSuite, SQLiteTest, testTuple10); CppUnit_addTest(pSuite, SQLiteTest, testTupleVector10); CppUnit_addTest(pSuite, SQLiteTest, testTuple9); diff --git a/Data/SQLite/testsuite/src/SQLiteTest.h b/Data/SQLite/testsuite/src/SQLiteTest.h old mode 100644 new mode 100755 index 0122ca2e6..8be7e69fe --- a/Data/SQLite/testsuite/src/SQLiteTest.h +++ b/Data/SQLite/testsuite/src/SQLiteTest.h @@ -76,6 +76,7 @@ public: void testEmptyDB(); void testCLOB(); + void testBLOB(); void testTuple1(); void testTupleVector1(); From a2227c3bfd2013939034234be32e1d7dbe193ae1 Mon Sep 17 00:00:00 2001 From: Alex Fabijanic Date: Wed, 15 Jan 2020 20:58:09 +0100 Subject: [PATCH 003/120] accept notifications by name (if they have one) --- Foundation/include/Poco/AbstractObserver.h | 2 +- Foundation/include/Poco/NObserver.h | 4 ++-- Foundation/include/Poco/Observer.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) mode change 100644 => 100755 Foundation/include/Poco/AbstractObserver.h mode change 100644 => 100755 Foundation/include/Poco/NObserver.h mode change 100644 => 100755 Foundation/include/Poco/Observer.h diff --git a/Foundation/include/Poco/AbstractObserver.h b/Foundation/include/Poco/AbstractObserver.h old mode 100644 new mode 100755 index baa40a66d..6528660dd --- a/Foundation/include/Poco/AbstractObserver.h +++ b/Foundation/include/Poco/AbstractObserver.h @@ -38,7 +38,7 @@ public: virtual void notify(Notification* pNf) const = 0; virtual bool equals(const AbstractObserver& observer) const = 0; - virtual bool accepts(Notification* pNf) const = 0; + virtual bool accepts(Notification* pNf, const char* pName = 0) const = 0; virtual AbstractObserver* clone() const = 0; virtual void disable() = 0; }; diff --git a/Foundation/include/Poco/NObserver.h b/Foundation/include/Poco/NObserver.h old mode 100644 new mode 100755 index 8b5106c8b..4231dc183 --- a/Foundation/include/Poco/NObserver.h +++ b/Foundation/include/Poco/NObserver.h @@ -94,9 +94,9 @@ public: return pObs && pObs->_pObject == _pObject && pObs->_method == _method; } - bool accepts(Notification* pNf) const + bool accepts(Notification* pNf, const char* pName = 0) const { - return dynamic_cast(pNf) != 0; + return dynamic_cast(pNf) && (!pName || pNf->name() == pName); } AbstractObserver* clone() const diff --git a/Foundation/include/Poco/Observer.h b/Foundation/include/Poco/Observer.h old mode 100644 new mode 100755 index 0bec7412c..9be67b2ee --- a/Foundation/include/Poco/Observer.h +++ b/Foundation/include/Poco/Observer.h @@ -92,9 +92,9 @@ public: return pObs && pObs->_pObject == _pObject && pObs->_method == _method; } - bool accepts(Notification* pNf) const + bool accepts(Notification* pNf, const char* pName = 0) const { - return dynamic_cast(pNf) != 0; + return dynamic_cast(pNf) && (!pName || pNf->name() == pName); } AbstractObserver* clone() const From 07c1103bc95a605f8e996876e6484a5123a60b2e Mon Sep 17 00:00:00 2001 From: Alex Fabijanic Date: Wed, 15 Jan 2020 21:55:32 +0100 Subject: [PATCH 004/120] catch std::exception on parsing --- PocoDoc/src/PocoDoc.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/PocoDoc/src/PocoDoc.cpp b/PocoDoc/src/PocoDoc.cpp index 045b8bffe..c65673c22 100644 --- a/PocoDoc/src/PocoDoc.cpp +++ b/PocoDoc/src/PocoDoc.cpp @@ -329,6 +329,11 @@ protected: logger().log(exc); ++errors; } + catch (std::exception& exc) + { + logger().error(std::string(exc.what())); + ++errors; + } } return errors; } From 150b9e2012de2c9acc7148f7e4608d0aedbcb4b1 Mon Sep 17 00:00:00 2001 From: Alex Fabijanic Date: Wed, 15 Jan 2020 22:06:45 +0100 Subject: [PATCH 005/120] fix a leak, add some table features --- PDF/include/Poco/PDF/Cell.h | 24 +++++++++++++++++++++- PDF/include/Poco/PDF/Font.h | 2 +- PDF/src/Cell.cpp | 14 ++++++++----- PDF/src/Font.cpp | 2 +- PDF/src/Page.cpp | 8 ++++++-- PDF/src/Table.cpp | 18 +++++++++++++--- PDF/src/XMLTemplate.cpp | 41 +++++++++++++++++++++++++++++++++++-- 7 files changed, 94 insertions(+), 15 deletions(-) mode change 100644 => 100755 PDF/include/Poco/PDF/Cell.h mode change 100644 => 100755 PDF/include/Poco/PDF/Font.h mode change 100644 => 100755 PDF/src/Cell.cpp mode change 100644 => 100755 PDF/src/Font.cpp mode change 100644 => 100755 PDF/src/Page.cpp mode change 100644 => 100755 PDF/src/Table.cpp mode change 100644 => 100755 PDF/src/XMLTemplate.cpp diff --git a/PDF/include/Poco/PDF/Cell.h b/PDF/include/Poco/PDF/Cell.h old mode 100644 new mode 100755 index 82c7eaa55..6797e9079 --- a/PDF/include/Poco/PDF/Cell.h +++ b/PDF/include/Poco/PDF/Cell.h @@ -35,7 +35,7 @@ public: }; Cell(const AttributedString& content = "", const std::string& name = "", FontMapPtr pFontMap = 0); - Cell(const AttributedString& content, FontMapPtr pFontMap, const std::string& encoding = "UTF-8" , bool trueType = true); + Cell(const AttributedString& content, FontMapPtr pFontMap, const std::string& encoding = "UTF-8" , bool trueType = true, int widthAsPct=-1); ~Cell(); const std::string& getName() const; @@ -56,6 +56,9 @@ public: void setFonts(FontMapPtr pFontMap); FontMapPtr getFonts() const { return _pFontMap; } void draw(Page& page, float x, float y, float width, float height); + int getWidthAsPct() const; + void setWidthAsPct(int width); + bool hasWidth() const; private: AttributedString _content; @@ -65,6 +68,7 @@ private: FontMapPtr _pFontMap; std::string _encoding; bool _trueType; + int _widthAsPct; }; @@ -148,6 +152,24 @@ inline void Cell::setLineWidth(float width) } +inline int Cell::getWidthAsPct() const +{ + return _widthAsPct; +} + + +inline void Cell::setWidthAsPct(int width) +{ + _widthAsPct = width; +} + + +inline bool Cell::hasWidth() const +{ + return _widthAsPct > 0; +} + + } } // namespace Poco::PDF diff --git a/PDF/include/Poco/PDF/Font.h b/PDF/include/Poco/PDF/Font.h old mode 100644 new mode 100755 index 796024032..023b7ec39 --- a/PDF/include/Poco/PDF/Font.h +++ b/PDF/include/Poco/PDF/Font.h @@ -30,7 +30,7 @@ class PDF_API Font: public Resource /// Font class represents font resource. { public: - Font(HPDF_Doc* pPDF, const HPDF_Font& resource); + Font(HPDF_Doc* pPDF, HPDF_Font resource); /// Creates the font. ~Font(); diff --git a/PDF/src/Cell.cpp b/PDF/src/Cell.cpp old mode 100644 new mode 100755 index b466c7f4b..e2b0acff8 --- a/PDF/src/Cell.cpp +++ b/PDF/src/Cell.cpp @@ -15,19 +15,20 @@ Cell::Cell(const AttributedString& content, const std::string& name, FontMapPtr _outline(OUTLINE_NONE), _lineWidth(1.0f), _encoding("UTF-8"), - _trueType(true) - + _trueType(true), + _widthAsPct(-1) { setFonts(pFontMap); } -Cell::Cell(const AttributedString& content, FontMapPtr pFontMap, const std::string& encoding, bool trueType): +Cell::Cell(const AttributedString& content, FontMapPtr pFontMap, const std::string& encoding, bool trueType, int widthAsPct): _content(content), _outline(OUTLINE_NONE), _lineWidth(1.0f), _encoding(encoding), - _trueType(trueType) + _trueType(trueType), + _widthAsPct(widthAsPct) { setFonts(pFontMap); } @@ -71,15 +72,18 @@ void Cell::borderAll(bool show) void Cell::draw(Page& page, float x, float y, float width, float height) { // uncomment to force showing of the cell outline regardless of settings - // _outline = 15; + //_outline = 15; if (_outline != OUTLINE_NONE) { page.setLineWidth(_lineWidth); page.moveTo(x, y); if (_outline & OUTLINE_LEFT ) page.lineTo(x, y+height); + page.moveTo(x, y+height); if (_outline & OUTLINE_TOP ) page.lineTo(x+width, y+height); + page.moveTo(x+width, y+height); if (_outline & OUTLINE_RIGHT ) page.lineTo(x+width, y ); + page.moveTo(x+width, y); if (_outline & OUTLINE_BOTTOM) page.lineTo(x, y ); page.stroke(); } diff --git a/PDF/src/Font.cpp b/PDF/src/Font.cpp old mode 100644 new mode 100755 index 27d3131b3..fcbbc4769 --- a/PDF/src/Font.cpp +++ b/PDF/src/Font.cpp @@ -19,7 +19,7 @@ namespace Poco { namespace PDF { -Font::Font(HPDF_Doc* pPDF, const HPDF_Font& font): +Font::Font(HPDF_Doc* pPDF, HPDF_Font font): Resource(pPDF, font, HPDF_Font_GetFontName(font)) { } diff --git a/PDF/src/Page.cpp b/PDF/src/Page.cpp old mode 100644 new mode 100755 index a02d717ff..6f7fd49c1 --- a/PDF/src/Page.cpp +++ b/PDF/src/Page.cpp @@ -49,6 +49,7 @@ Page::Page(const Page& other): Page::~Page() { + delete _pCurrentFont; } @@ -120,8 +121,11 @@ void Page::setTTFont(const std::string& name, float size, const std::string& enc const Font& Page::getFont() const { - delete _pCurrentFont; - return *(_pCurrentFont = new Font(&_pDocument->handle(), HPDF_Page_GetCurrentFont(_page))); + delete _pCurrentFont; _pCurrentFont = 0; + HPDF_Font pCurFont = HPDF_Page_GetCurrentFont(_page); + if (!pCurFont) throw Poco::NullPointerException("PDF::Page has no font set."); + _pCurrentFont = new Font(&_pDocument->handle(), pCurFont); + return *_pCurrentFont; } diff --git a/PDF/src/Table.cpp b/PDF/src/Table.cpp old mode 100644 new mode 100755 index af12d18a8..94d8a9281 --- a/PDF/src/Table.cpp +++ b/PDF/src/Table.cpp @@ -64,19 +64,31 @@ void Table::draw(Page& page, float x, float y, float width, float height) { if (_cells.size()) { - int rows = _cells.size(); - int cols = _cells[0].size(); + int rows = static_cast(_cells.size()); + int cols = static_cast(_cells[0].size()); int r = 0; for (Cells::iterator it = _cells.begin(); it != _cells.end(); ++it) { TableRow& row(*it); float h = height / rows; int c = 0; + float lastX = x; for (TableRow::iterator itr = row.begin(); itr != row.end(); ++itr) { Cell& cell(*itr); float w = width / cols; - cell.draw(page, x + (w * c), y - (h * r), w, h); + if (!cell.hasWidth()) + { + cell.draw(page, x + (w * c), y - (h * r), w, h); + lastX += (w * c); + } + else + { + w = width * cell.getWidthAsPct() / 100.0f; + cell.draw(page, lastX, y - (h * r), w, h); + lastX += w; + } + ++c; } ++r; diff --git a/PDF/src/XMLTemplate.cpp b/PDF/src/XMLTemplate.cpp old mode 100644 new mode 100755 index 4f5850de4..871f19a02 --- a/PDF/src/XMLTemplate.cpp +++ b/PDF/src/XMLTemplate.cpp @@ -279,6 +279,16 @@ public: _pPage->setLineWidth(0.2f); RGBColor black = {0, 0, 0}; _pPage->setRGBStroke(black); + + // read or force font, page must have default + std::string fontFamily = _styles.getString("font-family", "helvetica"); + float fontSize = _styles.getFloat("font-size", 10.0); + std::string fontStyle = _styles.getString("font-style", "normal"); + std::string fontWeight = _styles.getString("font-weight", "normal"); + + Font font = loadFont(fontFamily, fontStyle, fontWeight); + _pPage->setFont(font, fontSize); + _boxes.push_back(Box(0, 0, _pPage->getWidth(), _pPage->getHeight())); float margin = _styles.getFloat("margin", 0); @@ -323,7 +333,6 @@ public: _text = transcode(_text); Font font = loadFont(fontFamily, fontStyle, fontWeight); - _pPage->setFont(font, fontSize); float width = static_cast(font.textWidth(_text).width*fontSize / 1000); @@ -448,12 +457,20 @@ public: AttributedString::Alignment align = AttributedString::ALIGN_LEFT; int style = AttributedString::STYLE_PLAIN; + std::string fontFamily = _styles.getString("font-family"); float fontSize = _styles.getFloat("font-size"); std::string textAlign = _styles.getString("text-align", "left"); std::string fontStyle = _styles.getString("font-style", "normal"); std::string fontWeight = _styles.getString("font-weight", "normal"); std::string textTransform = _styles.getString("text-transform", "none"); + std::string widthPct = _styles.getString("width", ""); + // solid only supported at this time + bool borderAll = _styles.getString("border-style", "") == "solid"; + bool borderLeft = _styles.getString("border-left", "") == "solid"; + bool borderTop = _styles.getString("border-top", "") == "solid"; + bool borderRight = _styles.getString("border-right", "") == "solid"; + bool borderBottom = _styles.getString("border-bottom", "") == "solid"; _text = transform(_text, textTransform); _text = transcode(_text); @@ -462,6 +479,8 @@ public: align = AttributedString::ALIGN_RIGHT; else if (textAlign == "left") align = AttributedString::ALIGN_LEFT; + else if (textAlign == "center") + align = AttributedString::ALIGN_CENTER; if (fontStyle == "italic" || fontStyle == "oblique") style |= AttributedString::STYLE_ITALIC; @@ -479,7 +498,25 @@ public: (*pFontMap)[AttributedString::STYLE_ITALIC] = italicFontName(normalizedFontFamily); (*pFontMap)[AttributedString::STYLE_BOLD | AttributedString::STYLE_ITALIC] = boldItalicFontName(normalizedFontFamily); - _row.push_back(Cell(content, pFontMap, _encoding, false)); + int width = -1; + if (!widthPct.empty()) + { + if (*widthPct.rbegin() != '%') + throw Poco::InvalidArgumentException("Only percentage widths supported for table cells."); + else + { + widthPct.erase(widthPct.length() - 1); + width = NumberParser::parse(widthPct); + } + } + + Cell cell(content, pFontMap, _encoding, false, width); + if (borderAll) cell.borderAll(true); + if (borderLeft) cell.borderLeft(true); + if (borderTop) cell.borderTop(true); + if (borderRight) cell.borderRight(true); + if (borderBottom) cell.borderBottom(true); + _row.push_back(cell); popStyle(); } From 9932be985e9b6d21915bdb56a70dcbd2228e0322 Mon Sep 17 00:00:00 2001 From: Alex Fabijanic Date: Thu, 16 Jan 2020 19:55:06 +0100 Subject: [PATCH 006/120] few PostgreSQL fixes --- Data/PostgreSQL/Makefile | 33 ++++++++++++++++-- .../include/Poco/Data/PostgreSQL/Binder.h | 6 ++-- Data/PostgreSQL/src/Binder.cpp | 6 ++-- Data/PostgreSQL/testsuite/Makefile | 34 +++++++++++++++++-- .../testsuite/src/PostgreSQLTest.cpp | 34 +++++++++++++------ 5 files changed, 91 insertions(+), 22 deletions(-) diff --git a/Data/PostgreSQL/Makefile b/Data/PostgreSQL/Makefile index 8e95b8f42..518325476 100644 --- a/Data/PostgreSQL/Makefile +++ b/Data/PostgreSQL/Makefile @@ -6,9 +6,38 @@ include $(POCO_BASE)/build/rules/global -INCLUDE += -I/usr/include/postgresql -I/usr/local/include/postgresql -I/usr/local/postgresql/include -I/opt/postgresql/include +ifeq (0, $(shell test -e /usr/include/postgresql; echo $$?)) +INCLUDE += -I/usr/include/postgresql +endif +ifeq (0, $(shell test -e /usr/local/include/postgresql; echo $$?)) +INCLUDE += -I/usr/local/include/postgresql +endif +ifeq (0, $(shell test -e /usr/local/postgresql/include; echo $$?)) +INCLUDE += -I/usr/local/postgresql/include +endif +ifeq (0, $(shell test -e /opt/postgresql/include; echo $$?)) +INCLUDE += -I/opt/postgresql/include +endif +ifeq (0, $(shell test -e /usr/local/opt/libpq/include; echo $$?)) +INCLUDE += -I/usr/local/opt/libpq/include +endif -SYSLIBS += -L/usr/lib$(LIB64SUFFIX)/postgresql -L/usr/local/lib$(LIB64SUFFIX)/postgresql -L/usr/local/postgresql/lib$(LIB64SUFFIX) -L/opt/postgresql/lib$(LIB64SUFFIX) -lpq +ifeq (0, $(shell test -e /usr/lib$(LIB64SUFFIX)/postgresql; echo $$?)) +SYSLIBS += -L/usr/lib$(LIB64SUFFIX)/postgresql +endif +ifeq (0, $(shell test -e /usr/local/lib$(LIB64SUFFIX)/postgresql; echo $$?)) +SYSLIBS += -L/usr/local/lib$(LIB64SUFFIX)/postgresql +endif +ifeq (0, $(shell test -e /usr/local/postgresql/lib$(LIB64SUFFIX); echo $$?)) +SYSLIBS += -L/usr/local/postgresql/lib$(LIB64SUFFIX) +endif +ifeq (0, $(shell test -e /opt/postgresql/lib$(LIB64SUFFIX); echo $$?)) +SYSLIBS += -L/opt/postgresql/lib$(LIB64SUFFIX) +endif +ifeq (0, $(shell test -e /opt/postgresql/lib$(LIB64SUFFIX); echo $$?)) +SYSLIBS += -L/opt/postgresql/lib$(LIB64SUFFIX) +endif +SYSLIBS += -lpq objects = Extractor Binder SessionImpl Connector \ PostgreSQLStatementImpl PostgreSQLException \ diff --git a/Data/PostgreSQL/include/Poco/Data/PostgreSQL/Binder.h b/Data/PostgreSQL/include/Poco/Data/PostgreSQL/Binder.h index 3ad3fcc91..6b3aa966a 100644 --- a/Data/PostgreSQL/include/Poco/Data/PostgreSQL/Binder.h +++ b/Data/PostgreSQL/include/Poco/Data/PostgreSQL/Binder.h @@ -213,11 +213,11 @@ public: virtual void bind(std::size_t pos, const std::list