// File: Overv[P]pqpp/./pq.hpp
// Function: std::vector<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, pq::value, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, pq::value>>>, std::allocator<std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, pq::value, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, pq::value>>>>> pq::connection::exec<>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
vector<row_t> exec(const string& query, Args... param_args) {
            vector<value> args = make_value_list(param_args...);
            vector<const char*> pq_args = make_pq_args(args);

            auto tmp = PQexecParams(conn.get(), query.c_str(), pq_args.size(), nullptr, pq_args.data(), nullptr, nullptr, 0);
            auto res = unique_ptr<PGresult, function<void(PGresult*)>>(tmp, [=](PGresult* res) {
                PQclear(res);
            });

            return get_rows(move(res));
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0xd0(%rbp)
movq %rdi, %rax
movq %rax, -0xc8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0x30(%rbp), %rdi
movq %rdi, -0xb8(%rbp)
callq 0x6580
movq -0xc0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
leaq -0x48(%rbp), %rdi
callq 0x65f0
jmp 0x326c
movq -0xc0(%rbp), %rdi
callq 0x4980
movq %rax, -0xf0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x2060
movq %rax, -0xe8(%rbp)
leaq -0x48(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
callq 0x6710
movq -0xf8(%rbp), %rdi
movl %eax, -0xdc(%rbp)
callq 0x6730
movq -0xf0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movl -0xdc(%rbp), %edx
movq %rax, %r8
movq %rsp, %rax
movl $0x0, 0x8(%rax)
movq $0x0, (%rax)
xorl %eax, %eax
movl %eax, %r9d
movq %r9, %rcx
callq 0x2220
movq %rax, -0xd8(%rbp)
jmp 0x32ef
movq -0xd8(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x110(%rbp)
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x108(%rbp)
leaq -0xa9(%rbp), %rsi
callq 0x6750
movq -0x110(%rbp), %rsi
movq -0x108(%rbp), %rdx
leaq -0x88(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x5550
movq -0x108(%rbp), %rdi
callq 0x5590
movq -0xd0(%rbp), %rdi
movq -0xc0(%rbp), %rsi
movq -0x100(%rbp), %rdx
callq 0x67e0
jmp 0x3368
leaq -0x88(%rbp), %rdi
callq 0x5620
leaq -0x48(%rbp), %rdi
callq 0x6c90
leaq -0x30(%rbp), %rdi
callq 0x6cf0
movq -0xc8(%rbp), %rax
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x33d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
jmp 0x33ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x5620
leaq -0x48(%rbp), %rdi
callq 0x6c90
leaq -0x30(%rbp), %rdi
callq 0x6cf0
movq -0x50(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)
nop