@@ -80,13 +80,25 @@ void pg_conn_t::exec(std::string const &sql) const
8080 }
8181}
8282
83- void pg_conn_t::copy_data (std::string const &sql,
83+ void pg_conn_t::copy_start (char const *sql) const
84+ {
85+ assert (m_conn);
86+
87+ log_sql (" {}" , sql);
88+ pg_result_t const res{PQexec (m_conn.get (), sql)};
89+ if (res.status () != PGRES_COPY_IN) {
90+ throw std::runtime_error{
91+ " Database error on COPY: {}" _format (error_msg ())};
92+ }
93+ }
94+
95+ void pg_conn_t::copy_send (std::string const &data,
8496 std::string const &context) const
8597{
8698 assert (m_conn);
8799
88- log_sql_data (" Copy data to '{}':\n {}" , context, sql );
89- int const r = PQputCopyData (m_conn.get (), sql .c_str (), (int )sql .size ());
100+ log_sql_data (" Copy data to '{}':\n {}" , context, data );
101+ int const r = PQputCopyData (m_conn.get (), data .c_str (), (int )data .size ());
90102
91103 switch (r) {
92104 case 0 : // need to wait for write ready
@@ -101,17 +113,17 @@ void pg_conn_t::copy_data(std::string const &sql,
101113 break ;
102114 }
103115
104- if (sql .size () < 1100 ) {
105- log_error (" Data: {}" , sql );
116+ if (data .size () < 1100 ) {
117+ log_error (" Data: {}" , data );
106118 } else {
107- log_error (" Data: {}\n ...\n {}" , std::string (sql , 0 , 500 ),
108- std::string (sql, sql .size () - 500 ));
119+ log_error (" Data: {}\n ...\n {}" , std::string (data , 0 , 500 ),
120+ std::string (data, data .size () - 500 ));
109121 }
110122
111123 throw std::runtime_error{" COPYing data to Postgresql." };
112124}
113125
114- void pg_conn_t::end_copy (std::string const &context) const
126+ void pg_conn_t::copy_end (std::string const &context) const
115127{
116128 assert (m_conn);
117129
0 commit comments