我有一组文件的列数比我们实际需要的多。其中,包括的列和顺序可以是可变的。使用此表创建:
class C {
virtual int someMethod();
};
int invokeAMethod(C *c, int (C::*method)()) {
return (c->*method)();
}
Athena只是拉出第一列,因此输出最终为:
invokeAMethod(C*, int (C::*)()): # @invokeAMethod(C*, int (C::*)())
// c is in rdi, method.adj is in rdx, and method.ptr is in rdx
// adjust this pointer
add rdi, rdx
// check whether method is virtual
test sil, 1
// if it is not, skip the following
je .LBB0_2
// load the vtable pointer from the object
mov rax, qword ptr [rdi]
// index into the vtable with the corrected offset to load actual method address
mov rsi, qword ptr [rax + rsi - 1]
.LBB0_2:
// here the actual address of the method is in rsi, we call it
// in this particular case we return the same type
// and do not need to call any destructors
// so we can tail call
jmp rsi # TAILCALL
我正在以编程方式创建这些表,所以我不想阅读每个列名并创建一个包含比我需要的更多数据的表。如果不能将某些列映射到Athena的表中,那么我想我必须这样做。
答案 0 :(得分:1)
我认为不,您必须创建一个包含所有列的表,然后在从该表中选择数据时,您可以指定列。