@@ -24,9 +24,12 @@ class SqlConverter {
2424 private:
2525 std::map<NodeType, std::map<Operator, NodeConv>> converters;
2626 mutable std::string error_msg_;
27+ std::map<std::string, std::string> queryable_column_;
2728
2829 public:
29- SqlConverter () {
30+ SqlConverter () : SqlConverter(std::map<std::string, std::string>()) {}
31+ SqlConverter (const std::map<std::string, std::string>& queryable_column)
32+ : queryable_column_(queryable_column) {
3033 converters[BoolExpr][And] = [](auto n, auto c) -> std::string {
3134 return c.at (0 ) + " AND " + c.at (1 );
3235 };
@@ -124,14 +127,19 @@ class SqlConverter {
124127 }
125128 };
126129
127- converters[PropertyName][NullOp] = [](auto n, auto c) -> std::string {
130+ converters[PropertyName][NullOp] = [this ](auto n, auto c) -> std::string {
128131 // TODO: this is database related. We should add an option for dialects
129132 // sqlite: "" / []
130133 // Oracle: ""
131134 // PostgreSQL: ""
132135 // MySQL: ``
133136 // SQL Server: []
134- return " \" " + std::get<std::string>(n->origin_value ()) + " \" " ;
137+
138+ std::string property_name = std::get<std::string>(n->origin_value ());
139+ std::string column_name = property_name;
140+ if (queryable_column_.find (property_name) != queryable_column_.end ())
141+ column_name = queryable_column_[property_name];
142+ return " \" " + column_name + " \" " ;
135143 };
136144 converters[SpatialPred][S_Contains] = [](auto n, auto c) -> std::string {
137145 return " ST_Contains(" + c.at (0 ) + " ," + c.at (1 ) + " )" ;
0 commit comments