Annotation of parser3/src/classes/void.C, revision 1.28.2.2
1.1 parser 1: /** @file
2: Parser: @b VOID parser class.
3:
1.28.2.1 paf 4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.16 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.20 paf 6: */
1.1 parser 7:
1.28.2.2! paf 8: static const char* IDENT_VOID_C="$Date: 2003/01/31 12:34:27 $";
1.1 parser 9:
10: #include "classes.h"
11: #include "pa_request.h"
12: #include "pa_vint.h"
13: #include "pa_vdouble.h"
14: #include "pa_vvoid.h"
15: #include "pa_sql_connection.h"
1.28.2.2! paf 16: #include "pa_vmethod_frame.h"
1.1 parser 17:
18: // class
19:
1.28.2.2! paf 20: class MVoid: public Methoded {
1.1 parser 21: public:
1.28.2.2! paf 22: MVoid();
1.1 parser 23: public: // Methoded
24: bool used_directly() { return true; }
25: };
26:
1.28.2.2! paf 27: // global variable
! 28:
! 29: MethodedPtr void_class(new MVoid);
! 30:
1.1 parser 31: // methods
32:
1.28.2.2! paf 33: static void _length(Request& r, StringPtr /*method_name*/, MethodParams& /*params*/) {
1.24 paf 34: // always zero
1.28.2.2! paf 35: r.write_no_lang(ValuePtr(new VInt(0)));
1.23 paf 36: }
37:
1.28.2.2! paf 38: static void _pos(Request& r, StringPtr method_name, MethodParams& params) {
! 39: // just checking for consistency
! 40: params.as_no_junction(0, "substr must not be code");
1.24 paf 41: // never found
1.28.2.2! paf 42: r.write_no_lang(ValuePtr(new VInt(-1)));
1.24 paf 43: }
44:
1.28.2.2! paf 45: static void _int(Request& r, StringPtr /*method_name*/, MethodParams& params) {
! 46: VVoid& vvoid=*static_cast<VVoid *>(r.get_self().get());
! 47: r.write_no_lang(ValuePtr(new VInt(
! 48: params.count()==0?vvoid.as_int():params.as_int(0, "default must be int", r))));
1.1 parser 49: }
50:
1.28.2.2! paf 51: static void _double(Request& r, StringPtr /*method_name*/, MethodParams& params) {
! 52: VVoid& vvoid=*static_cast<VVoid *>(r.get_self().get());
! 53: r.write_no_lang(ValuePtr(new VDouble(
! 54: params.count()==0?vvoid.as_double():params.as_double(0, "default must be double", r))));
1.1 parser 55: }
56:
1.5 parser 57: #ifndef DOXYGEN
1.26 paf 58: class Void_sql_event_handlers: public SQL_Driver_query_event_handlers {
1.28.2.2! paf 59: StringPtr statement_string;
1.5 parser 60: public:
1.28.2.2! paf 61: Void_sql_event_handlers(StringPtr astatement_string): statement_string(astatement_string) {}
1.27 paf 62: bool add_column(SQL_Error& /*error*/, void *ptr, size_t size) { /* ignore */ return false; }
63: bool before_rows(SQL_Error& error) {
1.5 parser 64: // there are some result rows, which is wrong
1.27 paf 65: error=SQL_Error("parser.runtime",
1.28.2.2! paf 66: /*statement_string,*/
1.5 parser 67: "must return nothing");
1.27 paf 68: return true;
1.5 parser 69: }
1.27 paf 70: bool add_row(SQL_Error& /*error*/) { /* never */ return false; }
71: bool add_row_cell(SQL_Error& /*error*/, void *ptr, size_t size) { /* never */ return false; }
1.5 parser 72:
73: };
74: #endif
1.28.2.2! paf 75: static void _sql(Request& r, StringPtr method_name, MethodParams& params) {
! 76: ValuePtr statement=params.as_junction(0, "statement must be code");
1.1 parser 77:
78: Temp_lang temp_lang(r, String::UL_SQL);
1.28.2.2! paf 79: StringPtr statement_string=r.process_to_string(statement);
! 80: CharPtr statement_cstr=
! 81: statement_string->cstr(String::UL_UNSPECIFIED, r.connection(method_name));
! 82: Void_sql_event_handlers handlers(statement_string);
! 83: r.connection(method_name)->query(
1.22 paf 84: statement_cstr, 0, 0,
85: handlers,
86: statement_string);
1.1 parser 87: }
88:
89: // constructor
90:
1.28.2.2! paf 91: MVoid::MVoid(): Methoded("void") {
1.23 paf 92: // ^void.length[]
93: add_native_method("length", Method::CT_DYNAMIC, _length, 0, 0);
1.24 paf 94:
95: // ^void.pos[substr]
96: add_native_method("pos", Method::CT_DYNAMIC, _pos, 1, 1);
1.23 paf 97:
1.9 parser 98: // ^void.int[]
99: // ^void.int(default)
1.8 parser 100: add_native_method("int", Method::CT_DYNAMIC, _int, 0, 1);
1.1 parser 101:
1.9 parser 102: // ^void.double[]
103: // ^void.double(default)
1.8 parser 104: add_native_method("double", Method::CT_DYNAMIC, _double, 0, 1);
1.1 parser 105:
106: // ^sql[query]
107: add_native_method("sql", Method::CT_STATIC, _sql, 1, 1);
108: }
E-mail: