Annotation of parser3/src/classes/nothing.C, revision 1.3
1.1 parser 1: /** @file
2: Parser: @b nothing parser class.
3:
4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
5:
6: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
7:
1.3 ! parser 8: $Id: nothing.C,v 1.2 2001/05/21 17:12:58 parser Exp $
1.1 parser 9: */
10:
11: #include "classes.h"
12: #include "pa_request.h"
13: #include "pa_vint.h"
14: #include "pa_vdouble.h"
1.2 parser 15: #include "pa_vnothing.h"
1.3 ! parser 16: #include "pa_sql_connection.h"
1.1 parser 17:
18: // defines
19:
20: #define NOTHING_CLASS_NAME "nothing"
21:
22: // class
23:
24: class MNothing : public Methoded {
25: public:
26: MNothing(Pool& pool);
27: public: // Methoded
28: bool used_directly() { return false; }
29: };
30:
31: // methods
32:
33: static void _int(Request& r, const String&, MethodParams *) {
34: Pool& pool=r.pool();
35: VInt *vunknown=static_cast<VInt *>(r.self);
36: Value& value=*new(pool) VInt(pool, vunknown->as_int());
37: r.write_no_lang(value);
38: }
39:
40: static void _double(Request& r, const String&, MethodParams *) {
41: Pool& pool=r.pool();
42: VInt *vunknown=static_cast<VInt *>(r.self);
43: Value& value=*new(pool) VDouble(pool, vunknown->as_double());
44: r.write_no_lang(value);
45: }
46:
1.3 ! parser 47: static void _sql(Request& r, const String& method_name, MethodParams *params) {
! 48: Pool& pool=r.pool();
! 49:
! 50: if(!r.connection)
! 51: PTHROW(0, 0,
! 52: &method_name,
! 53: "without connect");
! 54:
! 55: Value& statement=params->get_junction(0, "statement must be code");
! 56:
! 57: Temp_lang temp_lang(r, String::UL_SQL);
! 58: const String& statement_string=r.process(statement).as_string();
! 59: const char *statement_cstr=
! 60: statement_string.cstr(String::UL_UNSPECIFIED, r.connection);
! 61: unsigned int sql_column_count; SQL_Driver::Cell *sql_columns;
! 62: unsigned long sql_row_count; SQL_Driver::Cell **sql_rows;
! 63: bool need_rethrow=false; Exception rethrow_me;
! 64: PTRY {
! 65: r.connection->query(
! 66: statement_cstr, 0, 0,
! 67: &sql_column_count, &sql_columns,
! 68: &sql_row_count, &sql_rows);
! 69: }
! 70: PCATCH(e) { // connect/process problem
! 71: rethrow_me=e; need_rethrow=true;
! 72: }
! 73: PEND_CATCH
! 74: if(need_rethrow)
! 75: PTHROW(rethrow_me.type(), rethrow_me.code(),
! 76: &statement_string, // setting more specific source [were url]
! 77: rethrow_me.comment());
! 78:
! 79: // there are some result rows, which is wrong
! 80: if(sql_row_count)
! 81: PTHROW(0, 0,
! 82: &statement_string,
! 83: "must not return result");
! 84: }
! 85:
1.1 parser 86: // constructor
87:
88: MNothing::MNothing(Pool& apool) : Methoded(apool) {
89: set_name(*NEW String(pool(), NOTHING_CLASS_NAME));
90:
91:
92: // ^nothing.int[]
93: add_native_method("int", Method::CT_DYNAMIC, _int, 0, 0);
94:
95: // ^nothing.double[]
96: add_native_method("double", Method::CT_DYNAMIC, _double, 0, 0);
1.3 ! parser 97:
! 98: // ^sql[query]
! 99: add_native_method("sql", Method::CT_ANY, _sql, 1, 1);
1.1 parser 100: }
101:
102: // global variable
103:
1.3 ! parser 104: Methoded *nothing_class;
1.1 parser 105:
106: // creator
107:
108: Methoded *MNothing_create(Pool& pool) {
1.3 ! parser 109: return nothing_class=new(pool) MNothing(pool);
1.1 parser 110: }
E-mail: