Exemplo n.º 1
0
AbstractQoreNode* QoreValue::takeNode() {
   switch (type) {
      case QV_Bool: return get_bool_node(v.b);
      case QV_Int: return new QoreBigIntNode(v.i);
      case QV_Float: return new QoreFloatNode(v.f);
      case QV_Node: return takeNodeIntern();
      default: assert(false);
         // no break
   }
   return 0;
}
Exemplo n.º 2
0
AbstractQoreNode* QoreValue::getReferencedValue() const {
   switch (type) {
      case QV_Bool: return get_bool_node(v.b);
      case QV_Int: return new QoreBigIntNode(v.i);
      case QV_Float: return new QoreFloatNode(v.f);
      case QV_Node: return v.n ? v.n->refSelf() : 0;
      default: assert(false);
         // no break
   }
   return 0;
}
AbstractQoreNode *javaToQore(jboolean b) {
   return get_bool_node(b);
}
Exemplo n.º 4
0
AbstractQoreNode *command::get_node(const CS_DATAFMT_EX& datafmt, const output_value_buffer& buffer, ExceptionSink* xsink) {
   if (buffer.indicator == -1) { // SQL NULL
      return null();
   }

   const QoreEncoding *encoding = m_conn.getEncoding();

   switch (datafmt.datatype) {
      case CS_LONGCHAR_TYPE:
      case CS_VARCHAR_TYPE:
      case CS_TEXT_TYPE: {
	 CS_CHAR* value = (CS_CHAR*)(buffer.value);

	 if (use_numbers(m_conn) && is_number(datafmt))
	    return new QoreNumberNode(value);

	 ReferenceHolder<QoreStringNode> s(new QoreStringNode(value, buffer.value_len - 1, encoding), xsink);

	 if (need_trim(datafmt))
	    s->trim_trailing(' ');
	 return s.release();
      }

      case CS_CHAR_TYPE: {
	 CS_CHAR* value = (CS_CHAR*)(buffer.value);
	 if (use_numbers(m_conn) && is_number(datafmt))
	    return new QoreNumberNode(value);

	 ReferenceHolder<QoreStringNode> s(new QoreStringNode(value, buffer.value_len, encoding), xsink);

	 if (need_trim(datafmt))
	    s->trim_trailing(' ');
	 return s.release();
      }

      case CS_VARBINARY_TYPE:
      case CS_BINARY_TYPE:
      case CS_LONGBINARY_TYPE:
      case CS_IMAGE_TYPE: {
	 CS_BINARY* value = (CS_BINARY*)(buffer.value);
	 int size = buffer.value_len;
	 void* block = malloc(size);
	 if (!block) {
	    xsink->outOfMemory();
	    return 0;
	 }
	 memcpy(block, value, size);
	 return new BinaryNode(block, size);
      }

      case CS_TINYINT_TYPE: {
	 CS_TINYINT* value = (CS_TINYINT*)(buffer.value);
	 return new QoreBigIntNode(*value);
      }

      case CS_SMALLINT_TYPE: {
	 CS_SMALLINT* value = (CS_SMALLINT*)(buffer.value);
	 return new QoreBigIntNode(*value);
      }

      case CS_INT_TYPE: {
	 CS_INT* value = (CS_INT*)(buffer.value);
	 return new QoreBigIntNode(*value);
      }

#ifdef CS_BIGINT_TYPE
      case CS_BIGINT_TYPE: {
	 int64 *value = (int64 *)(buffer.value);
	 return new QoreBigIntNode(*value);
      }
#endif

      case CS_REAL_TYPE: {
	 CS_REAL* value = (CS_REAL*)(buffer.value);
	 return new QoreFloatNode((double)*value);
      }

      case CS_FLOAT_TYPE: {
	 CS_FLOAT* value = (CS_FLOAT*)(buffer.value);
	 return new QoreFloatNode((double)*value);
      }

      case CS_BIT_TYPE: {
	 CS_BIT* value = (CS_BIT*)(buffer.value);
	 return get_bool_node(*value != 0);
      }

      case CS_DATETIME_TYPE: {
	 CS_DATETIME* value = (CS_DATETIME*)(buffer.value);

	 ss::Conversions conv;
	 // NOTE: can't find a USER_* define for 38!
	 if (datafmt.usertype == 38)
            return conv.TIME_to_DateTime(*value, m_conn.getTZ());

	 return conv.DATETIME_to_DateTime(*value, m_conn.getTZ());
      }
      case CS_DATETIME4_TYPE: {
	 ss::Conversions conv;
	 CS_DATETIME4* value = (CS_DATETIME4*)(buffer.value);
	 return conv.DATETIME4_to_DateTime(*value);
      }

      default:
	 xsink->raiseException("DBI-EXEC-EXCEPTION", "Unknown data type %d", (int)datafmt.datatype);
	 return 0;
   } // switch
}