MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / dsqlFieldAppearsOnce

Function dsqlFieldAppearsOnce

src/dsql/StmtNodes.cpp:10067–10100  ·  view source on GitHub ↗

Check that a field is named only once in INSERT or UPDATE statements.

Source from the content-addressed store, hash-verified

10065
10066// Check that a field is named only once in INSERT or UPDATE statements.
10067static void dsqlFieldAppearsOnce(const Array<NestConst<ValueExprNode> >& values, const char* command)
10068{
10069 for (FB_SIZE_T i = 0; i < values.getCount(); ++i)
10070 {
10071 const FieldNode* field1 = nodeAs<FieldNode>(values[i]);
10072 if (!field1)
10073 continue;
10074
10075 const MetaName& name1 = field1->dsqlField->fld_name;
10076
10077 for (FB_SIZE_T j = i + 1; j < values.getCount(); ++j)
10078 {
10079 const FieldNode* field2 = nodeAs<FieldNode>(values[j]);
10080 if (!field2)
10081 continue;
10082
10083 const MetaName& name2 = field2->dsqlField->fld_name;
10084
10085 if (name1 == name2)
10086 {
10087 string str = field1->dsqlContext->ctx_relation->rel_name.c_str();
10088 str += ".";
10089 str += name1.c_str();
10090
10091 //// FIXME: line/column is not very accurate for MERGE ... INSERT.
10092 ERRD_post(
10093 Arg::Gds(isc_sqlerr) << Arg::Num(-206) <<
10094 Arg::Gds(isc_dsql_no_dup_name) << str << command <<
10095 Arg::Gds(isc_dsql_line_col_error) <<
10096 Arg::Num(values[j]->line) << Arg::Num(values[j]->column));
10097 }
10098 }
10099 }
10100}
10101
10102static ValueListNode* dsqlPassArray(DsqlCompilerScratch* dsqlScratch, ValueListNode* input)
10103{

Callers 2

dsqlPassMethod · 0.85
internalDsqlPassMethod · 0.85

Calls 5

ERRD_postFunction · 0.85
GdsClass · 0.85
NumClass · 0.85
getCountMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected