static sql_exp * rel_psm_declare_table(mvc *sql, dnode *n) { sql_rel *rel = NULL; dlist *qname = n->next->data.lval; char *name = qname_table(qname); char *sname = qname_schema(qname); sql_table *t; if (sname) /* not allowed here */ return sql_error(sql, 02, "DECLARE TABLE: qualified name not allowed"); if (frame_find_var(sql, name)) return sql_error(sql, 01, "Variable '%s' already declared", name); assert(n->next->next->next->type == type_int); rel = rel_create_table(sql, cur_schema(sql), SQL_DECLARED_TABLE, NULL, name, n->next->next->data.sym, n->next->next->next->data.i_val, NULL); if (!rel || rel->op != op_ddl || rel->flag != DDL_CREATE_TABLE) return NULL; t = (sql_table*)((atom*)((sql_exp*)rel->exps->t->data)->l)->data.val.pval; stack_push_table(sql, name, rel, t); return exp_table(sql->sa, sa_strdup(sql->sa, name), t, sql->frame); }
static sql_exp * rel_psm_declare_table(mvc *sql, dnode *n) { sql_rel *rel = NULL, *baset = NULL; dlist *qname = n->next->data.lval; const char *name = qname_table(qname); const char *sname = qname_schema(qname); sql_table *t; if (sname) /* not allowed here */ return sql_error(sql, 02, SQLSTATE(42000) "DECLARE TABLE: qualified name not allowed"); if (frame_find_var(sql, name)) return sql_error(sql, 01, SQLSTATE(42000) "Variable '%s' already declared", name); assert(n->next->next->next->type == type_int); rel = rel_create_table(sql, cur_schema(sql), SQL_DECLARED_TABLE, NULL, name, n->next->next->data.sym, n->next->next->next->data.i_val, NULL, NULL, NULL, false, NULL, 0); if (!rel) return NULL; if(rel->op == op_ddl) { baset = rel; } else if(rel->op == op_insert) { baset = rel->l; } else { return NULL; } if(baset->flag != DDL_CREATE_TABLE) return NULL; t = (sql_table*)((atom*)((sql_exp*)baset->exps->t->data)->l)->data.val.pval; if(!stack_push_table(sql, name, baset, t)) return sql_error(sql, 02, SQLSTATE(HY001) MAL_MALLOC_FAIL); return exp_table(sql->sa, sa_strdup(sql->sa, name), t, sql->frame); }
const std::vector<gf2m>& log_table(size_t deg) { static std::vector<gf2m> tabs[MAX_EXT_DEG + 1]; if(deg < 2 || deg > MAX_EXT_DEG) throw std::runtime_error("GF2m_Field does not support degree " + std::to_string(deg)); if(tabs[deg].empty()) tabs[deg] = gf_log_table(deg, exp_table(deg)); return tabs[deg]; }