Skip to content

Commit d4dcacf

Browse files
committed
Add more SQL operators
1 parent 2de794e commit d4dcacf

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

lib/sql/include/qx/sql/qx-sqlstring.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,19 @@ class QX_SQL_EXPORT SqlString
3838
friend SqlString QxSql::operator""_sqi(const char16_t* str, size_t size) noexcept;
3939
friend SqlString QxSql::operator""_sqs(const char16_t* str, size_t size) noexcept;
4040
friend SqlString operator!(const SqlString& s);
41-
friend SqlString operator&&(const SqlString& lhs, const SqlString& rhs);
42-
friend SqlString operator||(const SqlString& lhs, const SqlString& rhs);
43-
friend SqlString operator==(const SqlString& lhs, const SqlString& rhs);
44-
friend SqlString operator!=(const SqlString& lhs, const SqlString& rhs);
45-
friend SqlString operator<(const SqlString& lhs, const SqlString& rhs);
46-
friend SqlString operator<=(const SqlString& lhs, const SqlString& rhs);
47-
friend SqlString operator>(const SqlString& lhs, const SqlString& rhs);
48-
friend SqlString operator>=(const SqlString& lhs, const SqlString& rhs);
41+
friend SqlString operator&&(const SqlString& a, const SqlString& b);
42+
friend SqlString operator||(const SqlString& a, const SqlString& b);
43+
friend SqlString operator==(const SqlString& a, const SqlString& b);
44+
friend SqlString operator!=(const SqlString& a, const SqlString& b);
45+
friend SqlString operator<(const SqlString& a, const SqlString& b);
46+
friend SqlString operator<=(const SqlString& a, const SqlString& b);
47+
friend SqlString operator>(const SqlString& a, const SqlString& b);
48+
friend SqlString operator>=(const SqlString& a, const SqlString& b);
49+
friend SqlString operator+(const SqlString& a, const SqlString& b);
50+
friend SqlString operator-(const SqlString& a, const SqlString& b);
51+
friend SqlString operator*(const SqlString& a, const SqlString& b);
52+
friend SqlString operator/(const SqlString& a, const SqlString& b);
53+
friend SqlString operator^=(const SqlString& a, const SqlString& b);
4954
friend SqlString operator==(const SqlString& a, const SqlQuery& b);
5055
friend SqlString operator!=(const SqlString& a, const SqlQuery& b);
5156
friend SqlString operator<(const SqlString& a, const SqlQuery& b);
@@ -111,6 +116,12 @@ inline SqlString operator<(const SqlString& a, const SqlString& b) { return SqlS
111116
inline SqlString operator<=(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" <= "_s + b.mStr); }
112117
inline SqlString operator>(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" > "_s + b.mStr); }
113118
inline SqlString operator>=(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" >= "_s + b.mStr); }
119+
inline SqlString operator+(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" + "_s + b.mStr); }
120+
inline SqlString operator-(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" - "_s + b.mStr); }
121+
inline SqlString operator*(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" * "_s + b.mStr); }
122+
inline SqlString operator/(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" / "_s + b.mStr); }
123+
// Sub for = since we cannot override operator=() sensibly
124+
inline SqlString operator^=(const SqlString& a, const SqlString& b) { return SqlString(a.mStr + u" = "_s + b.mStr); }
114125

115126
// Sub-query
116127
SqlString operator==(const SqlString& s, const SqlQuery& q);
@@ -120,6 +131,7 @@ SqlString operator<=(const SqlString& s, const SqlQuery& q);
120131
SqlString operator>(const SqlString& s, const SqlQuery& q);
121132
SqlString operator>=(const SqlString& s, const SqlQuery& q);
122133

134+
// TODO: To minimize confusion we may want to get rid of these and make them methods, though the user would differ
123135
// Special (use of assignment operators for non-assignment here is because many operators are already used in SQL)
124136
// Concat (with space): Chosen cause + is taken and separating words with just a space is generally only use for
125137
// shorthand aliases and "or equal" kind of matches saying "this is an alias", like "otherwise known as"

lib/sql/src/qx-sqlstring.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,21 @@ bool SqlString::isEmpty() const { return mStr.isEmpty(); }
191191
*
192192
* @fn SqlString operator>=(const SqlString& a, const SqlString& b)
193193
* Returns a string of "a >= b".
194+
*
195+
* @fn SqlString operator+(const SqlString& a, const SqlString& b)
196+
* Returns a string of "a + b".
197+
*
198+
* @fn SqlString operator-(const SqlString& a, const SqlString& b)
199+
* Returns a string of "a - b".
200+
*
201+
* @fn SqlString operator*(const SqlString& a, const SqlString& b)
202+
* Returns a string of "a * b".
203+
*
204+
* @fn SqlString operator/(const SqlString& a, const SqlString& b)
205+
* Returns a string of "a / b".
206+
*
207+
* @fn SqlString operator^=(const SqlString& a, const SqlString& b)
208+
* Returns a string of "a = b".
194209
*/
195210

196211
/*!

0 commit comments

Comments
 (0)