Jvm.cpp://--------------------------------------------------------------------*- C++ -*-
Jvm.cpp://
Jvm.cpp://  Qore Programming Language
Jvm.cpp://
Jvm.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Jvm.cpp://
Jvm.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Jvm.cpp://  copy of this software and associated documentation files (the "Software"),
Jvm.cpp://  to deal in the Software without restriction, including without limitation
Jvm.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Jvm.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Jvm.cpp://  Software is furnished to do so, subject to the following conditions:
Jvm.cpp://
Jvm.cpp://  The above copyright notice and this permission notice shall be included in
Jvm.cpp://  all copies or substantial portions of the Software.
Jvm.cpp://
Jvm.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jvm.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jvm.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Jvm.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Jvm.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Jvm.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Jvm.cpp://  DEALINGS IN THE SOFTWARE.
Jvm.cpp://
Jvm.cpp://------------------------------------------------------------------------------
Jvm.cpp:#include "Jvm.h"
Jvm.cpp:#include <qore/Qore.h>
Jvm.cpp:#include "defs.h"
Jvm.cpp:#include "Globals.h"
Jvm.cpp:#include "QoreJniClassMap.h"
Jvm.cpp:namespace jni {
Jvm.cpp:JavaVM* Jvm::vm = nullptr;
Jvm.cpp:thread_local JNIEnv *Jvm::env;
Jvm.cpp:QoreStringNode* Jvm::createVM() {
Jvm.cpp:    assert(vm == nullptr);
Jvm.cpp:    JavaVMInitArgs vm_args;
Jvm.cpp:    vm_args.version = JNI_VERSION_10;
Jvm.cpp:    vm_args.ignoreUnrecognized = false;
Jvm.cpp:    vm_args.nOptions = 0;
Jvm.cpp:    size_t num_options = 1;
Jvm.cpp:    bool disable_jit = false;
Jvm.cpp:    // check QORE_JNI_DISABLE_JIT environment variable
Jvm.cpp:    {
Jvm.cpp:        QoreString val;
Jvm.cpp:        if (!SystemEnvironment::get("QORE_JNI_DISABLE_JIT", val)) {
Jvm.cpp:            disable_jit = q_parse_bool(val.c_str());
Jvm.cpp:            if (disable_jit) {
Jvm.cpp:                ++num_options;
Jvm.cpp:                //printd(5, "jni module: disabling JIT\n");
Jvm.cpp:            }
Jvm.cpp:        }
Jvm.cpp:    }
Jvm.cpp:#ifdef QORE_JNI_SUPPORT_CLASSPATH
Jvm.cpp:    // this is disabled, because we use our own URLClassloader now to load all classes
Jvm.cpp:    QoreString classpath;
Jvm.cpp:    if (!SystemEnvironment::get("QORE_CLASSPATH", classpath)) {
Jvm.cpp:        ++num_options;
Jvm.cpp:    }
Jvm.cpp:#endif
Jvm.cpp:    JavaVMOption options[num_options];
Jvm.cpp:    // "reduced signals"
Jvm.cpp:    options[vm_args.nOptions++].optionString = (char*)"-Xrs";
Jvm.cpp:    if (disable_jit) {
Jvm.cpp:        // disable JIT
Jvm.cpp:        options[vm_args.nOptions++].optionString = (char*)"-Xint";
Jvm.cpp:    }
Jvm.cpp:#ifdef QORE_JNI_SUPPORT_CLASSPATH
Jvm.cpp:    if (!classpath.empty()) {
Jvm.cpp:        classpath.prepend("-Djava.class.path=");
Jvm.cpp:        options[vm_args.nOptions++].optionString = (char*)classpath.c_str();
Jvm.cpp:        printd(LogLevel, "classpath: '%s'\n", classpath.c_str());
Jvm.cpp:    }
Jvm.cpp:#endif
Jvm.cpp:    vm_args.options = options;
Jvm.cpp:    int rc = JNI_CreateJavaVM(&vm, reinterpret_cast<void**>(&env), &vm_args);
Jvm.cpp:    if (rc != JNI_OK) {
Jvm.cpp:        return new QoreStringNodeMaker("JNI_CreateJavaVM() failed with error code %d", rc);
Jvm.cpp:    }
Jvm.cpp:    return 0;
Jvm.cpp:}
Jvm.cpp:void Jvm::destroyVM() {
Jvm.cpp:    assert(vm);
Jvm.cpp:    Globals::cleanup();
Jvm.cpp:    vm->DestroyJavaVM();
Jvm.cpp:    vm = nullptr;
Jvm.cpp:    env = nullptr;
Jvm.cpp:}
Jvm.cpp:JNIEnv *Jvm::attachAndGetEnv() {
Jvm.cpp:    if (!vm) {
Jvm.cpp:        throw UnableToAttachException(JNI_ERR);
Jvm.cpp:    }
Jvm.cpp:    if (env == nullptr) {
Jvm.cpp:        jint err = vm->AttachCurrentThread(reinterpret_cast<void**>(&env), nullptr);
Jvm.cpp:        if (err != JNI_OK) {
Jvm.cpp:            throw UnableToAttachException(err);
Jvm.cpp:        }
Jvm.cpp:        printd(LogLevel, "JNI - thread %d attached, env: %p\n", q_gettid(), env);
Jvm.cpp:    }
Jvm.cpp:    return env;
Jvm.cpp:}
Jvm.cpp:JNIEnv* Jvm::attachAndGetEnv(bool& new_attach) {
Jvm.cpp:    if (!vm) {
Jvm.cpp:        throw UnableToAttachException(JNI_ERR);
Jvm.cpp:    }
Jvm.cpp:    if (env == nullptr) {
Jvm.cpp:        jint err = vm->AttachCurrentThread(reinterpret_cast<void**>(&env), nullptr);
Jvm.cpp:        if (err != JNI_OK) {
Jvm.cpp:            throw UnableToAttachException(err);
Jvm.cpp:        }
Jvm.cpp:        new_attach = true;
Jvm.cpp:        printd(LogLevel, "JNI - thread %d attached, env: %p\n", q_gettid(), env);
Jvm.cpp:    } else {
Jvm.cpp:        new_attach = false;
Jvm.cpp:    }
Jvm.cpp:    return env;
Jvm.cpp:}
Jvm.cpp:void Jvm::threadCleanup() {
Jvm.cpp:    if (vm && env) {
Jvm.cpp:        printd(LogLevel, "JNI - detaching thread, env: %p\n", env);
Jvm.cpp:        vm->DetachCurrentThread();
Jvm.cpp:        env = nullptr;
Jvm.cpp:    }
Jvm.cpp:}
Jvm.cpp:} // namespace jni
QoreJdbcDriver.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QoreJdbcDriver.h:/*
QoreJdbcDriver.h:    QoreJdbcDriver.h
QoreJdbcDriver.h:    Qore Programming Language JNI Module
QoreJdbcDriver.h:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcDriver.h:    This library is free software; you can redistribute it and/or
QoreJdbcDriver.h:    modify it under the terms of the GNU Lesser General Public
QoreJdbcDriver.h:    License as published by the Free Software Foundation; either
QoreJdbcDriver.h:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcDriver.h:    This library is distributed in the hope that it will be useful,
QoreJdbcDriver.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcDriver.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcDriver.h:    Lesser General Public License for more details.
QoreJdbcDriver.h:    You should have received a copy of the GNU Lesser General Public
QoreJdbcDriver.h:    License along with this library; if not, write to the Free Software
QoreJdbcDriver.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcDriver.h:*/
QoreJdbcDriver.h:#ifndef _QORE_JNI_QOREJDBCDRIVER_H
QoreJdbcDriver.h:#define _QORE_JNI_QOREJDBCDRIVER_H
QoreJdbcDriver.h:#include <qore/Qore.h>
QoreJdbcDriver.h:constexpr const char* JDBC_OPT_CLASSPATH = "classpath";
QoreJdbcDriver.h:constexpr const char* JDBC_OPT_URL = "url";
QoreJdbcDriver.h:namespace jni {
QoreJdbcDriver.h:DLLLOCAL void setup_jdbc_driver();
QoreJdbcDriver.h:}
QoreJdbcDriver.h:#endif
QoreJniClassMap.cpp:/* -*- indent-tabs-mode: nil -*- */
QoreJniClassMap.cpp:/*
QoreJniClassMap.cpp:    QoreJniClassMap.cpp
QoreJniClassMap.cpp:    Qore Programming Language JNI Module
QoreJniClassMap.cpp:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
QoreJniClassMap.cpp:    This library is free software; you can redistribute it and/or
QoreJniClassMap.cpp:    modify it under the terms of the GNU Lesser General Public
QoreJniClassMap.cpp:    License as published by the Free Software Foundation; either
QoreJniClassMap.cpp:    version 2.1 of the License, or (at your option) any later version.
QoreJniClassMap.cpp:    This library is distributed in the hope that it will be useful,
QoreJniClassMap.cpp:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJniClassMap.cpp:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJniClassMap.cpp:    Lesser General Public License for more details.
QoreJniClassMap.cpp:    You should have received a copy of the GNU Lesser General Public
QoreJniClassMap.cpp:    License along with this library; if not, write to the Free Software
QoreJniClassMap.cpp:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJniClassMap.cpp:*/
QoreJniClassMap.cpp:#include <qore/Qore.h>
QoreJniClassMap.cpp:#include <string.h>
QoreJniClassMap.cpp:#include <memory>
QoreJniClassMap.cpp:#include <set>
QoreJniClassMap.cpp:#include "defs.h"
QoreJniClassMap.cpp:#include "Jvm.h"
QoreJniClassMap.cpp:#include "QoreJniClassMap.h"
QoreJniClassMap.cpp:#include "Class.h"
QoreJniClassMap.cpp:#include "Method.h"
QoreJniClassMap.cpp:#include "Functions.h"
QoreJniClassMap.cpp:#include "JavaToQore.h"
QoreJniClassMap.cpp:#include "ModifiedUtf8String.h"
QoreJniClassMap.cpp:#include "JavaClassQoreJavaDynamicApi.inc"
QoreJniClassMap.cpp:namespace jni {
QoreJniClassMap.cpp:static std::string JNI_CK_JAVA_BIN_NAME = "jni_bin_name";
QoreJniClassMap.cpp:// the QoreClass for java::lang::Object
QoreJniClassMap.cpp:JniQoreClass* QC_OBJECT;
QoreJniClassMap.cpp:// the Qore class ID for java::lang::Object
QoreJniClassMap.cpp:qore_classid_t CID_OBJECT;
QoreJniClassMap.cpp:// the QoreClass for java::lang::Class
QoreJniClassMap.cpp:JniQoreClass* QC_CLASS;
QoreJniClassMap.cpp:// the Qore class ID for java::lang::Class
QoreJniClassMap.cpp:qore_classid_t CID_CLASS;
QoreJniClassMap.cpp:// the QoreClass for java::lang::reflect::Method
QoreJniClassMap.cpp:JniQoreClass* QC_METHOD;
QoreJniClassMap.cpp:// the Qore class ID for java::reflect::Method
QoreJniClassMap.cpp:qore_classid_t CID_METHOD;
QoreJniClassMap.cpp:// the QoreClass for java::lang::ClassLoader
QoreJniClassMap.cpp:JniQoreClass* QC_CLASSLOADER;
QoreJniClassMap.cpp:// the Qore class ID for java::lang::ClassLoader
QoreJniClassMap.cpp:qore_classid_t CID_CLASSLOADER;
QoreJniClassMap.cpp:// the QoreClass for java::lang::Throwable
QoreJniClassMap.cpp:JniQoreClass* QC_THROWABLE;
QoreJniClassMap.cpp:// the Qore class ID for java::lang::Throwable
QoreJniClassMap.cpp:qore_classid_t CID_THROWABLE;
QoreJniClassMap.cpp:// the QoreClass for java::lang::reflect::InvocationHandler
QoreJniClassMap.cpp:JniQoreClass* QC_INVOCATIONHANDLER;
QoreJniClassMap.cpp:// the Qore class ID for java::lang::reflect::InvocationHandler
QoreJniClassMap.cpp:qore_classid_t CID_INVOCATIONHANDLER;
QoreJniClassMap.cpp:// the QoreClass for java::time::ZonedDateTime
QoreJniClassMap.cpp:JniQoreClass* QC_ZONEDDATETIME;
QoreJniClassMap.cpp:// the Qore class ID for java::time::ZonedDateTime
QoreJniClassMap.cpp:qore_classid_t CID_ZONEDDATETIME;
QoreJniClassMap.cpp:bool QoreJniClassMap::init_done = false;
QoreJniClassMap.cpp:std::mutex QoreJniClassMap::init_mutex;
QoreJniClassMap.cpp:std::condition_variable QoreJniClassMap::init_cond;
QoreJniClassMap.cpp:QoreJniClassMap qjcm;
QoreJniClassMap.cpp:static void exec_java_constructor(const QoreMethod& meth, BaseMethod* m, QoreObject* self, const QoreListNode* args,
QoreJniClassMap.cpp:    q_rt_flags_t rtflags, ExceptionSink* xsink);
QoreJniClassMap.cpp:static QoreValue exec_java_static_method(const QoreMethod& meth, BaseMethod* m, const QoreListNode* args,
QoreJniClassMap.cpp:    q_rt_flags_t rtflags, ExceptionSink* xsink);
QoreJniClassMap.cpp:static QoreValue exec_java_method(const QoreMethod& meth, BaseMethod* m, QoreObject* self, QoreJniPrivateData* jd,
QoreJniClassMap.cpp:    const QoreListNode* args, q_rt_flags_t rtflags, ExceptionSink* xsink);
QoreJniClassMap.cpp:QoreRecursiveThreadLock QoreJniClassMap::m;
QoreJniClassMap.cpp:QoreJniClassMap::jtmap_t QoreJniClassMap::jtmap = {
QoreJniClassMap.cpp:    {"java.lang.Object", autoTypeInfo},
QoreJniClassMap.cpp:    // because of automatic array conversions, we do not use "or nothing" types for simple types
QoreJniClassMap.cpp:    {"java.lang.String", stringTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Float", floatTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Double", floatTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Boolean", boolTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Byte", bigIntTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Short", bigIntTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Integer", bigIntTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Long", bigIntTypeInfo},
QoreJniClassMap.cpp:    {"java.lang.Void", nothingTypeInfo},
QoreJniClassMap.cpp:    // for complex types, we use "or nothing" types to allow NULL to be passed explicitly
QoreJniClassMap.cpp:    {"java.time.ZonedDateTime", dateOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"org.qore.jni.QoreRelativeTime", dateOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"java.math.BigDecimal", numberOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"java.util.Map", autoHashOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"java.util.AbstractMap", autoHashOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"java.util.HashMap", autoHashOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"java.util.LinkedHashMap", autoHashOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"org.qore.jni.Hash", autoHashOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"java.util.List", autoListOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"org.qore.jni.QoreObject", objectOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"org.qore.jni.QoreClosureMarker", codeOrNothingTypeInfo},
QoreJniClassMap.cpp:    {"org.qore.jni.QoreClosure", codeOrNothingTypeInfo},
QoreJniClassMap.cpp:};
QoreJniClassMap.cpp:QoreJniClassMap::qt2jmap_t QoreJniClassMap::qt2jmap;
QoreJniClassMap.cpp:QoreJniClassMap::jpmap_t QoreJniClassMap::jpmap = {
QoreJniClassMap.cpp:    {"byte", {bigIntTypeInfo, "B"}},
QoreJniClassMap.cpp:    {"char", {bigIntTypeInfo, "C"}},
QoreJniClassMap.cpp:    {"int", {bigIntTypeInfo, "I"}},
QoreJniClassMap.cpp:    {"long", {bigIntTypeInfo, "J"}},
QoreJniClassMap.cpp:    {"short", {bigIntTypeInfo, "S"}},
QoreJniClassMap.cpp:    {"double", {floatTypeInfo, "D"}},
QoreJniClassMap.cpp:    {"float", {floatTypeInfo, "F"}},
QoreJniClassMap.cpp:    {"void", {nothingTypeInfo, "V"}},
QoreJniClassMap.cpp:    {"boolean", {boolTypeInfo, "Z"}},
QoreJniClassMap.cpp:};
QoreJniClassMap.cpp:static std::string get_class_hash(const QoreClass& qc) {
QoreJniClassMap.cpp:    std::string rv = qc.getNamespacePath();
QoreJniClassMap.cpp:    SimpleRefHolder<BinaryNode> b(qc.getBinaryHash());
QoreJniClassMap.cpp:    rv += std::string(reinterpret_cast<const char*>(b->getPtr()), b->size());
QoreJniClassMap.cpp:    /*
QoreJniClassMap.cpp:    QoreString hex;
QoreJniClassMap.cpp:    hex.concatHex(*b);
QoreJniClassMap.cpp:    printd(5, "get_class_hash() '%s': <%s>\n", qc.getName(), hex.c_str());
QoreJniClassMap.cpp:    */
QoreJniClassMap.cpp:    /*
QoreJniClassMap.cpp:    std::string name = qc.getNamespacePath();
QoreJniClassMap.cpp:    rv.insert(0, name);
QoreJniClassMap.cpp:    */
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:QoreProgram* jni_get_program_context() {
QoreJniClassMap.cpp:    QoreProgram* pgm = nullptr;
QoreJniClassMap.cpp:    jni_get_context(pgm);
QoreJniClassMap.cpp:    return pgm;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:QoreProgram* jni_get_program_context_unconditional() {
QoreJniClassMap.cpp:    QoreProgram* pgm = nullptr;;
QoreJniClassMap.cpp:    jni_get_context_unconditional(pgm);
QoreJniClassMap.cpp:    return pgm;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* jni_get_context() {
QoreJniClassMap.cpp:    QoreProgram* pgm = nullptr;
QoreJniClassMap.cpp:    return jni_get_context(pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* jni_get_context(QoreProgram*& pgm) {
QoreJniClassMap.cpp:    JniExternalProgramData* jpc;
QoreJniClassMap.cpp:    // first try to get any provided context
QoreJniClassMap.cpp:    if (pgm) {
QoreJniClassMap.cpp:        jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:        if (jpc) {
QoreJniClassMap.cpp:            return jpc;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // next try to get the actual Program context of the current object
QoreJniClassMap.cpp:    QoreProgram* pgm0 = getProgram();
QoreJniClassMap.cpp:    if (pgm0 && pgm0 != pgm) {
QoreJniClassMap.cpp:        pgm = pgm0;
QoreJniClassMap.cpp:        jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:        if (jpc) {
QoreJniClassMap.cpp:            return jpc;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // then try the Program context of the code
QoreJniClassMap.cpp:    pgm0 = qore_get_call_program_context();
QoreJniClassMap.cpp:    if (pgm0 && pgm0 != pgm) {
QoreJniClassMap.cpp:        pgm = pgm0;
QoreJniClassMap.cpp:        jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:        if (jpc) {
QoreJniClassMap.cpp:            return jpc;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    pgm = nullptr;
QoreJniClassMap.cpp:    return nullptr;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* jni_get_context_unconditional() {
QoreJniClassMap.cpp:    QoreProgram* pgm = nullptr;
QoreJniClassMap.cpp:    return jni_get_context_unconditional(pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* jni_get_context_unconditional(QoreProgram*& pgm) {
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = jni_get_context(pgm);
QoreJniClassMap.cpp:    if (!jpc) {
QoreJniClassMap.cpp:        pgm = Globals::getJavaContextProgram();
QoreJniClassMap.cpp:        jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:        assert(jpc);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return jpc;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static QoreNamespace* jni_find_create_namespace(QoreNamespace& jns, const char* name, const char*& sn) {
QoreJniClassMap.cpp:    printd(LogLevel, "jni_find_create_namespace() jns: %p '%s'\n", &jns, name);
QoreJniClassMap.cpp:    sn = rindex(name, '.');
QoreJniClassMap.cpp:    QoreNamespace* ns;
QoreJniClassMap.cpp:    // find parent namespace
QoreJniClassMap.cpp:    if (!sn) {
QoreJniClassMap.cpp:        ns = &jns;
QoreJniClassMap.cpp:        sn = name;
QoreJniClassMap.cpp:        printd(LogLevel, "jni_find_create_namespace() same namespace\n");
QoreJniClassMap.cpp:    } else {
QoreJniClassMap.cpp:        QoreString nsp(name);
QoreJniClassMap.cpp:        nsp.replaceAll(".", "::");
QoreJniClassMap.cpp:        ++sn;
QoreJniClassMap.cpp:        ns = jns.findCreateNamespacePath(nsp.c_str());
QoreJniClassMap.cpp:        printd(LogLevel, "jni_find_create_namespace() jns target: %p '%s' nsp: '%s' ns: %p '%s' new: '%s'\n", &jns,
QoreJniClassMap.cpp:            jns.getName(), nsp.c_str(), ns, ns->getPath(true).c_str(), sn);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return ns;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::staticInitBackground(ExceptionSink* xsink, void* pgm_ptr) {
QoreJniClassMap.cpp:    QoreProgram* pgm = static_cast<QoreProgram*>(pgm_ptr);
QoreJniClassMap.cpp:    // set program context for initialization
QoreJniClassMap.cpp:    QoreProgramContextHelper pgm_ctx(pgm);
QoreJniClassMap.cpp:    // ensure that the parent thread is signaled on exit
QoreJniClassMap.cpp:    InitSignaler signaler;
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        qjcm.initBackground(pgm);
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        e.convert(xsink);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::init(QoreProgram* pgm, bool already_initialized) {
QoreJniClassMap.cpp:    assert(pgm);
QoreJniClassMap.cpp:    if (already_initialized) {
QoreJniClassMap.cpp:        qjcm.initBackground(pgm);
QoreJniClassMap.cpp:        return;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // grab init mutex
QoreJniClassMap.cpp:    std::unique_lock<std::mutex> init_lock(init_mutex);
QoreJniClassMap.cpp:    // issue #3199: perform initialization in the background
QoreJniClassMap.cpp:    ExceptionSink xsink;
QoreJniClassMap.cpp:    q_start_thread(&xsink, &staticInitBackground, pgm);
QoreJniClassMap.cpp:    // wait for initialization to complete
QoreJniClassMap.cpp:    init_cond.wait(init_lock);
QoreJniClassMap.cpp:    // if the background thread threw an exception, then rethrow it here
QoreJniClassMap.cpp:    if (xsink) {
QoreJniClassMap.cpp:        throw XsinkException(xsink);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::initBackground(QoreProgram* pgm) {
QoreJniClassMap.cpp:    // create java.lang namespace with automatic class loader handler
QoreJniClassMap.cpp:    QoreNamespace* javans = new QoreNamespace("Jni::java");
QoreJniClassMap.cpp:    QoreNamespace* langns = new QoreNamespace("Jni::java::lang");
QoreJniClassMap.cpp:    langns->setClassHandler(jni_class_handler);
QoreJniClassMap.cpp:    javans->addInitialNamespace(langns);
QoreJniClassMap.cpp:    // add "java" to "Jni" namespace
QoreJniClassMap.cpp:    default_jns->addInitialNamespace(javans);
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    // add "Object" class
QoreJniClassMap.cpp:    // find/create parent namespace in default / master Jni namespace first
QoreJniClassMap.cpp:    const char* sn;
QoreJniClassMap.cpp:    QoreNamespace* ns = jni_find_create_namespace(*default_jns, "java.lang.Object", sn);
QoreJniClassMap.cpp:    QC_OBJECT = new JniQoreClass(pgm, "Object", "Jni::java::lang::Object", "java.lang.Object");
QoreJniClassMap.cpp:    CID_OBJECT = QC_OBJECT->getID();
QoreJniClassMap.cpp:    createClassInNamespace(ns, *default_jns, "java/lang/Object",
QoreJniClassMap.cpp:        Functions::loadClass(env, "java/lang/Object"), QC_OBJECT, *this, pgm);
QoreJniClassMap.cpp:    QC_CLASS = findCreateQoreClass(env, "java.lang.Class", pgm);
QoreJniClassMap.cpp:    CID_CLASS = QC_CLASS->getID();
QoreJniClassMap.cpp:    QC_METHOD = findCreateQoreClass(env, "java.lang.reflect.Method", pgm);
QoreJniClassMap.cpp:    CID_METHOD = QC_METHOD->getID();
QoreJniClassMap.cpp:    QC_CLASSLOADER = findCreateQoreClass(env, "java.lang.ClassLoader", pgm);
QoreJniClassMap.cpp:    CID_CLASSLOADER = QC_CLASSLOADER->getID();
QoreJniClassMap.cpp:    QC_THROWABLE = findCreateQoreClass(env, "java.lang.Throwable", pgm);
QoreJniClassMap.cpp:    CID_THROWABLE = QC_THROWABLE->getID();
QoreJniClassMap.cpp:    QC_INVOCATIONHANDLER = findCreateQoreClass(env, "java.lang.reflect.InvocationHandler", pgm);
QoreJniClassMap.cpp:    CID_INVOCATIONHANDLER = QC_INVOCATIONHANDLER->getID();
QoreJniClassMap.cpp:    QC_ZONEDDATETIME = findCreateQoreClass(env, "java.time.ZonedDateTime", pgm);
QoreJniClassMap.cpp:    CID_ZONEDDATETIME = QC_ZONEDDATETIME->getID();
QoreJniClassMap.cpp:    // populate classes after initial hierarchy done
QoreJniClassMap.cpp:    init_done = true;
QoreJniClassMap.cpp:    // now populate all classes created up until now
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        // copy all classes to a vector
QoreJniClassMap.cpp:        std::vector<JniQoreClass*> cvec;
QoreJniClassMap.cpp:        cvec.reserve(jcmap.size());
QoreJniClassMap.cpp:        for (auto& i : jcmap) {
QoreJniClassMap.cpp:            cvec.push_back(i.second);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // populate all classes in the vector
QoreJniClassMap.cpp:        for (auto& i : cvec) {
QoreJniClassMap.cpp:            populateQoreClass(*i, static_cast<Class*>(i->getManagedUserData()), pgm);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // rescan all classes
QoreJniClassMap.cpp:    for (auto& i : jcmap) {
QoreJniClassMap.cpp:        i.second->rescanParents();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // add low-level API classes
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        QoreNamespace* org = new QoreNamespace("Jni::org");
QoreJniClassMap.cpp:        QoreNamespace* qore = new QoreNamespace("Jni::org::qore");
QoreJniClassMap.cpp:        QoreNamespace* jni = new QoreNamespace("Jni::org::qore::jni");
QoreJniClassMap.cpp:        jni->addSystemClass(initQoreInvocationHandlerClass(*jni));
QoreJniClassMap.cpp:        jni->addSystemClass(initJavaArrayClass(*jni));
QoreJniClassMap.cpp:        // add low-level API functions
QoreJniClassMap.cpp:        init_jni_functions(*jni);
QoreJniClassMap.cpp:        org->addInitialNamespace(qore);
QoreJniClassMap.cpp:        qore->addInitialNamespace(jni);
QoreJniClassMap.cpp:        default_jns->addInitialNamespace(org);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // initialize Qore base type -> java class map
QoreJniClassMap.cpp:    qt2jmap[NT_INT] = GlobalReference<jclass>((jclass)Globals::classPrimitiveLong);
QoreJniClassMap.cpp:    qt2jmap[NT_FLOAT] = GlobalReference<jclass>((jclass)Globals::classPrimitiveDouble);
QoreJniClassMap.cpp:    qt2jmap[NT_BOOLEAN] = GlobalReference<jclass>((jclass)Globals::classPrimitiveBoolean);
QoreJniClassMap.cpp:    qt2jmap[NT_STRING] = env.findClass("java/lang/String").makeGlobal();
QoreJniClassMap.cpp:    // NOTE: at runtime Qore values will be converted to either java.time.ZonedDateTime or org.qore.jni.QoreRelativeTime
QoreJniClassMap.cpp:    qt2jmap[NT_DATE] = env.findClass("java/lang/Object").makeGlobal();
QoreJniClassMap.cpp:    qt2jmap[NT_NUMBER] = env.findClass("java/math/BigDecimal").makeGlobal();
QoreJniClassMap.cpp:    qt2jmap[NT_BINARY] = GlobalReference<jclass>((jclass)Globals::arrayClassByte);
QoreJniClassMap.cpp:    qt2jmap[NT_HASH] = GlobalReference<jclass>((jclass)Globals::classHash);
QoreJniClassMap.cpp:    qt2jmap[NT_LIST] = env.findClass("[Ljava/lang/Object;").makeGlobal();
QoreJniClassMap.cpp:    qt2jmap[NT_NOTHING] = GlobalReference<jclass>((jclass)Globals::classPrimitiveVoid);
QoreJniClassMap.cpp:    // issu #4593: https://github.com/qorelanguage/qore/issues/4593
QoreJniClassMap.cpp:    qt2jmap[NT_RUNTIME_CLOSURE] = GlobalReference<jclass>((jclass)Globals::classQoreClosureMarkerImpl);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::destroy(ExceptionSink& xsink) {
QoreJniClassMap.cpp:    default_jns->clear(&xsink);
QoreJniClassMap.cpp:    delete default_jns;
QoreJniClassMap.cpp:    default_jns = nullptr;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:// takes an internal name (ex: java/lang/Class)
QoreJniClassMap.cpp:jclass QoreJniClassMap::findLoadClass(const QoreString& name, QoreProgram* pgm) {
QoreJniClassMap.cpp:   ModifiedUtf8String nameUtf8(name);
QoreJniClassMap.cpp:   return findLoadClass(nameUtf8.c_str(), pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:// takes an internal name (ex: java/lang/Class)
QoreJniClassMap.cpp:jclass QoreJniClassMap::findLoadClass(const char* jpath, QoreProgram* pgm) {
QoreJniClassMap.cpp:    JniQoreClass* qc;
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        AutoLocker al(m);
QoreJniClassMap.cpp:        jcmap_t::iterator i = jcmap.find(jpath);
QoreJniClassMap.cpp:        if (i != jcmap.end()) {
QoreJniClassMap.cpp:            qc = i->second;
QoreJniClassMap.cpp:            //printd(LogLevel, "findLoadClass() '%s': %p (cached)\n", jpath, qc);
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            JniExternalProgramData* jpc;
QoreJniClassMap.cpp:            if (!pgm) {
QoreJniClassMap.cpp:                jpc = jni_get_context();
QoreJniClassMap.cpp:            } else {
QoreJniClassMap.cpp:                jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            if (jpc) {
QoreJniClassMap.cpp:                assert(static_cast<QoreJniClassMapBase*>(jpc) != static_cast<QoreJniClassMapBase*>(this));
QoreJniClassMap.cpp:                qc = jpc->find(jpath);
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            //printd(5, "findLoadClass() '%s': qc: %p pgm: %p jpc: %p\n", jpath, qc, pgm, jpc);
QoreJniClassMap.cpp:            if (!qc) {
QoreJniClassMap.cpp:                Env env;
QoreJniClassMap.cpp:                bool base;
QoreJniClassMap.cpp:                SimpleRefHolder<Class> cls(loadClass(env, jpath, base, jpc));
QoreJniClassMap.cpp:                QoreString cpath(jpath);
QoreJniClassMap.cpp:                cpath.replaceAll("/", ".");
QoreJniClassMap.cpp:                //cpath.replaceAll("$", "__");
QoreJniClassMap.cpp:                qc = findCreateQoreClass(env, cpath, jpath, cls.release(), base, pgm);
QoreJniClassMap.cpp:                //printd(5, "findLoadClass() '%s': %p (created) pgm: %p\n", jpath, qc, pgm);
QoreJniClassMap.cpp:            } else {
QoreJniClassMap.cpp:                //printd(LogLevel, "findLoadClass() '%s': %p (cached 2)\n", jpath, qc);
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return static_cast<Class*>(qc->getManagedUserData())->toLocal();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:QoreValue QoreJniClassMap::getValue(LocalReference<jobject>& obj, QoreProgram* pgm, bool compat_types) {
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    // see if object is an array
QoreJniClassMap.cpp:    LocalReference<jclass> jc = env.getObjectClass(obj);
QoreJniClassMap.cpp:    if (env.callBooleanMethod(jc, Globals::methodClassIsArray, nullptr)) {
QoreJniClassMap.cpp:        ReferenceHolder<> return_value(nullptr);
QoreJniClassMap.cpp:        Array::getList(return_value, env, obj.cast<jarray>(), jc, pgm, compat_types);
QoreJniClassMap.cpp:        return return_value.release();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classInteger)) {
QoreJniClassMap.cpp:        return env.callIntMethod(obj, Globals::methodIntegerIntValue, nullptr);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classLong))
QoreJniClassMap.cpp:        return env.callLongMethod(obj, Globals::methodLongLongValue, nullptr);
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classShort))
QoreJniClassMap.cpp:        return env.callShortMethod(obj, Globals::methodShortShortValue, nullptr);
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classByte))
QoreJniClassMap.cpp:        return env.callByteMethod(obj, Globals::methodByteByteValue, nullptr);
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classBoolean)) {
QoreJniClassMap.cpp:        return (bool)env.callBooleanMethod(obj, Globals::methodBooleanBooleanValue, nullptr);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classDouble))
QoreJniClassMap.cpp:        return (double)env.callDoubleMethod(obj, Globals::methodDoubleDoubleValue, nullptr);
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classFloat))
QoreJniClassMap.cpp:        return (double)env.callFloatMethod(obj, Globals::methodFloatFloatValue, nullptr);
QoreJniClassMap.cpp:    if (env.isSameObject(jc, Globals::classCharacter))
QoreJniClassMap.cpp:        return (int64)env.callCharMethod(obj, Globals::methodCharacterCharValue, nullptr);
QoreJniClassMap.cpp:    assert(pgm);
QoreJniClassMap.cpp:    return new QoreObject(qjcm.findCreateQoreClass(env, jc, pgm), pgm, new QoreJniPrivateData(obj));
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static LocalReference<jstring> get_dot_name(Env& env, const char* name) {
QoreJniClassMap.cpp:    QoreString nname(name);
QoreJniClassMap.cpp:    nname.replaceAll("/", ".");
QoreJniClassMap.cpp:    //printd(LogLevel, "using '%s' -> '%s'\n", name, nname.c_str());
QoreJniClassMap.cpp:    return env.newString(nname.c_str());
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:Class* QoreJniClassMap::loadClass(Env& env, const char* name, bool& base, JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        base = true;
QoreJniClassMap.cpp:        // first we try to load with the builtin classloader
QoreJniClassMap.cpp:        return Functions::loadClass(env, name);
QoreJniClassMap.cpp:    } catch (jni::JavaException& e) {
QoreJniClassMap.cpp:        // NOTE: JavaException::toString() ignores the exception
QoreJniClassMap.cpp:        //SimpleRefHolder<QoreStringNode> desc(e.toString());
QoreJniClassMap.cpp:        //printd(5, "loadClass() %s failed: %s\n", name, desc->c_str());
QoreJniClassMap.cpp:        e.ignore();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    base = false;
QoreJniClassMap.cpp:    if (!jpc) {
QoreJniClassMap.cpp:        jpc = jni_get_context();
QoreJniClassMap.cpp:        if (!jpc) {
QoreJniClassMap.cpp:            printd(5, "failed to load class '%s' with default classloader; no program-specific classloader present",
QoreJniClassMap.cpp:                name);
QoreJniClassMap.cpp:            throw QoreJniException("JNI-IMPORT-ERROR", "failed to load class '%s' with default classloader; no " \
QoreJniClassMap.cpp:                "program-specific classloader present", name);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return loadProgramClass(env, name, jpc);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:Class* QoreJniClassMap::loadProgramClass(Env& env, const char* name, JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    LocalReference<jstring> jname = get_dot_name(env, name).release();
QoreJniClassMap.cpp:    jvalue jarg;
QoreJniClassMap.cpp:    jarg.l = jname;
QoreJniClassMap.cpp:    //printd(5, "QoreJniClassMap::loadProgramClass() '%s' jpc: %p\n", name, jpc);
QoreJniClassMap.cpp:    LocalReference<jclass> c = env.callObjectMethod(jpc->getClassLoader(),
QoreJniClassMap.cpp:        Globals::methodQoreURLClassLoaderLoadClass, &jarg).as<jclass>();
QoreJniClassMap.cpp:    return new Class(c.release());
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniQoreClass* QoreJniClassMap::findCreateQoreClass(Env& env, LocalReference<jclass>& jc, QoreProgram* pgm) {
QoreJniClassMap.cpp:    LocalReference<jstring> clsName = env.callObjectMethod(jc, Globals::methodClassGetName, nullptr).as<jstring>();
QoreJniClassMap.cpp:    Env::GetStringUtfChars tname(env, clsName);
QoreJniClassMap.cpp:    printd(5, "QoreJniClassMap::findCreateQoreClass() looking up: '%s' pgm: %p\n", tname.c_str(), pgm);
QoreJniClassMap.cpp:    QoreString cname(tname.c_str());
QoreJniClassMap.cpp:    //cname.replaceAll("$", "__");
QoreJniClassMap.cpp:    QoreString jpath(tname.c_str());
QoreJniClassMap.cpp:    jpath.replaceAll(".", "/");
QoreJniClassMap.cpp:    // see if class is a builtin class or loaded by our custom classloader
QoreJniClassMap.cpp:    LocalReference<jobject> cl = env.callObjectMethod(jc, Globals::methodClassGetClassLoader, nullptr);
QoreJniClassMap.cpp:    bool base = (!baseClassLoader && !cl) || (cl && baseClassLoader && env.isSameObject(baseClassLoader, cl));
QoreJniClassMap.cpp:    printd(5, "QoreJniClassMap::findCreateQoreClass() '%s' base: %d\n", jpath.c_str(), base);
QoreJniClassMap.cpp:    return findCreateQoreClass(env, cname, jpath.c_str(), new Class(jc), base, pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniQoreClass* QoreJniClassMap::findCreateQoreClassInProgram(QoreString& name, const char* jpath, Class* c, QoreProgram* pgm) {
QoreJniClassMap.cpp:    SimpleRefHolder<Class> cls(c);
QoreJniClassMap.cpp:    // we always grab the global JNI lock first because we might need to add base classes
QoreJniClassMap.cpp:    // while setting up the class loaded with the jni module's classloader, and we need to
QoreJniClassMap.cpp:    // ensure that these locks are always acquired in order
QoreJniClassMap.cpp:    AutoLocker al(m);
QoreJniClassMap.cpp:    ExceptionSink xsink;
QoreJniClassMap.cpp:    // check current Program's namespace
QoreJniClassMap.cpp:    JniExternalProgramData* jpc;
QoreJniClassMap.cpp:    if (!pgm) {
QoreJniClassMap.cpp:        jpc = jni_get_context(pgm);
QoreJniClassMap.cpp:        if (!jpc) {
QoreJniClassMap.cpp:            throw BasicException("no Java context to create Qore class");
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    } else {
QoreJniClassMap.cpp:        jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:        // ensure that the jni module symbols are loaded into the new Program object
QoreJniClassMap.cpp:        MM.runTimeLoadModule("jni", pgm, &xsink);
QoreJniClassMap.cpp:        if (xsink) {
QoreJniClassMap.cpp:            throw XsinkException(xsink);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:        assert(jpc);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    JniQoreClass* qc = jpc->find(jpath);
QoreJniClassMap.cpp:    if (qc) {
QoreJniClassMap.cpp:        return qc;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    assert(pgm);
QoreJniClassMap.cpp:    QoreExternalProgramContextHelper epch(&xsink, pgm);
QoreJniClassMap.cpp:    if (xsink) {
QoreJniClassMap.cpp:        throw XsinkException(xsink);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // grab current Program's parse lock before manipulating namespaces
QoreJniClassMap.cpp:    CurrentProgramRuntimeExternalParseContextHelper pch;
QoreJniClassMap.cpp:    if (!pch) {
QoreJniClassMap.cpp:        throw BasicException("could not attach to deleted Qore Program when creating class in Qore program");
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // see if we have an inner class
QoreJniClassMap.cpp:    int ic_idx = name.rfind('$');
QoreJniClassMap.cpp:    if (ic_idx != -1) {
QoreJniClassMap.cpp:        name.replaceChar(ic_idx, '_');
QoreJniClassMap.cpp:        name.insertch('_', ic_idx + 1, 1);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // find/create parent namespace in default / master Jni namespace first
QoreJniClassMap.cpp:    const char* sn;
QoreJniClassMap.cpp:    QoreNamespace* ns = jni_find_create_namespace(*jpc->getJniNamespace(), name.c_str(), sn);
QoreJniClassMap.cpp:    // we need to see if a builtin native Java class has already been imported without a lookup entry
QoreJniClassMap.cpp:    // or there is not already a Qore class in the namespace with the same name
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        // get last '.'
QoreJniClassMap.cpp:        int dot = name.rfind('.');
QoreJniClassMap.cpp:        // check for name conflict
QoreJniClassMap.cpp:        while ((qc = static_cast<JniQoreClass*>(ns->findLocalClass(sn)))) {
QoreJniClassMap.cpp:            // make sure the class is not already a representation of the new class
QoreJniClassMap.cpp:            if (qc->getJavaName() == name.c_str()) {
QoreJniClassMap.cpp:                return qc;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            // add an underscore
QoreJniClassMap.cpp:            name.insertch('_', ic_idx + 2, 1);
QoreJniClassMap.cpp:            sn = name.c_str() + (dot != -1 ? dot + 1 : 0);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    assert(!ns->findLocalClass(sn));
QoreJniClassMap.cpp:    // assert that we are not creating a Qore class for an imported class
QoreJniClassMap.cpp:    assert(name.find("qore.Qore"));
QoreJniClassMap.cpp:    QoreString path(name);
QoreJniClassMap.cpp:    path.replaceAll(".", "::");
QoreJniClassMap.cpp:    path.insert("::Jni::", 0);
QoreJniClassMap.cpp:    qc = new JniQoreClass(pgm, sn, path.c_str(), name.c_str());
QoreJniClassMap.cpp:    assert(qc->isSystem());
QoreJniClassMap.cpp:    createClassInNamespace(ns, *jpc->getJniNamespace(), jpath, cls.release(), qc, *jpc, pgm);
QoreJniClassMap.cpp:    return qc;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniQoreClass* QoreJniClassMap::findCreateQoreClass(Env& env, const char* name, QoreProgram* pgm,
QoreJniClassMap.cpp:        JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    QoreString jpath(name);
QoreJniClassMap.cpp:    jpath.replaceAll(".", "/");
QoreJniClassMap.cpp:    jpath.replaceAll("__", "$");
QoreJniClassMap.cpp:    // first try to find class
QoreJniClassMap.cpp:    JniQoreClass* rv = findInternal(jpath.c_str());
QoreJniClassMap.cpp:    if (rv) {
QoreJniClassMap.cpp:        //printd(LogLevel, "QoreJniClassMap::findCreateQoreClass() '%s': %p\n", name, rv);
QoreJniClassMap.cpp:        return rv;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    //printd(LogLevel, "QoreJniClassMap::findCreateQoreClass() '%s' not cached\n", name);
QoreJniClassMap.cpp:    if (!jpc) {
QoreJniClassMap.cpp:        jpc = pgm
QoreJniClassMap.cpp:            ? static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"))
QoreJniClassMap.cpp:            : jni_get_context(pgm);
QoreJniClassMap.cpp:        if (!jpc) {
QoreJniClassMap.cpp:            return nullptr;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // first try to load the class if possible
QoreJniClassMap.cpp:    bool base;
QoreJniClassMap.cpp:    SimpleRefHolder<Class> cls(loadClass(env, jpath.c_str(), base, jpc));
QoreJniClassMap.cpp:    QoreString cname(name);
QoreJniClassMap.cpp:    // create the class in the correct namespace
QoreJniClassMap.cpp:    return findCreateQoreClass(env, cname, jpath.c_str(), cls.release(), base, pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniQoreClass* QoreJniClassMap::findCreateQoreClassInBase(Env& env, QoreString& name, const char* jpath, Class* c,
QoreJniClassMap.cpp:        QoreProgram* pgm) {
QoreJniClassMap.cpp:    SimpleRefHolder<Class> cls(c);
QoreJniClassMap.cpp:    printd(LogLevel, "QoreJniClassMap::findCreateQoreClassInBase() looking up: '%s'\n", jpath);
QoreJniClassMap.cpp:    // we need to protect access to the default namespace and class map with a lock
QoreJniClassMap.cpp:    AutoLocker al(m);
QoreJniClassMap.cpp:    // if we have the QoreClass already, then return it
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        JniQoreClass* qc = find(jpath);
QoreJniClassMap.cpp:        if (qc)
QoreJniClassMap.cpp:            return qc;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // workaround for the headless awt toolkit; we cannot initialize sun.awt.dnd.SunDropTargetEvent, because
QoreJniClassMap.cpp:    // the DataTransferer for the headless awt toolkit is null, and this will cause an initializer exception
QoreJniClassMap.cpp:    // in this class when initializing the static member "ToolkitThreadBlockedHandler handler"
QoreJniClassMap.cpp:    if (name == "sun.awt.dnd.SunDropTargetEvent") {
QoreJniClassMap.cpp:        Env env;
QoreJniClassMap.cpp:        if (env.callBooleanMethod(Globals::classGraphicsEnvironment, Globals::methodGraphicsEnvironmentIsHeadless,
QoreJniClassMap.cpp:            nullptr)) {
QoreJniClassMap.cpp:            printd(5, "retuning Object for '%s' when running in a headless environment\n", name.c_str());
QoreJniClassMap.cpp:            return QC_OBJECT;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:#ifdef __APPLE__
QoreJniClassMap.cpp:    // initializing java.awt.* classes can lead to a deadlock on macOS
QoreJniClassMap.cpp:    if (name.startsWith("java.awt")) {
QoreJniClassMap.cpp:        printd(5, "retuning Object for '%s' when running on Darwin\n", name.c_str());
QoreJniClassMap.cpp:        return QC_OBJECT;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:    // see if we have an inner class
QoreJniClassMap.cpp:    int ic_idx = name.rfind('$');
QoreJniClassMap.cpp:    if (ic_idx != -1) {
QoreJniClassMap.cpp:        name.replaceChar(ic_idx, '_');
QoreJniClassMap.cpp:        name.insertch('_', ic_idx + 1, 1);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // find/create parent namespace in default / master Jni namespace first
QoreJniClassMap.cpp:    const char* sn;
QoreJniClassMap.cpp:    QoreNamespace* ns = jni_find_create_namespace(*default_jns, name.c_str(), sn);
QoreJniClassMap.cpp:    if (ic_idx != -1) {
QoreJniClassMap.cpp:        // get last '.'
QoreJniClassMap.cpp:        int dot = name.rfind('.');
QoreJniClassMap.cpp:        // check for name conflict
QoreJniClassMap.cpp:        while (ns->findLocalClass(sn)) {
QoreJniClassMap.cpp:            // add an underscore
QoreJniClassMap.cpp:            name.insertch('_', ic_idx + 2, 1);
QoreJniClassMap.cpp:            sn = name.c_str() + (dot != -1 ? dot + 1 : 0);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    assert(pgm);
QoreJniClassMap.cpp:    assert(name.find("qore.Qore") == -1);
QoreJniClassMap.cpp:    QoreString path(name);
QoreJniClassMap.cpp:    path.replaceAll(".", "::");
QoreJniClassMap.cpp:    path.insert("::Jni::", 0);
QoreJniClassMap.cpp:    JniQoreClass* qc = new JniQoreClass(pgm, sn, path.c_str(), name.c_str());
QoreJniClassMap.cpp:    assert(qc->isSystem());
QoreJniClassMap.cpp:    // createClassInNamespace() will "save" qc in the namespace
QoreJniClassMap.cpp:    createClassInNamespace(ns, *default_jns, jpath, cls.release(), qc, *this, pgm);
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:    // now add to the current Program's namespace
QoreJniClassMap.cpp:    if (jpc) {
QoreJniClassMap.cpp:        assert(pgm);
QoreJniClassMap.cpp:        ExceptionSink xsink;
QoreJniClassMap.cpp:        QoreExternalProgramContextHelper epch(&xsink, pgm);
QoreJniClassMap.cpp:        if (xsink) {
QoreJniClassMap.cpp:            throw XsinkException(xsink);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // grab current Program's parse lock before manipulating namespaces
QoreJniClassMap.cpp:        CurrentProgramRuntimeExternalParseContextHelper pch;
QoreJniClassMap.cpp:        if (!pch) {
QoreJniClassMap.cpp:            throw BasicException("could not attach to deleted Qore Program when creating Qore class in base");
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        {
QoreJniClassMap.cpp:            JniQoreClass* qc0 = jpc->find(jpath);
QoreJniClassMap.cpp:            if (qc0) {
QoreJniClassMap.cpp:                return qc0;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        ns = jni_find_create_namespace(*jpc->getJniNamespace(), name.c_str(), sn);
QoreJniClassMap.cpp:        // copy class for assignment
QoreJniClassMap.cpp:        std::unique_ptr<JniQoreClass> new_qc(new JniQoreClass(*qc));
QoreJniClassMap.cpp:        assert(new_qc->isSystem());
QoreJniClassMap.cpp:        printd(LogLevel, "QoreJniClassMap::findCreateQoreClassInBase() jpc: %p '%s' qc: %p ns: %p '%s::%s'\n", jpc,
QoreJniClassMap.cpp:            jpath, new_qc.get(), ns, ns->getName(), qc->getName());
QoreJniClassMap.cpp:        assert(new_qc->getManagedUserData());
QoreJniClassMap.cpp:        // create entry for class in map
QoreJniClassMap.cpp:        jpc->add(jpath, new_qc.get());
QoreJniClassMap.cpp:        // save class in namespace
QoreJniClassMap.cpp:        qc = new_qc.release();
QoreJniClassMap.cpp:        ns->addSystemClass(qc);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return qc;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:// ACC opcodes
QoreJniClassMap.cpp:constexpr int ACC_PUBLIC = 0x0001; // class, field, method
QoreJniClassMap.cpp:constexpr int ACC_PRIVATE = 0x0002; // class, field, method
QoreJniClassMap.cpp:constexpr int ACC_PROTECTED = 0x0004; // class, field, method
QoreJniClassMap.cpp:constexpr int ACC_STATIC = 0x0008; // field, method
QoreJniClassMap.cpp:constexpr int ACC_FINAL = 0x0010; // class, field, method, parameter
QoreJniClassMap.cpp:constexpr int ACC_SUPER = 0x0020; // class
QoreJniClassMap.cpp:constexpr int ACC_SYNCHRONIZED = 0x0020; // method
QoreJniClassMap.cpp:constexpr int ACC_VOLATILE = 0x0040; // field
QoreJniClassMap.cpp:constexpr int ACC_BRIDGE = 0x0040; // method
QoreJniClassMap.cpp:constexpr int ACC_VARARGS = 0x0080; // method
QoreJniClassMap.cpp:constexpr int ACC_TRANSIENT = 0x0080; // field
QoreJniClassMap.cpp:constexpr int ACC_NATIVE = 0x0100; // method
QoreJniClassMap.cpp:constexpr int ACC_INTERFACE = 0x0200; // class
QoreJniClassMap.cpp:constexpr int ACC_ABSTRACT = 0x0400; // class, method
QoreJniClassMap.cpp:constexpr int ACC_STRICT = 0x0800; // method
QoreJniClassMap.cpp:constexpr int ACC_SYNTHETIC = 0x1000; // class, field, method, parameter
QoreJniClassMap.cpp:constexpr int ACC_ANNOTATION = 0x2000; // class
QoreJniClassMap.cpp:constexpr int ACC_ENUM = 0x4000; // class(?) field inner
QoreJniClassMap.cpp:constexpr int ACC_MANDATED = 0x8000; // parameter
QoreJniClassMap.cpp:JniQoreClass* QoreJniClassMap::createClassInNamespace(QoreNamespace* ns, QoreNamespace& jns, const char* jpath,
QoreJniClassMap.cpp:        Class* jc, JniQoreClass* qc, QoreJniClassMapBase& map, QoreProgram* pgm) {
QoreJniClassMap.cpp:    QoreClassHolder qc_holder(qc);
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = pgm
QoreJniClassMap.cpp:        ? static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"))
QoreJniClassMap.cpp:        : jni_get_context(pgm);
QoreJniClassMap.cpp:    assert(jpc);
QoreJniClassMap.cpp:    // save pointer to java class info in JniQoreClass
QoreJniClassMap.cpp:    qc->setManagedUserData(jc);
QoreJniClassMap.cpp:    int mods = jc->getModifiers();
QoreJniClassMap.cpp:    if (mods & JVM_ACC_FINAL) {
QoreJniClassMap.cpp:        qc->setFinal();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    printd(LogLevel, "QoreJniClassMap::createClassInNamespace() qc: %p ns: %p '%s::%s'\n", qc, ns, ns->getName(),
QoreJniClassMap.cpp:        qc->getName());
QoreJniClassMap.cpp:    assert(qc->getManagedUserData());
QoreJniClassMap.cpp:    // add to class maps
QoreJniClassMap.cpp:    map.add(jpath, static_cast<JniQoreClass*>(qc_holder.release()));
QoreJniClassMap.cpp:    addSuperClasses(qc, jc, jpath, pgm, jpc);
QoreJniClassMap.cpp:    // add methods after parents
QoreJniClassMap.cpp:    if (init_done) {
QoreJniClassMap.cpp:        populateQoreClass(*qc, jc, pgm);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // save class in namespace
QoreJniClassMap.cpp:    ns->addSystemClass(qc);
QoreJniClassMap.cpp:    jpc->saveClass(*qc, jc->getJavaObjectRef());
QoreJniClassMap.cpp:    printd(LogLevel, "QoreJniClassMap::createClassInNamespace() '%s' returning qc: %p ns: %p -> '%s::%s'\n", jpath,
QoreJniClassMap.cpp:        qc, ns, ns->getName(), qc->getName());
QoreJniClassMap.cpp:    return qc;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::addSuperClasses(JniQoreClass* qc, Class* jc, const char* jpath, QoreProgram* pgm,
QoreJniClassMap.cpp:        JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    Class* parent = jc->getSuperClass();
QoreJniClassMap.cpp:    printd(LogLevel, "QoreJniClassMap::addSuperClasses() '%s' parent: %p\n", jpath, parent);
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    // add superclass
QoreJniClassMap.cpp:    if (parent) {
QoreJniClassMap.cpp:        addSuperClass(env, *qc, parent, false, pgm, jpc);
QoreJniClassMap.cpp:    } else if (qc == QC_OBJECT) {
QoreJniClassMap.cpp:        // set base class loader: the return value for Class.getClassLoader() with classes loaded by the bootstrap
QoreJniClassMap.cpp:        // class loader is implementation-dependent; it's possible that this will be nullptr
QoreJniClassMap.cpp:        LocalReference<jobject> cl = env.callObjectMethod(jc->getJavaObject(), Globals::methodClassGetClassLoader,
QoreJniClassMap.cpp:            nullptr);
QoreJniClassMap.cpp:        if (cl) {
QoreJniClassMap.cpp:            baseClassLoader = cl.makeGlobal();
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    } else { // make interface classes at least inherit Object
QoreJniClassMap.cpp:        qc->addBuiltinVirtualBaseClass(QC_OBJECT);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // get and process interfaces
QoreJniClassMap.cpp:    LocalReference<jobjectArray> interfaceArray = jc->getInterfaces();
QoreJniClassMap.cpp:    for (jsize i = 0, e = env.getArrayLength(interfaceArray); i < e; ++i) {
QoreJniClassMap.cpp:        addSuperClass(env, *qc, new Class(env.getObjectArrayElement(interfaceArray, i).as<jclass>()), true, pgm, jpc);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::addSuperClass(Env& env, JniQoreClass& qc, jni::Class* parent, bool interface, QoreProgram* pgm,
QoreJniClassMap.cpp:        JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    //printd(LogLevel, "QoreJniClassMap::addSuperClass() %s parent: %p if: %d pgm: %p jpc: %p qcb: %p jo: %p\n",
QoreJniClassMap.cpp:    //  qc.getPath(), parent, interface, pgm, jpc, (jclass)Globals::classQoreJavaClassBase, parent->getJavaObject());
QoreJniClassMap.cpp:    // see if the parent class wraps a Qore class
QoreJniClassMap.cpp:    if (!interface && !env.isSameObject(Globals::classQoreJavaClassBase, parent->getJavaObject())) {
QoreJniClassMap.cpp:        jvalue jarg;
QoreJniClassMap.cpp:        jarg.l = parent->getJavaObject();
QoreJniClassMap.cpp:        if (env.callBooleanMethod(Globals::classQoreJavaClassBase, Globals::methodClassIsAssignableFrom, &jarg)) {
QoreJniClassMap.cpp:            // get class field
QoreJniClassMap.cpp:            bool throw_exception = false;
QoreJniClassMap.cpp:            QoreClass* qore_parent = JniExternalProgramData::tryGetQoreClass(env, parent->getJavaObject(), true);
QoreJniClassMap.cpp:            if (qore_parent) {
QoreJniClassMap.cpp:                printd(5, "QoreJniClassMap::addSuperClass() Java class '%s' (%d) has Qore parent '%s' (%d)\n",
QoreJniClassMap.cpp:                    qc.getName(), qc.getID(), qore_parent->getName(), qore_parent->getID());
QoreJniClassMap.cpp:                if (qore_parent->isFinal()) {
QoreJniClassMap.cpp:                    throw_exception = true;
QoreJniClassMap.cpp:                } else {
QoreJniClassMap.cpp:                    qc.addBaseClass(qore_parent, true);
QoreJniClassMap.cpp:                    qc.addBuiltinVirtualBaseClass(QC_OBJECT);
QoreJniClassMap.cpp:                    return;
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            if (throw_exception) {
QoreJniClassMap.cpp:                throw QoreJniException("FINAL-ERROR", "Java class '%s' cannot inherit final Qore class '%s'",
QoreJniClassMap.cpp:                    qc.getName(), qore_parent->getName());
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        //assert(!env.callBooleanMethod(Globals::classQoreObjectBase, Globals::methodClassIsAssignableFrom, &jarg));
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    LocalReference<jstring> clsName = env.callObjectMethod(parent->getJavaObject(), Globals::methodClassGetName,
QoreJniClassMap.cpp:        nullptr).as<jstring>();
QoreJniClassMap.cpp:    Env::GetStringUtfChars chars(env, clsName);
QoreJniClassMap.cpp:    printd(5, "QoreJniClassMap::addSuperClass() qc: '%s' parent: '%s'\n", qc.getName(), chars.c_str());
QoreJniClassMap.cpp:    QoreString jpath(chars.c_str());
QoreJniClassMap.cpp:    jpath.replaceAll(".", "/");
QoreJniClassMap.cpp:    JniQoreClass* pc = find(jpath.c_str());
QoreJniClassMap.cpp:    if (pc) {
QoreJniClassMap.cpp:        parent->deref();
QoreJniClassMap.cpp:    } else {
QoreJniClassMap.cpp:        // make sure we are not trying to create a Qore class for a dynamic class that already exists in Qore
QoreJniClassMap.cpp:        assert(!jpath.startsWith("qore"));
QoreJniClassMap.cpp:        assert(!jpath.startsWith("python"));
QoreJniClassMap.cpp:        bool base;
QoreJniClassMap.cpp:        SimpleRefHolder<Class> cls(loadClass(env, jpath.c_str(), base, jpc));
QoreJniClassMap.cpp:        QoreString cstr(chars.c_str());
QoreJniClassMap.cpp:        pc = findCreateQoreClass(env, cstr, jpath.c_str(), cls.release(), base, pgm);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // only add if no other parent class already inherits the interface
QoreJniClassMap.cpp:    if (interface) {
QoreJniClassMap.cpp:        bool priv;
QoreJniClassMap.cpp:        if (qc.getClass(*pc, priv))
QoreJniClassMap.cpp:            return;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    qc.addBuiltinVirtualBaseClass(pc);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::populateQoreClass(JniQoreClass& qc, jni::Class* jc, QoreProgram* pgm) {
QoreJniClassMap.cpp:    // do constructors
QoreJniClassMap.cpp:    doConstructors(qc, jc, pgm);
QoreJniClassMap.cpp:    // do methods
QoreJniClassMap.cpp:    doMethods(qc, jc, pgm);
QoreJniClassMap.cpp:    // do fields
QoreJniClassMap.cpp:    doFields(qc, jc, pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::doConstructors(JniQoreClass& qc, jni::Class* jc, QoreProgram* pgm) {
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    // get constructor methods
QoreJniClassMap.cpp:    LocalReference<jobjectArray> conArray = jc->getDeclaredConstructors();
QoreJniClassMap.cpp:    for (jsize i = 0, e = env.getArrayLength(conArray); i < e; ++i) {
QoreJniClassMap.cpp:        // get Constructor object
QoreJniClassMap.cpp:        LocalReference<jobject> c = env.getObjectArrayElement(conArray, i);
QoreJniClassMap.cpp:        SimpleRefHolder<BaseMethod> meth(new BaseMethod(env, c, jc));
QoreJniClassMap.cpp:#ifdef DEBUG
QoreJniClassMap.cpp:        LocalReference<jstring> conStr = env.callObjectMethod(c,
QoreJniClassMap.cpp:            Globals::methodConstructorToString, nullptr).as<jstring>();
QoreJniClassMap.cpp:        Env::GetStringUtfChars chars(env, conStr);
QoreJniClassMap.cpp:        QoreString mstr(chars.c_str());
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:        // get method's parameter types
QoreJniClassMap.cpp:        type_vec_t paramTypeInfo;
QoreJniClassMap.cpp:        type_vec_t altParamTypeInfo;
QoreJniClassMap.cpp:        if (meth->getParamTypes(env, paramTypeInfo, altParamTypeInfo, *this, pgm)) {
QoreJniClassMap.cpp:            printd(LogLevel, "+ skipping %s.constructor() (%s); unsupported parameter type for variant %d\n",
QoreJniClassMap.cpp:                qc.getName(), mstr.c_str(), i + 1);
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // check for duplicate signature
QoreJniClassMap.cpp:        const QoreMethod* qm = qc.getConstructor();
QoreJniClassMap.cpp:        if (qm && qm->existsVariant(paramTypeInfo)) {
QoreJniClassMap.cpp:            printd(LogLevel, "QoreJniClassMap::doConstructors() skipping already-created variant %s::constructor()\n",
QoreJniClassMap.cpp:                qc.getName());
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        qc.addConstructor((void*)*meth, (q_external_constructor_t)exec_java_constructor, meth->getAccess(),
QoreJniClassMap.cpp:            meth->getFlags(), QDOM_UNCONTROLLED_API, paramTypeInfo);
QoreJniClassMap.cpp:        // add native alternatives for hash and list arg types, if any
QoreJniClassMap.cpp:        if (!altParamTypeInfo.empty()) {
QoreJniClassMap.cpp:            if (qm && qm->existsVariant(altParamTypeInfo)) {
QoreJniClassMap.cpp:                printd(LogLevel, "QoreJniClassMap::doConstructors() skipping already-created variant " \
QoreJniClassMap.cpp:                    "%s::constructor()\n", qc.getName());
QoreJniClassMap.cpp:                continue;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            qc.addConstructor((void*)*meth, (q_external_constructor_t)exec_java_constructor, meth->getAccess(),
QoreJniClassMap.cpp:                meth->getFlags(), QDOM_UNCONTROLLED_API, altParamTypeInfo);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        jc->trackMethod(meth.release());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:const QoreTypeInfo* QoreJniClassMap::getQoreType(jclass cls, const QoreTypeInfo*& altType, QoreProgram* pgm, bool literal) {
QoreJniClassMap.cpp:    assert(!altType);
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    // get class name
QoreJniClassMap.cpp:    LocalReference<jstring> clsName = env.callObjectMethod(cls, Globals::methodClassGetName, nullptr).as<jstring>();
QoreJniClassMap.cpp:    Env::GetStringUtfChars tname(env, clsName);
QoreJniClassMap.cpp:    // check for byte[]
QoreJniClassMap.cpp:    if (!strcmp(tname.c_str(), "[B")) {
QoreJniClassMap.cpp:        return binaryTypeInfo;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:     // do primitive types
QoreJniClassMap.cpp:    if (env.callBooleanMethod(cls, Globals::methodClassIsPrimitive, nullptr)) {
QoreJniClassMap.cpp:        jpmap_t::const_iterator i = jpmap.find(tname.c_str());
QoreJniClassMap.cpp:        assert(i != jpmap.end());
QoreJniClassMap.cpp:        return i->second.typeInfo;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // process array types
QoreJniClassMap.cpp:    if (env.callBooleanMethod(cls, Globals::methodClassIsArray, nullptr)) {
QoreJniClassMap.cpp:        // get vararg arg type
QoreJniClassMap.cpp:        LocalReference<jclass> elem_cls = env.callObjectMethod(cls, Globals::methodClassGetComponentType,
QoreJniClassMap.cpp:            nullptr).as<jclass>();
QoreJniClassMap.cpp:        if (!elem_cls) {
QoreJniClassMap.cpp:            return softAutoListTypeInfo;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        const QoreTypeInfo* elemAltType = nullptr;
QoreJniClassMap.cpp:        const QoreTypeInfo* elem_type = getQoreType(elem_cls, elemAltType, pgm, literal);
QoreJniClassMap.cpp:        if (elem_type == objectTypeInfo) {
QoreJniClassMap.cpp:            return softAutoListTypeInfo;
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            printd(5, "QoreJniClassMap::getQoreType() array type: '%s'\n", qore_type_get_name(elem_type));
QoreJniClassMap.cpp:            return qore_get_complex_softlist_type(elem_type);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // check for class imported from Qore
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:    if (jpc) {
QoreJniClassMap.cpp:        jvalue jarg;
QoreJniClassMap.cpp:        jarg.l = cls;
QoreJniClassMap.cpp:        if (env.callBooleanMethod(Globals::classQoreJavaClassBase, Globals::methodClassIsAssignableFrom, &jarg)) {
QoreJniClassMap.cpp:            jfieldID class_field = env.getStaticField(cls, JAVA_QORE_CLASS_FIELD, "J");
QoreJniClassMap.cpp:            const QoreClass* qc = reinterpret_cast<const QoreClass*>(
QoreJniClassMap.cpp:                env.getStaticLongField(cls, class_field)
QoreJniClassMap.cpp:            );
QoreJniClassMap.cpp:            assert(qc);
QoreJniClassMap.cpp:            return literal ? qc->getTypeInfo() : qc->getOrNothingTypeInfo();
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    QoreString cname(tname.c_str());
QoreJniClassMap.cpp:    QoreString jname(tname.c_str());
QoreJniClassMap.cpp:    jname.replaceAll(".", "/");
QoreJniClassMap.cpp:    printd(LogLevel, "QoreJniClassMap::getQoreType() class: '%s' jname: '%s'\n", cname.c_str(), jname.c_str());
QoreJniClassMap.cpp:    // find or create a class for the type
QoreJniClassMap.cpp:    JniQoreClass* qc = find(jname.c_str());
QoreJniClassMap.cpp:    if (!qc) {
QoreJniClassMap.cpp:        // try to find mapping in Program-specific class map
QoreJniClassMap.cpp:        if (jpc) {
QoreJniClassMap.cpp:            assert(static_cast<QoreJniClassMapBase*>(jpc) != static_cast<QoreJniClassMapBase*>(this));
QoreJniClassMap.cpp:            qc = jpc->find(jname.c_str());
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (!qc) {
QoreJniClassMap.cpp:            printd(LogLevel, "QoreJniClassMap::getQoreType() creating cname: '%s' jname: '%s'\n", cname.c_str(),
QoreJniClassMap.cpp:                jname.c_str());
QoreJniClassMap.cpp:            bool base;
QoreJniClassMap.cpp:            SimpleRefHolder<Class> cls(loadClass(env, jname.c_str(), base, jpc));
QoreJniClassMap.cpp:            qc = findCreateQoreClass(env, cname, jname.c_str(), cls.release(), base, pgm);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // find static mapping
QoreJniClassMap.cpp:    jtmap_t::const_iterator i = jtmap.find(tname.c_str());
QoreJniClassMap.cpp:    if (i != jtmap.end()) {
QoreJniClassMap.cpp:        altType = literal ? qc->getTypeInfo() : qc->getOrNothingTypeInfo();
QoreJniClassMap.cpp:        const QoreTypeInfo* rv = i->second;
QoreJniClassMap.cpp:        if (literal && qore_type_is_assignable_from(rv, nothingTypeInfo)) {
QoreJniClassMap.cpp:            // get type string
QoreJniClassMap.cpp:            QoreString typestr(qore_type_get_name(rv));
QoreJniClassMap.cpp:            if (typestr[0] != '*') {
QoreJniClassMap.cpp:                return rv;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            ExceptionSink xsink;
QoreJniClassMap.cpp:            typestr.splice(0, 1, &xsink);
QoreJniClassMap.cpp:            if (xsink) {
QoreJniClassMap.cpp:                xsink.clear();
QoreJniClassMap.cpp:                return rv;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            const QoreTypeInfo* new_type = qore_get_type_from_string(typestr.c_str(), xsink);
QoreJniClassMap.cpp:            if (xsink) {
QoreJniClassMap.cpp:                xsink.clear();
QoreJniClassMap.cpp:                return rv;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            return new_type;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        return rv;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // try all parents to see if a static mapping matches
QoreJniClassMap.cpp:    QoreParentClassIterator hierarchy_iterator(*qc);
QoreJniClassMap.cpp:    while (hierarchy_iterator.next()) {
QoreJniClassMap.cpp:        const QoreClass& pqc = hierarchy_iterator.getParentClass();
QoreJniClassMap.cpp:        const JniQoreClass* jpqc = dynamic_cast<const JniQoreClass*>(&pqc);
QoreJniClassMap.cpp:        if (!jpqc) {
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        const std::string jcname = jpqc->getJavaName();
QoreJniClassMap.cpp:        // do not return a generic type for the base object class
QoreJniClassMap.cpp:        if (jcname == "java.lang.Object") {
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        i = jtmap.find(jcname.c_str());
QoreJniClassMap.cpp:        if (i != jtmap.end()) {
QoreJniClassMap.cpp:            // add to jtmap
QoreJniClassMap.cpp:            jtmap.insert(jtmap_t::value_type(tname.c_str(), i->second));
QoreJniClassMap.cpp:            //printd(LogLevel, "returning %s (%s) -> %s\n", tname.c_str(), jcname.c_str(),
QoreJniClassMap.cpp:            //  typeInfoGetName(i->second));
QoreJniClassMap.cpp:            altType = literal ? qc->getTypeInfo() : qc->getOrNothingTypeInfo();
QoreJniClassMap.cpp:            return i->second;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return literal ? qc->getTypeInfo() : qc->getOrNothingTypeInfo();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::doMethods(JniQoreClass& qc, jni::Class* jc, QoreProgram* pgm) {
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    //printd(LogLevel, "QoreJniClassMap::doMethods() qc: %p jc: %p\n", qc, jc);
QoreJniClassMap.cpp:    LocalReference<jobjectArray> mArray = jc->getDeclaredMethods();
QoreJniClassMap.cpp:    for (jsize i = 0, e = env.getArrayLength(mArray); i < e; ++i) {
QoreJniClassMap.cpp:        // get Method object
QoreJniClassMap.cpp:        LocalReference<jobject> m = env.getObjectArrayElement(mArray, i);
QoreJniClassMap.cpp:        SimpleRefHolder<BaseMethod> meth(new BaseMethod(m, jc));
QoreJniClassMap.cpp:        QoreString mname;
QoreJniClassMap.cpp:        meth->getName(mname);
QoreJniClassMap.cpp:        printd(LogLevel, "+ adding method %s.%s()\n", qc.getName(), mname.c_str());
QoreJniClassMap.cpp:        // get method's parameter types
QoreJniClassMap.cpp:        type_vec_t paramTypeInfo;
QoreJniClassMap.cpp:        type_vec_t altParamTypeInfo;
QoreJniClassMap.cpp:        if (meth->getParamTypes(env, paramTypeInfo, altParamTypeInfo, *this, pgm)) {
QoreJniClassMap.cpp:            printd(LogLevel, "+ skipping %s.%s(); unsupported parameter type for variant %d\n", qc.getName(),
QoreJniClassMap.cpp:                mname.c_str(), i + 1);
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // get method's return type
QoreJniClassMap.cpp:        const QoreTypeInfo* returnTypeInfo = meth->getReturnTypeInfo(*this, pgm);
QoreJniClassMap.cpp:        if (meth->isStatic()) {
QoreJniClassMap.cpp:            // check for duplicate signature
QoreJniClassMap.cpp:            const QoreMethod* qm = qc.findLocalStaticMethod(mname.c_str());
QoreJniClassMap.cpp:            if (qm && qm->existsVariant(paramTypeInfo)) {
QoreJniClassMap.cpp:                printd(LogLevel, "QoreJniClassMap::doMethods() skipping already-created static variant %s::%s()\n",
QoreJniClassMap.cpp:                    qc.getName(), mname.c_str());
QoreJniClassMap.cpp:                continue;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            qc.addStaticMethod((void*)*meth, mname.c_str(), (q_external_static_method_t)exec_java_static_method,
QoreJniClassMap.cpp:                meth->getAccess(), meth->getFlags(), QDOM_UNCONTROLLED_API, returnTypeInfo, paramTypeInfo);
QoreJniClassMap.cpp:            if (!altParamTypeInfo.empty()) {
QoreJniClassMap.cpp:                if (qm && qm->existsVariant(altParamTypeInfo)) {
QoreJniClassMap.cpp:                    printd(LogLevel, "QoreJniClassMap::doMethods() skipping already-created static variant " \
QoreJniClassMap.cpp:                        "%s::%s()\n", qc.getName(), mname.c_str());
QoreJniClassMap.cpp:                    continue;
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:                qc.addStaticMethod((void*)*meth, mname.c_str(), (q_external_static_method_t)exec_java_static_method,
QoreJniClassMap.cpp:                    meth->getAccess(), QCF_NO_FLAGS, QDOM_UNCONTROLLED_API, returnTypeInfo, altParamTypeInfo);
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            if (mname == "copy" || mname == "constructor" || mname == "destructor" || mname == "methodGate"
QoreJniClassMap.cpp:                || mname == "memberNotification" || mname == "memberGate")
QoreJniClassMap.cpp:                mname.prepend("java_");
QoreJniClassMap.cpp:            // check for duplicate signature
QoreJniClassMap.cpp:            const QoreMethod* qm = qc.findLocalMethod(mname.c_str());
QoreJniClassMap.cpp:            if (qm && qm->existsVariant(paramTypeInfo)) {
QoreJniClassMap.cpp:                printd(LogLevel, "QoreJniClassMap::doMethods() skipping already-created variant %s::%s()\n",
QoreJniClassMap.cpp:                    qc.getName(), mname.c_str());
QoreJniClassMap.cpp:                continue;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            if (meth->isAbstract()) {
QoreJniClassMap.cpp:                qc.addAbstractMethod(mname.c_str(), meth->getAccess(), meth->getFlags(), returnTypeInfo,
QoreJniClassMap.cpp:                    paramTypeInfo);
QoreJniClassMap.cpp:                // do not add additional abstract variants for alternate parameter types
QoreJniClassMap.cpp:            } else {
QoreJniClassMap.cpp:                qc.addMethod((void*)*meth, mname.c_str(), (q_external_method_t)exec_java_method, meth->getAccess(),
QoreJniClassMap.cpp:                    meth->getFlags(), QDOM_UNCONTROLLED_API, returnTypeInfo, paramTypeInfo);
QoreJniClassMap.cpp:                if (!altParamTypeInfo.empty()) {
QoreJniClassMap.cpp:                    if (qm && qm->existsVariant(altParamTypeInfo)) {
QoreJniClassMap.cpp:                        printd(LogLevel, "QoreJniClassMap::doMethods() skipping already-created variant %s::%s()\n",
QoreJniClassMap.cpp:                            qc.getName(), mname.c_str());
QoreJniClassMap.cpp:                        continue;
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    qc.addMethod((void*)*meth, mname.c_str(), (q_external_method_t)exec_java_method,
QoreJniClassMap.cpp:                        meth->getAccess(), QCF_NO_FLAGS, QDOM_UNCONTROLLED_API, returnTypeInfo, altParamTypeInfo);
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        jc->trackMethod(meth.release());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static int qore_jni_get_acc_visibility(ClassAccess access) {
QoreJniClassMap.cpp:    switch (access) {
QoreJniClassMap.cpp:        case Internal: return ACC_PRIVATE;
QoreJniClassMap.cpp:        case Private: return ACC_PROTECTED;
QoreJniClassMap.cpp:        default:
QoreJniClassMap.cpp:            break;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return ACC_PUBLIC;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static LocalReference<jobject> get_type_def_from_class(Env& env, jclass jcls) {
QoreJniClassMap.cpp:    //printd(5, "get_type_def_from_class() jcls: %p\n", jcls);
QoreJniClassMap.cpp:    jvalue arg;
QoreJniClassMap.cpp:    arg.l = jcls;
QoreJniClassMap.cpp:    return env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetTypeDescriptionCls, &arg);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:QoreClass* JniExternalProgramData::tryGetQoreClass(Env& env, jclass jcls, bool inherited) {
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        if (inherited) {
QoreJniClassMap.cpp:            jfieldID class_field = env.getStaticField(jcls, JAVA_QORE_CLASS_FIELD, "J");
QoreJniClassMap.cpp:            return reinterpret_cast<QoreClass*>(
QoreJniClassMap.cpp:                env.getStaticLongField(jcls, class_field)
QoreJniClassMap.cpp:            );
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // check if the "$qore_cls_ptr" static field is declared in this class
QoreJniClassMap.cpp:        jvalue jarg;
QoreJniClassMap.cpp:        jarg.l = Globals::javaQoreClassField;
QoreJniClassMap.cpp:        LocalReference<jobject> field = env.callObjectMethod(jcls, Globals::methodClassGetDeclaredField, &jarg);
QoreJniClassMap.cpp:        jarg.l = nullptr;
QoreJniClassMap.cpp:        return reinterpret_cast<QoreClass*>(env.callLongMethod(field, Globals::methodFieldGetLong, &jarg));
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        // ignore exceptions when the field is not found
QoreJniClassMap.cpp:        e.ignore();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return nullptr;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void JniExternalProgramData::saveClass(const QoreClass& qc, LocalReference<jclass> jcls) {
QoreJniClassMap.cpp:    AutoLocker al(codeGenLock);
QoreJniClassMap.cpp:    std::string cls_hash = get_class_hash(qc);
QoreJniClassMap.cpp:    q2jmap_t::iterator i = q2jmap.lower_bound(cls_hash);
QoreJniClassMap.cpp:    if (i == q2jmap.end() || i->first != cls_hash) {
QoreJniClassMap.cpp:        q2jmap.insert(i, q2jmap_t::value_type(cls_hash, jcls.makeGlobal()));
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:jclass JniExternalProgramData::findJavaClass(const QoreClass& qc) {
QoreJniClassMap.cpp:    std::string cls_hash = get_class_hash(qc);
QoreJniClassMap.cpp:    q2jmap_t::iterator i = q2jmap.find(cls_hash);
QoreJniClassMap.cpp:    return i == q2jmap.end() ? nullptr : (jclass)i->second;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:jobject JniExternalProgramData::getJavaParamList(Env& env, jobject class_loader, const QoreExternalVariant& v,
QoreJniClassMap.cpp:        unsigned& len, bool is_abstract) {
QoreJniClassMap.cpp:    const type_vec_t& params = v.getParamTypeList();
QoreJniClassMap.cpp:    len = params.size();
QoreJniClassMap.cpp:    if (params.empty() && (is_abstract || !(v.getCodeFlags() & QCF_USES_EXTRA_ARGS))) {
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::getJavaParamList() %s %d param(s)\n", v.getSignatureText(),
QoreJniClassMap.cpp:        (int)params.size());
QoreJniClassMap.cpp:    // create parameter list
QoreJniClassMap.cpp:    LocalReference<jobject> plist = env.newObject(Globals::classArrayList, Globals::ctorArrayList, nullptr);
QoreJniClassMap.cpp:    for (const QoreTypeInfo* i : params) {
QoreJniClassMap.cpp:        LocalReference<jobject> ptype = getJavaTypeDefinition(env, class_loader, i, true);
QoreJniClassMap.cpp:        printd(5, "%s: adding %s -> %p\n", v.getSignatureText(), type_get_name(i), *ptype);
QoreJniClassMap.cpp:        jvalue jarg;
QoreJniClassMap.cpp:        jarg.l = ptype;
QoreJniClassMap.cpp:        env.callBooleanMethod(plist, Globals::methodArrayListAdd, &jarg);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (!is_abstract && v.getCodeFlags() & QCF_USES_EXTRA_ARGS) {
QoreJniClassMap.cpp:        // add Object... as the final parameter
QoreJniClassMap.cpp:        jvalue jarg;
QoreJniClassMap.cpp:        LocalReference<jobject> jtype(get_type_def_from_class(env, (jclass)Globals::arrayClassObject));
QoreJniClassMap.cpp:        jarg.l = jtype;
QoreJniClassMap.cpp:        env.callBooleanMethod(plist, Globals::methodArrayListAdd, &jarg);
QoreJniClassMap.cpp:    } else if (!len) {
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return plist.release();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static void shorten_params(Env& env, LocalReference<jobject>& params, unsigned len) {
QoreJniClassMap.cpp:    jvalue jarg;
QoreJniClassMap.cpp:    jarg.i = (int)len;
QoreJniClassMap.cpp:    env.callObjectMethod(params, Globals::methodArrayListRemove, &jarg);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static bool check_optional_last_param(Env& env, const QoreExternalVariant& v, LocalReference<jobject>& params,
QoreJniClassMap.cpp:        unsigned& len) {
QoreJniClassMap.cpp:    --len;
QoreJniClassMap.cpp:    const type_vec_t& qore_params = v.getParamTypeList();
QoreJniClassMap.cpp:    assert(qore_params.size() > len);
QoreJniClassMap.cpp:    // if the type accepts NOTHING, then it's optional
QoreJniClassMap.cpp:    if (qore_type_is_assignable_from(qore_params[len], QoreValue())) {
QoreJniClassMap.cpp:        shorten_params(env, params, len);
QoreJniClassMap.cpp:        return true;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    const arg_vec_t& def_args = v.getDefaultArgList();
QoreJniClassMap.cpp:    if (def_args.size() > len && def_args[len]) {
QoreJniClassMap.cpp:        shorten_params(env, params, len);
QoreJniClassMap.cpp:        return true;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return false;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:QoreJavaParamHelper::QoreJavaParamHelper(Env& env, const char* mname, jclass parent_class) : env(env), mname(mname),
QoreJniClassMap.cpp:        parent_class(parent_class), plist(env.newObject(Globals::classArrayList, Globals::ctorArrayList, nullptr)) {
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJavaParamHelper::add(LocalReference<jobject>& params) {
QoreJniClassMap.cpp:    jvalue jarg;
QoreJniClassMap.cpp:    LocalReference<jobject> params_copy;
QoreJniClassMap.cpp:    if (params) {
QoreJniClassMap.cpp:        // first we need to clone the object
QoreJniClassMap.cpp:        params_copy = env.callObjectMethod(params, Globals::methodObjectClone, nullptr);
QoreJniClassMap.cpp:        jarg.l = params_copy;
QoreJniClassMap.cpp:    } else {
QoreJniClassMap.cpp:        jarg.l = nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    env.callBooleanMethod(plist, Globals::methodArrayListAdd, &jarg);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int QoreJavaParamHelper::checkVariant(LocalReference<jobject>& params, qore_method_type_t method_type) {
QoreJniClassMap.cpp:    int list_size = env.callIntMethod(plist, Globals::methodArrayListSize, nullptr);
QoreJniClassMap.cpp:    if (!list_size) {
QoreJniClassMap.cpp:        return 0;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // get size of param list
QoreJniClassMap.cpp:    int plen = params ? env.callIntMethod(params, Globals::methodArrayListSize, nullptr) : 0;
QoreJniClassMap.cpp:    for (int i = 0; i < list_size; ++i) {
QoreJniClassMap.cpp:        // get list element
QoreJniClassMap.cpp:        jvalue jarg;
QoreJniClassMap.cpp:        jarg.i = i;
QoreJniClassMap.cpp:        LocalReference<jobject> params0 = env.callObjectMethod(plist, Globals::methodArrayListGet, &jarg);
QoreJniClassMap.cpp:        // get size of p0
QoreJniClassMap.cpp:        int plen0 = params0 ? env.callIntMethod(params0, Globals::methodArrayListSize, nullptr) : 0;
QoreJniClassMap.cpp:        // skip comparisons if the sizes are different
QoreJniClassMap.cpp:        if (plen != plen0) {
QoreJniClassMap.cpp:            printd(5, "QoreJavaParamHelper::checkVariant() IGNORING variant with plen0: %d (plen: %d " \
QoreJniClassMap.cpp:                "list_size: %d)\n", plen0, plen, list_size);
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        printd(5, "QoreJavaParamHelper::checkVariant() CHECKING plen: %d plen0: %d (list_size: %d)\n", plen, plen0,
QoreJniClassMap.cpp:            list_size);
QoreJniClassMap.cpp:        bool match = true;
QoreJniClassMap.cpp:        // compare each parameter type in order
QoreJniClassMap.cpp:        for (int j = 0; j < plen; ++j) {
QoreJniClassMap.cpp:            jarg.i = j;
QoreJniClassMap.cpp:            LocalReference<jobject> e = env.callObjectMethod(params, Globals::methodArrayListGet, &jarg);
QoreJniClassMap.cpp:            LocalReference<jobject> e0 = env.callObjectMethod(params0, Globals::methodArrayListGet, &jarg);
QoreJniClassMap.cpp:            jarg.l = e0;
QoreJniClassMap.cpp:            bool equal = env.callBooleanMethod(e, Globals::methodObjectEquals, &jarg);
QoreJniClassMap.cpp:            /*
QoreJniClassMap.cpp:            // XXX DEBUG: FIXME add TypeDescription.getCanonicalName()
QoreJniClassMap.cpp:            LocalReference<jstring> eName = env.callObjectMethod(e, Globals::methodTypeDescriptionGetCanonicalName,
QoreJniClassMap.cpp:                nullptr).as<jstring>();
QoreJniClassMap.cpp:            LocalReference<jstring> eName0 = env.callObjectMethod(e0, Globals::methodTypeDescriptionGetCanonicalName,
QoreJniClassMap.cpp:                nullptr).as<jstring>();
QoreJniClassMap.cpp:            Env::GetStringUtfChars c(env, eName);
QoreJniClassMap.cpp:            Env::GetStringUtfChars c0(env, eName0);
QoreJniClassMap.cpp:            printd(5, "QoreJavaParamHelper::checkVariant() %s == %s (%s)\n", c.c_str(), c0.c_str(),
QoreJniClassMap.cpp:                equal ? "true" : "false");
QoreJniClassMap.cpp:            */
QoreJniClassMap.cpp:            if (!equal) {
QoreJniClassMap.cpp:                match = false;
QoreJniClassMap.cpp:                break;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (match) {
QoreJniClassMap.cpp:            printd(5, "QoreJavaParamHelper::checkVariant() SKIPPING method with plen: %d (list_size: %d)\n", plen,
QoreJniClassMap.cpp:                list_size);
QoreJniClassMap.cpp:            return -1;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // if there are no matches in the list, then check base class methods of the opposite type
QoreJniClassMap.cpp:    if (mname) {
QoreJniClassMap.cpp:        try {
QoreJniClassMap.cpp:            // check for a conflict in a base class with a method of the opposite type
QoreJniClassMap.cpp:            jvalue jargs[4];
QoreJniClassMap.cpp:            jargs[0].l = parent_class;
QoreJniClassMap.cpp:            LocalReference<jstring> jname = env.newString(mname);
QoreJniClassMap.cpp:            jargs[1].l = jname;
QoreJniClassMap.cpp:            jargs[2].l = params;
QoreJniClassMap.cpp:            jargs[3].z = method_type == QMT_NORMAL;
QoreJniClassMap.cpp:            jboolean conflict = env.callStaticBooleanMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:                Globals::methodJavaClassBuilderFindBaseClassMethodConflict, &jargs[0]);
QoreJniClassMap.cpp:            if (conflict) {
QoreJniClassMap.cpp:                printd(5, "QoreJavaParamHelper::checkVariant() SKIPPING method '%s' with matching base method; " \
QoreJniClassMap.cpp:                    "plen %d (list_size: %d)\n", mname, plen, list_size);
QoreJniClassMap.cpp:                return -1;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            /*
QoreJniClassMap.cpp:            // convert ArrayList to array
QoreJniClassMap.cpp:            jvalue jargs[2];
QoreJniClassMap.cpp:            LocalReference<jstring> jname = env.newString(mname);
QoreJniClassMap.cpp:            jargs[0].l = jname;
QoreJniClassMap.cpp:            LocalReference<jobject> param_types = env.callObjectMethod(params, Globals::methodArrayListToArray, nullptr);
QoreJniClassMap.cpp:            jargs[1].l = param_types;
QoreJniClassMap.cpp:            LocalReference<jobject> method = env.callObjectMethod(parent_class, Globals::methodClassGetMethod, &jargs[0]);
QoreJniClassMap.cpp:            int mods = env.callIntMethod(method, Globals::methodMethodGetModifiers, nullptr);
QoreJniClassMap.cpp:            if ((method_type == QMT_NORMAL && (mods & JVM_ACC_STATIC))
QoreJniClassMap.cpp:                || (method_type == QMT_STATIC && !(mods & JVM_ACC_STATIC))) {
QoreJniClassMap.cpp:                printd(5, "QoreJavaParamHelper::checkVariant() SKIPPING method with matching base method; " \
QoreJniClassMap.cpp:                    "plen %d (list_size: %d)\n", plen, list_size);
QoreJniClassMap.cpp:                return -1;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            */
QoreJniClassMap.cpp:        } catch (JavaException& e) {
QoreJniClassMap.cpp:            e.ignore();
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addConstructorVariant(Env& env, jobject class_loader, const QoreClass& qcls,
QoreJniClassMap.cpp:        LocalReference<jobject>& bb, const QoreMethod& m, const QoreExternalMethodVariant& v, jclass parent_class,
QoreJniClassMap.cpp:        QoreJavaParamHelper& jph) {
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::addConstructorVariant() adding Java constructor %s %s::constructor(%s) {}\n",
QoreJniClassMap.cpp:        v.getAccessString(), qcls.getName(), v.getSignatureText());
QoreJniClassMap.cpp:    // first get the params
QoreJniClassMap.cpp:    unsigned len;
QoreJniClassMap.cpp:    LocalReference<jobject> params = getJavaParamList(env, class_loader, v, len);
QoreJniClassMap.cpp:    while (true) {
QoreJniClassMap.cpp:        if (!jph.checkVariant(params, QMT_CONSTRUCTOR)) {
QoreJniClassMap.cpp:            std::vector<jvalue> jargs(7);
QoreJniClassMap.cpp:            jargs[0].l = bb;
QoreJniClassMap.cpp:            jargs[1].l = parent_class;
QoreJniClassMap.cpp:            jargs[2].j = reinterpret_cast<jlong>(&m);
QoreJniClassMap.cpp:            jargs[3].j = reinterpret_cast<jlong>(&v);
QoreJniClassMap.cpp:            jargs[4].i = qore_jni_get_acc_visibility(v.getAccess());
QoreJniClassMap.cpp:            jargs[5].l = params;
QoreJniClassMap.cpp:            jargs[6].z = v.getCodeFlags() & QCF_USES_EXTRA_ARGS;
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addConstructorVariant() %s %s::constructor(%s): adding (len: %d " \
QoreJniClassMap.cpp:                "params: %p)\n", v.getAccessString(), qcls.getName(), v.getSignatureText(), len, (jobject)params);
QoreJniClassMap.cpp:            bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:                Globals::methodJavaClassBuilderAddConstructor, &jargs[0]);
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addConstructorVariant() bb: %p\n", (jobject)bb);
QoreJniClassMap.cpp:            // add to param list
QoreJniClassMap.cpp:            jph.add(params);
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addConstructorVariant() %s %s::constructor(%s): " \
QoreJniClassMap.cpp:                "skipping duplicate variant (len: %d)\n",
QoreJniClassMap.cpp:                v.getAccessString(), qcls.getName(), v.getSignatureText(), len);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (!params || !len || !check_optional_last_param(env, v, params, len)) {
QoreJniClassMap.cpp:            break;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addNormalMethodVariant(Env& env, jobject class_loader, const QoreClass& qcls,
QoreJniClassMap.cpp:        LocalReference<jobject>& bb, const QoreMethod& m, const QoreExternalMethodVariant& v,
QoreJniClassMap.cpp:        QoreJavaParamHelper& jph) {
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::addNormalMethodVariant() adding Java normal method %s %s::%s(%s)\n",
QoreJniClassMap.cpp:        qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(), v.getSignatureText());
QoreJniClassMap.cpp:    // first get the params
QoreJniClassMap.cpp:    unsigned len;
QoreJniClassMap.cpp:    LocalReference<jobject> params = getJavaParamList(env, class_loader, v, len, v.isAbstract());
QoreJniClassMap.cpp:    QoreString jname;
QoreJniClassMap.cpp:    if (!strcmp(m.getName(), "getClass")) {
QoreJniClassMap.cpp:        jname = "getQoreClass";
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    while (true) {
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::addNormalMethodVariant() adding Java normal method %s %s::%s(%s) " \
QoreJniClassMap.cpp:          "len: %d varargs: %d\n", qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(),
QoreJniClassMap.cpp:          v.getSignatureText(), len, !v.isAbstract() && (v.getCodeFlags() & QCF_USES_EXTRA_ARGS));
QoreJniClassMap.cpp:        if (!jph.checkVariant(params, QMT_NORMAL)) {
QoreJniClassMap.cpp:            std::vector<jvalue> jargs(9);
QoreJniClassMap.cpp:            jargs[0].l = bb;
QoreJniClassMap.cpp:            // rename methods that are final in java.lang.Object()
QoreJniClassMap.cpp:            LocalReference<jstring> mname;
QoreJniClassMap.cpp:            if (!jname.empty()) {
QoreJniClassMap.cpp:                mname = env.newString(jname.c_str());
QoreJniClassMap.cpp:            } else {
QoreJniClassMap.cpp:                mname = env.newString(m.getName());
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            jargs[1].l = mname;
QoreJniClassMap.cpp:            jargs[2].j = reinterpret_cast<jlong>(&m);
QoreJniClassMap.cpp:            jargs[3].j = reinterpret_cast<jlong>(&v);
QoreJniClassMap.cpp:            jargs[4].i = qore_jni_get_acc_visibility(v.getAccess());
QoreJniClassMap.cpp:            LocalReference<jobject> return_type = getJavaTypeDefinition(env, class_loader, v.getReturnTypeInfo());
QoreJniClassMap.cpp:            jargs[5].l = return_type;
QoreJniClassMap.cpp:            jargs[6].l = params;
QoreJniClassMap.cpp:            jargs[7].z = v.isAbstract();
QoreJniClassMap.cpp:            jargs[8].z = !v.isAbstract() && (v.getCodeFlags() & QCF_USES_EXTRA_ARGS);
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addNormalMethodVariant() %s %s::%s(%s): adding (len: %d)\n",
QoreJniClassMap.cpp:                qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(), v.getSignatureText(), len);
QoreJniClassMap.cpp:            bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:                Globals::methodJavaClassBuilderAddNormalMethod, &jargs[0]);
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addNormalMethodVariant() bb: %p\n", (jobject)bb);
QoreJniClassMap.cpp:            // add to param list
QoreJniClassMap.cpp:            jph.add(params);
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addNormalMethodVariant() %s %s::%s(%s): skipping duplicate variant\n",
QoreJniClassMap.cpp:                qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(), v.getSignatureText());
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // issue #4570: only add one method per abstract variant
QoreJniClassMap.cpp:        if (!params || !len || !check_optional_last_param(env, v, params, len) || v.isAbstract()) {
QoreJniClassMap.cpp:            break;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addStaticMethodVariant(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        const QoreClass& qcls, LocalReference<jobject>& bb, const QoreMethod& m, const QoreExternalMethodVariant& v,
QoreJniClassMap.cpp:        QoreJavaParamHelper& jph) {
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::addStaticMethodVariant() adding Java method static %s %s %s::%s(%s)\n",
QoreJniClassMap.cpp:        v.getAccessString(), qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(),
QoreJniClassMap.cpp:        v.getSignatureText());
QoreJniClassMap.cpp:    // first get the params
QoreJniClassMap.cpp:    unsigned len;
QoreJniClassMap.cpp:    LocalReference<jobject> params = getJavaParamList(env, class_loader, v, len);
QoreJniClassMap.cpp:    while (true) {
QoreJniClassMap.cpp:        if (!jph.checkVariant(params, QMT_STATIC)) {
QoreJniClassMap.cpp:            std::vector<jvalue> jargs(9);
QoreJniClassMap.cpp:            jargs[0].l = bb;
QoreJniClassMap.cpp:            LocalReference<jstring> mname = env.newString(m.getName());
QoreJniClassMap.cpp:            jargs[1].l = mname;
QoreJniClassMap.cpp:            jargs[2].j = (jlong)getProgram(),
QoreJniClassMap.cpp:            jargs[3].j = reinterpret_cast<jlong>(&m);
QoreJniClassMap.cpp:            jargs[4].j = reinterpret_cast<jlong>(&v);
QoreJniClassMap.cpp:            jargs[5].i = qore_jni_get_acc_visibility(v.getAccess());
QoreJniClassMap.cpp:            LocalReference<jobject> return_type = getJavaTypeDefinition(env, class_loader, v.getReturnTypeInfo());
QoreJniClassMap.cpp:            jargs[6].l = return_type;
QoreJniClassMap.cpp:            jargs[7].l = params;
QoreJniClassMap.cpp:            jargs[8].z = v.getCodeFlags() & QCF_USES_EXTRA_ARGS;
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addStaticMethodVariant() static %s %s %s::%s(%s): adding (len: %d) " \
QoreJniClassMap.cpp:                "pgm: %p cpgm: %p varargs: %d\n",
QoreJniClassMap.cpp:                v.getAccessString(), qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(),
QoreJniClassMap.cpp:                v.getSignatureText(), len, getProgram(), qore_get_call_program_context(),
QoreJniClassMap.cpp:                v.getCodeFlags() & QCF_USES_EXTRA_ARGS);
QoreJniClassMap.cpp:            bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:                Globals::methodJavaClassBuilderAddStaticMethod, &jargs[0]);
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addStaticMethodVariant() bb: %p\n", (jobject)bb);
QoreJniClassMap.cpp:            // add to param list
QoreJniClassMap.cpp:            jph.add(params);
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addStaticMethodVariant() static %s %s::%s(%s): skipping duplicate " \
QoreJniClassMap.cpp:                "variant (len: %d)\n", qore_type_get_name(v.getReturnTypeInfo()), qcls.getName(), m.getName(),
QoreJniClassMap.cpp:                v.getSignatureText(), len);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (!params || !len || !check_optional_last_param(env, v, params, len)) {
QoreJniClassMap.cpp:            break;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addStaticMethods(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        const QoreClass& qcls, const QoreMethod& m, QoreJavaParamHelper& jph, LocalReference<jobject>& bb) {
QoreJniClassMap.cpp:    QoreExternalFunctionIterator vi(*m.getFunction());
QoreJniClassMap.cpp:    while (vi.next()) {
QoreJniClassMap.cpp:        const QoreExternalMethodVariant* v = reinterpret_cast<const QoreExternalMethodVariant*>(vi.getVariant());
QoreJniClassMap.cpp:        // skip private:internal variants
QoreJniClassMap.cpp:        if (v->getAccess() > Private) {
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addStaticMethods() skipping static method: %s::%s(%s)\n",
QoreJniClassMap.cpp:                qcls.getName(), m.getName(), v->getSignatureText());
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::addStaticMethods() %s::%s(%s)\n",
QoreJniClassMap.cpp:            qcls.getName(), m.getName(), v->getSignatureText());
QoreJniClassMap.cpp:        assert(m.getMethodType() == MT_Static);
QoreJniClassMap.cpp:        if (addStaticMethodVariant(env, class_loader, qcls, bb, m, *v, jph)) {
QoreJniClassMap.cpp:            return -1;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addMethods(Env& env, jobject class_loader, const QoreClass& qcls,
QoreJniClassMap.cpp:        LocalReference<jobject>& bb, jclass parent_class, strset_t& mset, const QoreClass* other_base) {
QoreJniClassMap.cpp:    // map of static methods already provisioned
QoreJniClassMap.cpp:    strset_t static_methods;
QoreJniClassMap.cpp:    const QoreClass& source_class = other_base ? *other_base : qcls;
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        QoreMethodIterator i(source_class);
QoreJniClassMap.cpp:        unsigned constructor_count = 0;
QoreJniClassMap.cpp:        while (i.next()) {
QoreJniClassMap.cpp:            const QoreMethod* m = i.getMethod();
QoreJniClassMap.cpp:            switch (m->getMethodType()) {
QoreJniClassMap.cpp:                case MT_Constructor: {
QoreJniClassMap.cpp:                    if (other_base) {
QoreJniClassMap.cpp:                        break;
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    QoreExternalFunctionIterator vi(*m->getFunction());
QoreJniClassMap.cpp:                    QoreJavaParamHelper jph(env, nullptr, parent_class);
QoreJniClassMap.cpp:                    while (vi.next()) {
QoreJniClassMap.cpp:                        const QoreExternalMethodVariant* v =
QoreJniClassMap.cpp:                            reinterpret_cast<const QoreExternalMethodVariant*>(vi.getVariant());
QoreJniClassMap.cpp:                        // skip private:internal variants
QoreJniClassMap.cpp:                        if (v->getAccess() > Private) {
QoreJniClassMap.cpp:                            printd(5, "JniExternalProgramData::addMethods() skipping constructor: %s::%s(%s)\n",
QoreJniClassMap.cpp:                                source_class.getName(), m->getName(), v->getSignatureText());
QoreJniClassMap.cpp:                            continue;
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                        printd(5, "JniExternalProgramData::addMethods() constructor: %s::%s(%s)\n",
QoreJniClassMap.cpp:                            source_class.getName(), m->getName(), v->getSignatureText());
QoreJniClassMap.cpp:                        if (addConstructorVariant(env, class_loader, source_class, bb, *m, *v, parent_class, jph)) {
QoreJniClassMap.cpp:                            return -1;
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                        ++constructor_count;
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    break;
QoreJniClassMap.cpp:                };
QoreJniClassMap.cpp:                case MT_Normal: {
QoreJniClassMap.cpp:                    if (other_base && (mset.find(m->getName()) != mset.end())) {
QoreJniClassMap.cpp:                        //printd(5, "JniExternalProgramData::addMethods() skipping %s qcls: %s\n", m->getName(), qcls.getName());
QoreJniClassMap.cpp:                        break;
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    QoreExternalFunctionIterator vi(*m->getFunction());
QoreJniClassMap.cpp:                    QoreJavaParamHelper jph(env, m->getName(), parent_class);
QoreJniClassMap.cpp:                    bool set_method = true;
QoreJniClassMap.cpp:                    while (vi.next()) {
QoreJniClassMap.cpp:                        const QoreExternalMethodVariant* v =
QoreJniClassMap.cpp:                            reinterpret_cast<const QoreExternalMethodVariant*>(vi.getVariant());
QoreJniClassMap.cpp:                        // skip private:internal variants
QoreJniClassMap.cpp:                        if (v->getAccess() > Private) {
QoreJniClassMap.cpp:                            printd(5, "JniExternalProgramData::addMethods() skipping normal method: %s::%s(%s)\n",
QoreJniClassMap.cpp:                                source_class.getName(), m->getName(), v->getSignatureText());
QoreJniClassMap.cpp:                            continue;
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                        printd(5, "JniExternalProgramData::addMethods() normal method: %s::%s(%s)\n",
QoreJniClassMap.cpp:                            source_class.getName(), m->getName(), v->getSignatureText());
QoreJniClassMap.cpp:                        if (addNormalMethodVariant(env, class_loader, source_class, bb, *m, *v, jph)) {
QoreJniClassMap.cpp:                            return -1;
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                        if (set_method) {
QoreJniClassMap.cpp:                            set_method = false;
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    if (!other_base && !set_method) {
QoreJniClassMap.cpp:                        assert(mset.find(m->getName()) == mset.end());
QoreJniClassMap.cpp:                        mset.insert(m->getName());
QoreJniClassMap.cpp:                        set_method = true;
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    // find any static method with the same name and process here to ensure that no arguments conflict
QoreJniClassMap.cpp:                    const QoreMethod* sm = source_class.findStaticMethod(m->getName());
QoreJniClassMap.cpp:                    if (sm) {
QoreJniClassMap.cpp:                        if (addStaticMethods(env, class_loader, source_class, *sm, jph, bb)) {
QoreJniClassMap.cpp:                            return -1;
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                        assert(static_methods.find(sm->getName()) == static_methods.end());
QoreJniClassMap.cpp:                        static_methods.insert(sm->getName());
QoreJniClassMap.cpp:                        if (!other_base && !set_method) {
QoreJniClassMap.cpp:                            assert(mset.find(m->getName()) == mset.end());
QoreJniClassMap.cpp:                            mset.insert(m->getName());
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    break;
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:                default: {
QoreJniClassMap.cpp:                    printd(5, "JniExternalProgramData::addMethods() ignoring method %s::%s(...) " \
QoreJniClassMap.cpp:                        "(all variants)\n", source_class.getName(), m->getName());
QoreJniClassMap.cpp:                    break;
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        // add default constructor if necessary
QoreJniClassMap.cpp:        if (!other_base && !constructor_count) {
QoreJniClassMap.cpp:            std::vector<jvalue> jargs(7);
QoreJniClassMap.cpp:            jargs[0].l = bb;
QoreJniClassMap.cpp:            jargs[1].l = parent_class;
QoreJniClassMap.cpp:            jargs[2].j = 0;
QoreJniClassMap.cpp:            jargs[3].j = 0;
QoreJniClassMap.cpp:            jargs[4].i = ACC_PUBLIC;
QoreJniClassMap.cpp:            jargs[5].l = nullptr;
QoreJniClassMap.cpp:            jargs[6].z = false;
QoreJniClassMap.cpp:            bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder, Globals::methodJavaClassBuilderAddConstructor,
QoreJniClassMap.cpp:                &jargs[0]);
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addMethods() %p: %s: bb: %p (default constructor)\n", &qcls,
QoreJniClassMap.cpp:                qcls.getName(), (jobject)bb);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    QoreStaticMethodIterator i(source_class);
QoreJniClassMap.cpp:    while (i.next()) {
QoreJniClassMap.cpp:        const QoreMethod* m = i.getMethod();
QoreJniClassMap.cpp:        if (static_methods.find(m->getName()) != static_methods.end()) {
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (other_base && (qcls.findMethod(m->getName()) || qcls.findStaticMethod(m->getName()))) {
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        QoreJavaParamHelper jph(env, m->getName(), parent_class);
QoreJniClassMap.cpp:        if (addStaticMethods(env, class_loader, source_class, *m, jph, bb)) {
QoreJniClassMap.cpp:            return -1;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (!other_base) {
QoreJniClassMap.cpp:            assert(mset.find(m->getName()) == mset.end());
QoreJniClassMap.cpp:            mset.insert(m->getName());
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jbyteArray> JniExternalProgramData::generateByteCode(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        const QoreString& qpath, jstring jname, const char* module, const QoreClass* qcls) {
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateByteCode() '%s' pgm: %p qc: %p\n", qpath.c_str(), pgm, qcls);
QoreJniClassMap.cpp:    ExceptionSink xsink;
QoreJniClassMap.cpp:    if (!qcls) {
QoreJniClassMap.cpp:        assert(!qpath.empty());
QoreJniClassMap.cpp:        // set program context (and read lock) before calling QoreProgram::findClass()
QoreJniClassMap.cpp:        QoreExternalProgramContextHelper pch(&xsink, pgm);
QoreJniClassMap.cpp:        if (xsink) {
QoreJniClassMap.cpp:            throw XsinkException(xsink);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        qcls = pgm->findClass(qpath.c_str(), &xsink);
QoreJniClassMap.cpp:        if (xsink) {
QoreJniClassMap.cpp:            assert(!qcls);
QoreJniClassMap.cpp:            throw XsinkException(xsink);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    //printd(5, "JniExternalProgramData::generateByteCode() qpath: '%s': qcls: %p\n", qpath.c_str(), qcls);
QoreJniClassMap.cpp:    if (!qcls) {
QoreJniClassMap.cpp:        // check if we are looking for a "$Functions" class
QoreJniClassMap.cpp:        QoreString cname(qpath.c_str());
QoreJniClassMap.cpp:        qore_offset_t i = cname.rfind("::");
QoreJniClassMap.cpp:        if (i >= 0) {
QoreJniClassMap.cpp:            cname.replace(0, i + 2, (const char*)nullptr);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (cname == JniImportedFunctionClassName) {
QoreJniClassMap.cpp:            // ensure exclusive access while creating java classes
QoreJniClassMap.cpp:            AutoLocker al(codeGenLock);
QoreJniClassMap.cpp:            if (i > 0) {
QoreJniClassMap.cpp:                QoreString ns_path(qpath.c_str(), i);
QoreJniClassMap.cpp:                // create function class
QoreJniClassMap.cpp:                return generateFunctionClassIntern(env, class_loader, pgm, jname, module, ns_path.c_str());
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            // create function class
QoreJniClassMap.cpp:            return generateFunctionClassIntern(env, class_loader, pgm, jname, module);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (cname == JniImportedConstantClassName) {
QoreJniClassMap.cpp:            // ensure exclusive access while creating java classes
QoreJniClassMap.cpp:            AutoLocker al(codeGenLock);
QoreJniClassMap.cpp:            if (i > 0) {
QoreJniClassMap.cpp:                QoreString ns_path(qpath.c_str(), i);
QoreJniClassMap.cpp:                // create constant class
QoreJniClassMap.cpp:                return generateConstantClassIntern(env, class_loader, pgm, jname, module, ns_path.c_str());
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            // create constant class
QoreJniClassMap.cpp:            return generateConstantClassIntern(env, class_loader, pgm, jname, module);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (!qcls) {
QoreJniClassMap.cpp:            // get java name for error message
QoreJniClassMap.cpp:            Env::GetStringUtfChars java_name(env, jname);
QoreJniClassMap.cpp:            ReferenceHolder<QoreListNode> feature_list(pgm->getFeatureList(), &xsink);
QoreJniClassMap.cpp:            QoreStringMaker desc("Java class '%s' cannot be generated, because Qore class '%s' cannot be found; loaded " \
QoreJniClassMap.cpp:                "modules: ", java_name.c_str(), qpath.c_str());
QoreJniClassMap.cpp:            ConstListIterator fi(*feature_list);
QoreJniClassMap.cpp:            while (fi.next()) {
QoreJniClassMap.cpp:                desc.sprintf("%s, ", fi.getValue().get<const QoreStringNode>()->c_str());
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            desc.terminate(desc.size() - 2);
QoreJniClassMap.cpp:            desc.concat(')');
QoreJniClassMap.cpp:            env.throwNew(env.findClass("java/lang/ClassNotFoundException"), desc.c_str());
QoreJniClassMap.cpp:            return nullptr;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // ensure exclusive access while creating java classes
QoreJniClassMap.cpp:    AutoLocker al(codeGenLock);
QoreJniClassMap.cpp:    //printd(5, "JniExternalProgramData::generateByteCode() qpath: '%s' (%p)\n", qpath.c_str(), qcls);
QoreJniClassMap.cpp:    LocalReference<jbyteArray> rv = generateByteCodeIntern(env, class_loader, qcls, jname).as<jbyteArray>();
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static void convert_qore_ns_to_java_pkg(std::string& str) {
QoreJniClassMap.cpp:    size_t start_pos = 0;
QoreJniClassMap.cpp:    while ((start_pos = str.find("::", start_pos)) != std::string::npos) {
QoreJniClassMap.cpp:        str.replace(start_pos, 2, ".");
QoreJniClassMap.cpp:        ++start_pos;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jobject> JniExternalProgramData::loadServiceLoader(Env& env, jclass jcls) {
QoreJniClassMap.cpp:    std::vector<jvalue> jargs(2);
QoreJniClassMap.cpp:    jargs[0].l = jcls;
QoreJniClassMap.cpp:    jargs[1].l = classLoader;
QoreJniClassMap.cpp:    return env.callStaticObjectMethod(dynamicApi, methodQoreJavaDynamicApiLoadServiceLoader, &jargs[0])
QoreJniClassMap.cpp:        .release();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jstring> JniExternalProgramData::getJavaNameForClass(Env& env, const QoreClass& qc) {
QoreJniClassMap.cpp:    ValueHolder v(qc.getReferencedKeyValue(JNI_CK_JAVA_BIN_NAME), nullptr);
QoreJniClassMap.cpp:    if (v) {
QoreJniClassMap.cpp:        assert(v->getType() == NT_STRING);
QoreJniClassMap.cpp:        const char* jname = v->get<const QoreStringNode>()->c_str();
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::getJavaNameForClass() cls '%s' -> embedded java '%s'\n", qc.getName(),
QoreJniClassMap.cpp:            jname);
QoreJniClassMap.cpp:        return env.newString(jname);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    std::string pname = qc.getNamespacePath(true);
QoreJniClassMap.cpp:    // if it's already a Java class, then return the original Java binary name
QoreJniClassMap.cpp:    if (pname.rfind("::Jni::", 0) == 0) {
QoreJniClassMap.cpp:        pname.erase(0, 7);
QoreJniClassMap.cpp:        convert_qore_ns_to_java_pkg(pname);
QoreJniClassMap.cpp:    } else {
QoreJniClassMap.cpp:        const char* mod = qc.getModuleName();
QoreJniClassMap.cpp:        if (mod) {
QoreJniClassMap.cpp:            bool done = false;
QoreJniClassMap.cpp:#if QORE_VERSION_CODE >= 10013
QoreJniClassMap.cpp:            if (!strcmp(mod, "python")) {
QoreJniClassMap.cpp:                const QoreNamespace* ns = qc.getNamespace();
QoreJniClassMap.cpp:                ValueHolder pm(ns->getReferencedKeyValue("python_module"), nullptr);
QoreJniClassMap.cpp:                printd(5, "JniExternalProgramData::getJavaNameForClass() pname: '%s' ns: '%s pm: %s\n", pname.c_str(),
QoreJniClassMap.cpp:                    ns->getPath(true).c_str(), pm->getFullTypeName());
QoreJniClassMap.cpp:                if (pm) {
QoreJniClassMap.cpp:                    pname = pm->get<QoreStringNode>()->c_str();
QoreJniClassMap.cpp:                    convert_qore_ns_to_java_pkg(pname);
QoreJniClassMap.cpp:                    pname += ".";
QoreJniClassMap.cpp:                    pname += qc.getName();
QoreJniClassMap.cpp:                    pname.insert(0, "pythonmod.");
QoreJniClassMap.cpp:                    done = true;
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:            if (!done) {
QoreJniClassMap.cpp:                if (isInjectedModule(mod)) {
QoreJniClassMap.cpp:                    convert_qore_ns_to_java_pkg(pname);
QoreJniClassMap.cpp:                    pname.insert(0, "qore");
QoreJniClassMap.cpp:                } else {
QoreJniClassMap.cpp:                    QoreProgram* pgm = qc.getProgram();
QoreJniClassMap.cpp:                    if (!pgm) {
QoreJniClassMap.cpp:                        pgm = getProgram();
QoreJniClassMap.cpp:                        assert(pgm);
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                    const QoreNamespace* ns = get_module_root_ns(mod, pgm);
QoreJniClassMap.cpp:                    if (!ns) {
QoreJniClassMap.cpp:                        convert_qore_ns_to_java_pkg(pname);
QoreJniClassMap.cpp:                        pname.insert(0, "qore");
QoreJniClassMap.cpp:                    } else {
QoreJniClassMap.cpp:                        std::string nspath = ns->getPath(true);
QoreJniClassMap.cpp:                        if (pname.rfind(nspath, 0) == 0) {
QoreJniClassMap.cpp:                            printd(5, "pname before '%s' (nspath: '%s')\n", pname.c_str(), nspath.c_str());
QoreJniClassMap.cpp:                            // create namespace path from the module's main namespace
QoreJniClassMap.cpp:                            pname.erase(0, nspath.size());
QoreJniClassMap.cpp:                            printd(5, "pname after '%s' (pgm: %p jpc: %p mod: %s)\n", pname.c_str(), pgm, this, mod);
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                        convert_qore_ns_to_java_pkg(pname);
QoreJniClassMap.cpp:                        pname.insert(0, mod);
QoreJniClassMap.cpp:                        if (strcmp(mod, "python")) {
QoreJniClassMap.cpp:                            pname.insert(0, "qoremod.");
QoreJniClassMap.cpp:                        }
QoreJniClassMap.cpp:                    }
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::getJavaNameForClass() cls '%s' -> java '%s'\n", qc.getName(),
QoreJniClassMap.cpp:                pname.c_str());
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            convert_qore_ns_to_java_pkg(pname);
QoreJniClassMap.cpp:            pname.insert(0, "qore");
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::getJavaNameForClass() cls '%s' -> java '%s'\n", qc.getName(), pname.c_str());
QoreJniClassMap.cpp:    return env.newString(pname.c_str());
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addFunctionVariant(Env& env, jobject class_loader, LocalReference<jobject>& bb,
QoreJniClassMap.cpp:        const QoreExternalFunction& func, const QoreExternalVariant& v, QoreProgram* pgm, QoreJavaParamHelper& jph) {
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::addFunctionVariant() adding Java method static %s %s::%s(%s) " \
QoreJniClassMap.cpp:        "pgm: %p\n", qore_type_get_name(v.getReturnTypeInfo()), JniImportedFunctionClassName.c_str(), func.getName(),
QoreJniClassMap.cpp:        v.getSignatureText(), pgm);
QoreJniClassMap.cpp:    // first get the params
QoreJniClassMap.cpp:    unsigned len;
QoreJniClassMap.cpp:    LocalReference<jobject> params = getJavaParamList(env, class_loader, v, len);
QoreJniClassMap.cpp:    while (true) {
QoreJniClassMap.cpp:        if (!jph.checkVariant(params, QMT_STATIC)) {
QoreJniClassMap.cpp:            std::vector<jvalue> jargs(8);
QoreJniClassMap.cpp:            jargs[0].l = bb;
QoreJniClassMap.cpp:            LocalReference<jstring> fname = env.newString(func.getName());
QoreJniClassMap.cpp:            jargs[1].l = fname;
QoreJniClassMap.cpp:            jargs[2].j = reinterpret_cast<jlong>(pgm);
QoreJniClassMap.cpp:            jargs[3].j = reinterpret_cast<jlong>(&func);
QoreJniClassMap.cpp:            jargs[4].j = reinterpret_cast<jlong>(&v);
QoreJniClassMap.cpp:            LocalReference<jobject> return_type = getJavaTypeDefinition(env, class_loader, v.getReturnTypeInfo());
QoreJniClassMap.cpp:            jargs[5].l = (jobject)return_type;
QoreJniClassMap.cpp:            jargs[6].l = params;
QoreJniClassMap.cpp:            jargs[7].z = v.getCodeFlags() & QCF_USES_EXTRA_ARGS;
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addFunctionVariant() static public %s %s::%s(%s): adding (len: %d) " \
QoreJniClassMap.cpp:                "rt: %p\n", qore_type_get_name(v.getReturnTypeInfo()), JniImportedFunctionClassName.c_str(),
QoreJniClassMap.cpp:                func.getName(), v.getSignatureText(), len, (jobject)return_type);
QoreJniClassMap.cpp:            bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:                Globals::methodJavaClassBuilderAddFunction, &jargs[0]);
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addFunctionVariant() bb: %p\n", (jobject)bb);
QoreJniClassMap.cpp:            // add to param list
QoreJniClassMap.cpp:            jph.add(params);
QoreJniClassMap.cpp:        } else {
QoreJniClassMap.cpp:            printd(5, "JniExternalProgramData::addFunctionVariant() static %s %s::%s(%s): skipping duplicate " \
QoreJniClassMap.cpp:                "variant (len: %d)\n", qore_type_get_name(v.getReturnTypeInfo()), JniImportedFunctionClassName.c_str(),
QoreJniClassMap.cpp:                func.getName(), v.getSignatureText(), len);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        if (!params || !len || !check_optional_last_param(env, v, params, len)) {
QoreJniClassMap.cpp:            break;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addFunctions(Env& env, jobject class_loader, const QoreNamespace& ns,
QoreJniClassMap.cpp:        LocalReference<jobject>& bb, QoreProgram* pgm) {
QoreJniClassMap.cpp:    QoreNamespaceFunctionIterator i(ns);
QoreJniClassMap.cpp:    while (i.next()) {
QoreJniClassMap.cpp:        const QoreExternalFunction& f = i.get();
QoreJniClassMap.cpp:        QoreJavaParamHelper jph(env, nullptr, nullptr);
QoreJniClassMap.cpp:        QoreExternalFunctionIterator vi(f);
QoreJniClassMap.cpp:        while (vi.next()) {
QoreJniClassMap.cpp:            const QoreExternalVariant* v = vi.getVariant();
QoreJniClassMap.cpp:            if (addFunctionVariant(env, class_loader, bb, f, *v, pgm, jph)) {
QoreJniClassMap.cpp:                return -1;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jbyteArray> JniExternalProgramData::generateFunctionClassIntern(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        QoreProgram* pgm, jstring jname, const char* module, const char* ns_path) {
QoreJniClassMap.cpp:    // first get Qore namespace
QoreJniClassMap.cpp:    const QoreNamespace* ns = nullptr;
QoreJniClassMap.cpp:    if (module) {
QoreJniClassMap.cpp:        ns = get_module_root_ns(module, pgm);
QoreJniClassMap.cpp:        if (ns && ns_path && ns_path[0]) {
QoreJniClassMap.cpp:            ns = find_ns_path(ns, ns_path);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (!ns) {
QoreJniClassMap.cpp:        ns = ns_path
QoreJniClassMap.cpp:            ? pgm->findNamespace(ns_path)
QoreJniClassMap.cpp:            : pgm->getRootNS();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (!ns) {
QoreJniClassMap.cpp:        assert(ns_path);
QoreJniClassMap.cpp:        QoreStringMaker desc("cannot find Qore namespace '%s' to generate '%s' class for importing functions to Java",
QoreJniClassMap.cpp:            ns_path, JniImportedFunctionClassName.c_str());
QoreJniClassMap.cpp:        env.throwNew(env.findClass("java/lang/ClassNotFoundException"), desc.c_str());
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    assert(jname);
QoreJniClassMap.cpp:    // NOTE: arg array reused below; 2 args needed below
QoreJniClassMap.cpp:    jvalue jargs[2];
QoreJniClassMap.cpp:    jargs[0].l = jname;
QoreJniClassMap.cpp:    LocalReference<jobject> bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetFunctionConstantClassBuilder, &jargs[0]);
QoreJniClassMap.cpp:    //printd(5, "JniExternalProgramData::generateFunctionClassIntern() bb: %p ns: '%s'\n", (jobject)bb, ns->getPath(true).c_str());
QoreJniClassMap.cpp:    // add methods
QoreJniClassMap.cpp:    if (addFunctions(env, class_loader, *ns, bb, pgm)) {
QoreJniClassMap.cpp:        //printd(5, "JniExternalProgramData::generateFunctionClassIntern() failed to add members\n");
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    jargs[0].l = bb;
QoreJniClassMap.cpp:    jargs[1].l = class_loader;
QoreJniClassMap.cpp:    LocalReference<jbyteArray> rv = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetByteCodeFromBuilder, &jargs[0]).as<jbyteArray>();
QoreJniClassMap.cpp:#ifdef DEBUG_1
QoreJniClassMap.cpp:    // NOTE this must come last as using Env::GetStringUtfChars on a java string destroys the string
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        Env::GetStringUtfChars jname_str(env, jname);
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::generateFunctionClassIntern() %s\n", jname_str.c_str());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateFunctionClassIntern() '%s' rv: %p\n", ns->getName(), (jobject)rv);
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addConstants(Env& env, jobject class_loader, jstring jname, const QoreNamespace& ns,
QoreJniClassMap.cpp:        LocalReference<jobject>& bb, QoreProgram* pgm) {
QoreJniClassMap.cpp:    // create ArrayList for static class initializer
QoreJniClassMap.cpp:    LocalReference<jobject> ilist = env.newObject(Globals::classArrayList, Globals::ctorArrayList, nullptr);
QoreJniClassMap.cpp:#ifdef DEBUG
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:    assert(jpc == this);
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:    QoreNamespaceConstantIterator i(ns);
QoreJniClassMap.cpp:    while (i.next()) {
QoreJniClassMap.cpp:        const QoreExternalConstant& c = i.get();
QoreJniClassMap.cpp:        const QoreTypeInfo* typeInfo = c.getTypeInfo();
QoreJniClassMap.cpp:        // cannot create Java fields with type void
QoreJniClassMap.cpp:        if (typeInfo == nothingTypeInfo || typeInfo == nullTypeInfo) {
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        LocalReference<jstring> jcname = env.newString(c.getName());
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::addConstants() '%s' type: %s cl: %x pgm: %p jpc cl: %x\n",
QoreJniClassMap.cpp:            c.getName(), qore_type_get_name(typeInfo),
QoreJniClassMap.cpp:            env.callIntMethod(class_loader, jni::Globals::methodObjectHashCode, nullptr), pgm,
QoreJniClassMap.cpp:            env.callIntMethod(getClassLoader(), jni::Globals::methodObjectHashCode, nullptr));
QoreJniClassMap.cpp:        jvalue jargs[6];
QoreJniClassMap.cpp:        jargs[0].l = bb;
QoreJniClassMap.cpp:        jargs[1].l = jcname;
QoreJniClassMap.cpp:        jargs[2].i = qore_jni_get_acc_visibility(c.getAccess());
QoreJniClassMap.cpp:        LocalReference<jobject> const_type = getJavaTypeDefinition(env, class_loader, typeInfo, true);
QoreJniClassMap.cpp:        jargs[3].l = const_type;
QoreJniClassMap.cpp:        jargs[4].j = (jlong)&c;
QoreJniClassMap.cpp:        jargs[5].l = ilist;
QoreJniClassMap.cpp:        bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder, Globals::methodJavaClassBuilderAddStaticField,
QoreJniClassMap.cpp:            &jargs[0]);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // create static initializer
QoreJniClassMap.cpp:    jvalue jargs[4];
QoreJniClassMap.cpp:    jargs[0].l = bb;
QoreJniClassMap.cpp:    jargs[1].l = jname;
QoreJniClassMap.cpp:    jargs[2].j = (long)pgm;
QoreJniClassMap.cpp:    jargs[3].l = ilist;
QoreJniClassMap.cpp:    bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder, Globals::methodJavaClassBuilderCreateStaticInitializer,
QoreJniClassMap.cpp:        &jargs[0]);
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jbyteArray> JniExternalProgramData::generateConstantClassIntern(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        QoreProgram* pgm, jstring jname, const char* module, const char* ns_path) {
QoreJniClassMap.cpp:    // first get Qore namespace
QoreJniClassMap.cpp:    const QoreNamespace* ns = nullptr;
QoreJniClassMap.cpp:    if (module) {
QoreJniClassMap.cpp:        ns = get_module_root_ns(module, pgm);
QoreJniClassMap.cpp:        if (ns && ns_path && ns_path[0]) {
QoreJniClassMap.cpp:            ns = find_ns_path(ns, ns_path);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (!ns) {
QoreJniClassMap.cpp:        ns = ns_path
QoreJniClassMap.cpp:            ? pgm->findNamespace(ns_path)
QoreJniClassMap.cpp:            : pgm->getRootNS();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (!ns) {
QoreJniClassMap.cpp:        assert(ns_path);
QoreJniClassMap.cpp:        QoreStringMaker desc("cannot find Qore namespace '%s' to generate '%s' class for importing constants to Java",
QoreJniClassMap.cpp:            ns_path, JniImportedConstantClassName.c_str());
QoreJniClassMap.cpp:        env.throwNew(env.findClass("java/lang/ClassNotFoundException"), desc.c_str());
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    assert(jname);
QoreJniClassMap.cpp:    // NOTE: arg array reused below; 2 args needed below
QoreJniClassMap.cpp:    jvalue jargs[2];
QoreJniClassMap.cpp:    jargs[0].l = jname;
QoreJniClassMap.cpp:    LocalReference<jobject> bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetFunctionConstantClassBuilder, &jargs[0]);
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateConstantClassIntern() bb: %p\n", (jobject)bb);
QoreJniClassMap.cpp:    // add static fields
QoreJniClassMap.cpp:    if (addConstants(env, class_loader, jname, *ns, bb, pgm)) {
QoreJniClassMap.cpp:        //printd(5, "JniExternalProgramData::generateConstantClassIntern() failed to add members\n");
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    jargs[0].l = bb;
QoreJniClassMap.cpp:    jargs[1].l = class_loader;
QoreJniClassMap.cpp:    LocalReference<jbyteArray> rv = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetByteCodeFromBuilder, &jargs[0]).as<jbyteArray>();
QoreJniClassMap.cpp:#ifdef DEBUG_1
QoreJniClassMap.cpp:    // NOTE this must come last as using Env::GetStringUtfChars on a java string destroys the string
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        Env::GetStringUtfChars jname_str(env, jname);
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::generateConstantClassIntern() %s\n", jname_str.c_str());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateConstantClassIntern() '%s' rv: %p\n", ns->getName(), (jobject)rv);
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:int JniExternalProgramData::addClassConstants(Env& env, jstring jname, const QoreClass& qcls,
QoreJniClassMap.cpp:        LocalReference<jobject>& bb, QoreProgram* pgm) {
QoreJniClassMap.cpp:    // create ArrayList for static class initializer
QoreJniClassMap.cpp:    LocalReference<jobject> ilist = env.newObject(Globals::classArrayList, Globals::ctorArrayList, nullptr);
QoreJniClassMap.cpp:    QoreClassConstantIterator i(qcls);
QoreJniClassMap.cpp:    while (i.next()) {
QoreJniClassMap.cpp:        const QoreExternalConstant& c = i.get();
QoreJniClassMap.cpp:        const QoreTypeInfo* typeInfo = c.getTypeInfo();
QoreJniClassMap.cpp:        // cannot create Java fields with type void
QoreJniClassMap.cpp:        if (typeInfo == nothingTypeInfo || typeInfo == nullTypeInfo) {
QoreJniClassMap.cpp:            continue;
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        LocalReference<jstring> jcname = env.newString(c.getName());
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::addClassConstants() '%s' type: %s pgm: %p jpc cl: %x\n",
QoreJniClassMap.cpp:            c.getName(), qore_type_get_name(typeInfo), pgm,
QoreJniClassMap.cpp:            env.callIntMethod(getClassLoader(), jni::Globals::methodObjectHashCode, nullptr));
QoreJniClassMap.cpp:        jvalue jargs[6];
QoreJniClassMap.cpp:        jargs[0].l = bb;
QoreJniClassMap.cpp:        jargs[1].l = jcname;
QoreJniClassMap.cpp:        jargs[2].i = qore_jni_get_acc_visibility(c.getAccess());
QoreJniClassMap.cpp:        LocalReference<jobject> const_type = getJavaTypeDefinition(env, (jobject)classLoader, typeInfo, true);
QoreJniClassMap.cpp:        jargs[3].l = const_type;
QoreJniClassMap.cpp:        jargs[4].j = (jlong)&c;
QoreJniClassMap.cpp:        jargs[5].l = ilist;
QoreJniClassMap.cpp:        bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder, Globals::methodJavaClassBuilderAddStaticField,
QoreJniClassMap.cpp:            &jargs[0]);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // create static initializer
QoreJniClassMap.cpp:    jvalue jargs[4];
QoreJniClassMap.cpp:    jargs[0].l = bb;
QoreJniClassMap.cpp:    jargs[1].l = jname;
QoreJniClassMap.cpp:    jargs[2].j = (long)pgm;
QoreJniClassMap.cpp:    jargs[3].l = ilist;
QoreJniClassMap.cpp:    bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder, Globals::methodJavaClassBuilderCreateStaticInitializer,
QoreJniClassMap.cpp:        &jargs[0]);
QoreJniClassMap.cpp:    return 0;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:// This is the C++ interface to the JavaClassBuilder class in Java (i.e. the Java ByteBuddy interface) for building
QoreJniClassMap.cpp:// Java classes in bytecode
QoreJniClassMap.cpp:LocalReference<jbyteArray> JniExternalProgramData::generateByteCodeIntern(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        const QoreClass* qcls, jstring jname) {
QoreJniClassMap.cpp:    //printd(5, "JniExternalProgramData::generateByteCodeIntern() '%s'\n", qcls->getName());
QoreJniClassMap.cpp:    // get parent class
QoreJniClassMap.cpp:    LocalReference<jclass> parent_class;
QoreJniClassMap.cpp:    jclass parent_ptr = nullptr;
QoreJniClassMap.cpp:    // issue #4337: get list of parent interfaces
QoreJniClassMap.cpp:    LocalReference<jobject> parent_interfaces;
QoreJniClassMap.cpp:    // get single base class - Java and Qore's inheritance models are not compatible
QoreJniClassMap.cpp:    // we can only set a single class for the Java base class
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        QoreParentClassIterator ci(*qcls);
QoreJniClassMap.cpp:        while (ci.next()) {
QoreJniClassMap.cpp:            if (ci.getAccess() > Private) {
QoreJniClassMap.cpp:                continue;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            // get internal name for Qore class
QoreJniClassMap.cpp:            LocalReference<jstring> jname = getJavaNameForClass(env, ci.getParentClass());
QoreJniClassMap.cpp:            jvalue jargs[2];
QoreJniClassMap.cpp:            jargs[0].l = jname;
QoreJniClassMap.cpp:            jargs[1].j = (jlong)&ci.getParentClass();
QoreJniClassMap.cpp:            parent_class = env.callObjectMethod(class_loader, Globals::methodQoreURLClassLoaderLoadClassWithPtr,
QoreJniClassMap.cpp:                &jargs[0]).as<jclass>();
QoreJniClassMap.cpp:            // check if parent class is actually a Java interface
QoreJniClassMap.cpp:            if (env.callBooleanMethod(parent_class, Globals::methodClassIsInterface, nullptr)) {
QoreJniClassMap.cpp:                if (!parent_interfaces) {
QoreJniClassMap.cpp:                    parent_interfaces = env.newObject(Globals::classArrayList, Globals::ctorArrayList, nullptr);
QoreJniClassMap.cpp:                }
QoreJniClassMap.cpp:                jvalue jarg;
QoreJniClassMap.cpp:                jarg.l = parent_class;
QoreJniClassMap.cpp:                env.callBooleanMethod(parent_interfaces, Globals::methodArrayListAdd, &jarg);
QoreJniClassMap.cpp:                parent_class = nullptr;
QoreJniClassMap.cpp:                printd(5, "JniExternalProgramData::generateByteCodeIntern() cls: '%s' <- interface '%s'\n",
QoreJniClassMap.cpp:                    qcls->getName(), ci.getParentClass().getName());
QoreJniClassMap.cpp:            } else {
QoreJniClassMap.cpp:                parent_ptr = (jclass)parent_class;
QoreJniClassMap.cpp:                printd(5, "JniExternalProgramData::generateByteCodeIntern() cls: '%s' <- '%s'\n",
QoreJniClassMap.cpp:                    qcls->getName(), ci.getParentClass().getName());
QoreJniClassMap.cpp:                break;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (!parent_ptr) {
QoreJniClassMap.cpp:        parent_ptr = (jclass)Globals::classQoreJavaClassBase;
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::generateByteCodeIntern() cls: '%s' parent: QoreBaseClass\n",
QoreJniClassMap.cpp:            qcls->getName());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    jlong cptr = reinterpret_cast<jlong>(qcls);
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateByteCodeIntern() ns path: '%s': %p (abstract: %d) " \
QoreJniClassMap.cpp:        "jparent: %p (jname: %p)\n", qcls->getNamespacePath(true).c_str(), cptr, qcls->isAbstract(),
QoreJniClassMap.cpp:        parent_ptr, jname);
QoreJniClassMap.cpp:    bool has_jname = (bool)jname;
QoreJniClassMap.cpp:    LocalReference<jstring> njname;
QoreJniClassMap.cpp:    if (!jname) {
QoreJniClassMap.cpp:        njname = getJavaNameForClass(env, *qcls);
QoreJniClassMap.cpp:        //printd(5, "JniExternalProgramData::generateByteCodeIntern() cls '%s' -> java '%s' (generated)\n",
QoreJniClassMap.cpp:        //    qcls->getName(), pname.c_str());
QoreJniClassMap.cpp:        jname = njname;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    std::vector<jvalue> jargs(5);
QoreJniClassMap.cpp:    jargs[0].l = jname;
QoreJniClassMap.cpp:    jargs[1].l = parent_ptr;
QoreJniClassMap.cpp:    jargs[2].l = parent_interfaces;
QoreJniClassMap.cpp:    jargs[3].z = qcls->isAbstract();
QoreJniClassMap.cpp:    jargs[4].j = cptr;
QoreJniClassMap.cpp:    LocalReference<jobject> bb = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetClassBuilder, &jargs[0]);
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateByteCodeIntern() bb: %p\n", (jobject)bb);
QoreJniClassMap.cpp:    strset_t mset;
QoreJniClassMap.cpp:    // add methods
QoreJniClassMap.cpp:    if (addMethods(env, class_loader, *qcls, bb, parent_ptr, mset)) {
QoreJniClassMap.cpp:        //printd(5, "JniExternalProgramData::generateByteCodeIntern() failed to add members\n");
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // add methods inherited from other parent classes
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        QoreParentClassIterator ci(*qcls);
QoreJniClassMap.cpp:        bool skipped = false;
QoreJniClassMap.cpp:        while (ci.next()) {
QoreJniClassMap.cpp:            if (ci.getAccess() > Private) {
QoreJniClassMap.cpp:                continue;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            if (!skipped) {
QoreJniClassMap.cpp:                skipped = true;
QoreJniClassMap.cpp:                continue;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:            //printd(5, "JniExternalProgramData::generateByteCodeIntern() adding other base '%s'\n",
QoreJniClassMap.cpp:            //  ci.getParentClass().getName());
QoreJniClassMap.cpp:            if (addMethods(env, class_loader, *qcls, bb, parent_ptr, mset, &ci.getParentClass())) {
QoreJniClassMap.cpp:                //printd(5, "JniExternalProgramData::generateByteCodeIntern() failed to add members\n");
QoreJniClassMap.cpp:                return nullptr;
QoreJniClassMap.cpp:            }
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    if (addClassConstants(env, jname, *qcls, bb, pgm)) {
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    static std::set<std::string> strset;
QoreJniClassMap.cpp:    std::string qpath = qcls->getNamespacePath();
QoreJniClassMap.cpp:    strset.insert(qpath);
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateByteCodeIntern() %s methods added bb: %p; building class with " \
QoreJniClassMap.cpp:        "cl: %p\n", qcls->getName(), (jobject)bb,
QoreJniClassMap.cpp:        env.callIntMethod((jobject)class_loader, jni::Globals::methodObjectHashCode, nullptr));
QoreJniClassMap.cpp:    jargs[0].l = bb;
QoreJniClassMap.cpp:    jargs[1].l = class_loader;
QoreJniClassMap.cpp:    LocalReference<jbyteArray> rv;
QoreJniClassMap.cpp:#if 0
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        rv = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:            Globals::methodJavaClassBuilderGetByteCodeFromBuilder, &jargs[0]).as<jbyteArray>();
QoreJniClassMap.cpp:    } catch (...) {
QoreJniClassMap.cpp:        for (auto& i : strset) {
QoreJniClassMap.cpp:            printf("ERR '%s': %s\n", qcls->getName(), i.c_str());
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        throw;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:#else
QoreJniClassMap.cpp:    rv = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetByteCodeFromBuilder, &jargs[0]).as<jbyteArray>();
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:    //LocalReference<jbyteArray> rv = env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:    //    Globals::methodJavaClassBuilderGetByteCodeFromBuilder, &jargs[0]).as<jbyteArray>();
QoreJniClassMap.cpp:    strset.erase(qpath);
QoreJniClassMap.cpp:    // save Java bin name in Qore class if necessary
QoreJniClassMap.cpp:    if (has_jname) {
QoreJniClassMap.cpp:        // NOTE this must come last as using Env::GetStringUtfChars on a java string destroys the string
QoreJniClassMap.cpp:        Env::GetStringUtfChars jname_str(env, jname);
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::generateByteCodeIntern() saving class name %p %s: %s\n", qcls,
QoreJniClassMap.cpp:            qcls->getName(), jname_str.c_str());
QoreJniClassMap.cpp:        const_cast<QoreClass*>(qcls)->setKeyValueIfNotSet(JNI_CK_JAVA_BIN_NAME, jname_str.c_str());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::generateByteCodeIntern() %s rv: %p cl: %x (this->cl: %x)\n", qcls->getName(),
QoreJniClassMap.cpp:        (jobject)rv,
QoreJniClassMap.cpp:        env.callIntMethod((jobject)class_loader, jni::Globals::methodObjectHashCode, nullptr),
QoreJniClassMap.cpp:        env.callIntMethod((jobject)classLoader, jni::Globals::methodObjectHashCode, nullptr)
QoreJniClassMap.cpp:    );
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jobject> JniExternalProgramData::getJavaTypeDefinition(Env& env, jobject class_loader,
QoreJniClassMap.cpp:        const QoreTypeInfo* ti, bool no_void) {
QoreJniClassMap.cpp:    qore_type_t t = qore_type_get_base_type(ti);
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::getJavaTypeDefinition() looking up type '%s' (%d) cl: %x (no void: %d)\n",
QoreJniClassMap.cpp:        qore_type_get_name(ti), t, env.callIntMethod((jobject)class_loader, jni::Globals::methodObjectHashCode,
QoreJniClassMap.cpp:            nullptr), no_void);
QoreJniClassMap.cpp:    if (t != NT_OBJECT) {
QoreJniClassMap.cpp:        if (no_void && (t == NT_NOTHING || t == NT_NULL)) {
QoreJniClassMap.cpp:            return get_type_def_from_class(env, Globals::classObject);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        LocalReference<jclass> jtype(QoreJniClassMap::getPrimitiveType(t));
QoreJniClassMap.cpp:        return get_type_def_from_class(env, (jclass)jtype);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    const QoreClass* cls = type_info_get_return_class(ti);
QoreJniClassMap.cpp:    if (!cls) {
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::getJavaTypeDefinition() no mapping for '%s'\n", qore_type_get_name(ti));
QoreJniClassMap.cpp:        return get_type_def_from_class(env, Globals::classObject);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // get internal name for Qore class
QoreJniClassMap.cpp:    LocalReference<jstring> jname = getJavaNameForClass(env, *cls);
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::getJavaTypeDefinition() type '%s' (%d) creating Java class for '%s' (%p)\n",
QoreJniClassMap.cpp:        qore_type_get_name(ti), t, cls->getName(), cls);
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        AutoLocker al(QoreJniClassMap::m);
QoreJniClassMap.cpp:        jvalue jargs[2];
QoreJniClassMap.cpp:        jargs[0].l = jname;
QoreJniClassMap.cpp:        jargs[1].j = (jlong)cls;
QoreJniClassMap.cpp:        LocalReference<jclass> jcls = env.callObjectMethod(class_loader, Globals::methodQoreURLClassLoaderLoadClassWithPtr,
QoreJniClassMap.cpp:            &jargs[0]).as<jclass>();
QoreJniClassMap.cpp:        assert(jcls);
QoreJniClassMap.cpp:        jargs[0].l = jcls;
QoreJniClassMap.cpp:        return env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:            Globals::methodJavaClassBuilderGetTypeDescriptionCls, &jargs[0]);
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        e.ignore();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    /** FIXME: we try to create the Java class here and then create a forward reference if it fails
QoreJniClassMap.cpp:        The problem comes with circular references; valid forward references created here may not be resolvable to the
QoreJniClassMap.cpp:        Qore type at runtime, because the Qore class may not be accessible - the solution to this is not currently clear
QoreJniClassMap.cpp:        Ideally we would annotate the byte code with the ptr to the Qore class and then use it when the JVM resolves
QoreJniClassMap.cpp:        the Java class
QoreJniClassMap.cpp:    */
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::getJavaTypeDefinition() type '%s' (%d) creating forward ref for Java " \
QoreJniClassMap.cpp:        "class for '%s' (%p)\n", qore_type_get_name(ti), t, cls->getName(), cls);
QoreJniClassMap.cpp:    jvalue jarg;
QoreJniClassMap.cpp:    jarg.l = jname;
QoreJniClassMap.cpp:    return env.callStaticObjectMethod(Globals::classJavaClassBuilder,
QoreJniClassMap.cpp:        Globals::methodJavaClassBuilderGetTypeDescriptionStr, &jarg);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:jobject QoreJniClassMap::getJavaObject(const QoreObject* o) {
QoreJniClassMap.cpp:    if (!o->isValid()) {
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    ExceptionSink xsink;
QoreJniClassMap.cpp:    TryPrivateDataRefHolder<QoreJniPrivateData> jo(o, CID_OBJECT, &xsink);
QoreJniClassMap.cpp:    if (jo) {
QoreJniClassMap.cpp:        return jo->makeLocal().release();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // return a new Java QoreObject with a weak reference to the actual Qore object
QoreJniClassMap.cpp:    o->tRef();
QoreJniClassMap.cpp:    jvalue arg;
QoreJniClassMap.cpp:    arg.j = reinterpret_cast<jlong>(o);
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        Env env;
QoreJniClassMap.cpp:        return env.newObject(Globals::classQoreObject, Globals::ctorQoreObject, &arg).release();
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        const_cast<QoreObject*>(o)->tDeref();
QoreJniClassMap.cpp:        throw;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jclass> QoreJniClassMap::getPrimitiveType(qore_type_t t) {
QoreJniClassMap.cpp:    qt2jmap_t::const_iterator i = qt2jmap.find(t);
QoreJniClassMap.cpp:    LocalReference<jclass> rv = i != qt2jmap.end() ? i->second.toLocal() : Globals::classObject.toLocal();
QoreJniClassMap.cpp:    printd(5, "QoreJniClassMap::getPrimitiveType() type %d -> java cls %p\n", t, (jclass)rv);
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:jobject QoreJniClassMap::getJavaClosure(const ResolvedCallReferenceNode* call) {
QoreJniClassMap.cpp:    // return a new Java QoreClosure; weak references are not needed, as ResolvedCallReferenceNode objects always
QoreJniClassMap.cpp:    // implement a weak reference to any captured QoreObject*s
QoreJniClassMap.cpp:    call->ref();
QoreJniClassMap.cpp:    jvalue arg;
QoreJniClassMap.cpp:    arg.j = reinterpret_cast<jlong>(call);
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        Env env;
QoreJniClassMap.cpp:        return env.newObject(Globals::classQoreClosure, Globals::ctorQoreClosure, &arg).release();
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        // NOTE: in the very unlikely case of a Qore exception here, the default exception handler will handle it
QoreJniClassMap.cpp:        ExceptionSink xsink;
QoreJniClassMap.cpp:        const_cast<ResolvedCallReferenceNode*>(call)->deref(&xsink);
QoreJniClassMap.cpp:        throw;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:jarray QoreJniClassMap::getJavaArray(const QoreListNode* l, jclass cls, JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    if (!cls)
QoreJniClassMap.cpp:        return getJavaArrayIntern(env, l, Globals::classObject, jpc);
QoreJniClassMap.cpp:    // get component class for array
QoreJniClassMap.cpp:    LocalReference<jclass> ccls = env.callObjectMethod(cls, Globals::methodClassGetComponentType,
QoreJniClassMap.cpp:        nullptr).as<jclass>();
QoreJniClassMap.cpp:    if (!ccls) {
QoreJniClassMap.cpp:        LocalReference<jstring> clsName = env.callObjectMethod(cls, Globals::methodClassGetCanonicalName,
QoreJniClassMap.cpp:            nullptr).as<jstring>();
QoreJniClassMap.cpp:        Env::GetStringUtfChars cname(env, clsName);
QoreJniClassMap.cpp:        QoreStringMaker str("cannot instantiate array from '%s'", cname.c_str());
QoreJniClassMap.cpp:        throw BasicException(str.c_str());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return getJavaArrayIntern(env, l, ccls, jpc);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:jarray QoreJniClassMap::getJavaArrayIntern(Env& env, const QoreListNode* l, jclass cls, JniExternalProgramData* jpc) {
QoreJniClassMap.cpp:    Type elementType = Globals::getType(cls);
QoreJniClassMap.cpp:    LocalReference<jarray> array = Array::getNew(elementType, cls, l->size());
QoreJniClassMap.cpp:    // now populate array
QoreJniClassMap.cpp:    for (jsize i = 0; i < static_cast<jsize>(l->size()); ++i) {
QoreJniClassMap.cpp:        Array::set(array, elementType, cls, i, l->retrieveEntry(i), jpc);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return array.release();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static void exec_java_constructor(const QoreMethod& qmeth, BaseMethod* m, QoreObject* self, const QoreListNode* args,
QoreJniClassMap.cpp:        q_rt_flags_t rtflags, ExceptionSink* xsink) {
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        // issue #3585: set context for external java threads
QoreJniClassMap.cpp:        //QoreProgram* pgm = qmeth.getClass()->getProgram();
QoreJniClassMap.cpp:        QoreProgram* pgm = self->getProgram(); //qmeth.getClass()->getProgram();
QoreJniClassMap.cpp:        JniExternalProgramData* jpc = JniExternalProgramData::setContext(pgm);
QoreJniClassMap.cpp:        /*
QoreJniClassMap.cpp:        // issue #xxxx: check if class is abstract, if so we need to create a new class and instantiate it
QoreJniClassMap.cpp:        if (m->isClassAbstract()) {
QoreJniClassMap.cpp:            printf("abstract %s::%s()\n", qmeth.getName(), qmeth.getClassName());
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        */
QoreJniClassMap.cpp:        self->setPrivate(qmeth.getClass()->getID(), new QoreJniPrivateData(m->newQoreInstance(args, jpc)));
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        e.convert(xsink);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static QoreValue exec_java_static_method(const QoreMethod& meth, BaseMethod* m, const QoreListNode* args,
QoreJniClassMap.cpp:        q_rt_flags_t rtflags, ExceptionSink* xsink) {
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        // issue #3585: set context for external java threads
QoreJniClassMap.cpp:        QoreProgram* pgm = meth.getClass()->getProgram();
QoreJniClassMap.cpp:        JniExternalProgramData::setContext(pgm);
QoreJniClassMap.cpp:        return m->invokeStatic(args, pgm);
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        e.convert(xsink);
QoreJniClassMap.cpp:        return QoreValue();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static QoreValue exec_java_method(const QoreMethod& meth, BaseMethod* m, QoreObject* self, QoreJniPrivateData* jd,
QoreJniClassMap.cpp:        const QoreListNode* args, q_rt_flags_t rtflags, ExceptionSink* xsink) {
QoreJniClassMap.cpp:    // NOTE: Java base classes will have no Qore program context
QoreJniClassMap.cpp:    // always use the current object's Program, otherwise the wrong ClassLoader will be used
QoreJniClassMap.cpp:    QoreProgram* pgm = self->getProgram();
QoreJniClassMap.cpp:    // issue #3585: set context for external java threads
QoreJniClassMap.cpp:    JniExternalProgramData::setContext(pgm);
QoreJniClassMap.cpp:    QoreProgramContextHelper pch(pgm);
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        return m->invoke(jd->getObject(), args, pgm);
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        e.convert(xsink);
QoreJniClassMap.cpp:        return QoreValue();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:static const char* access_str(ClassAccess a) {
QoreJniClassMap.cpp:    switch (a) {
QoreJniClassMap.cpp:        case Public: return "public";
QoreJniClassMap.cpp:        case Private: return "private";
QoreJniClassMap.cpp:        default: return "private:internal";
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void QoreJniClassMap::doFields(JniQoreClass& qc, jni::Class* jc, QoreProgram* pgm) {
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    printd(LogLevel, "QoreJniClassMap::doFields() %s qc: %p jc: %p\n", qc.getName(), &qc, jc);
QoreJniClassMap.cpp:    LocalReference<jobjectArray> fArray = jc->getDeclaredFields();
QoreJniClassMap.cpp:    for (jsize i = 0, e = env.getArrayLength(fArray); i < e; ++i) {
QoreJniClassMap.cpp:        // get Field object
QoreJniClassMap.cpp:        LocalReference<jobject> f = env.getObjectArrayElement(fArray, i);
QoreJniClassMap.cpp:        SimpleRefHolder<BaseField> field(new BaseField(f, jc));
QoreJniClassMap.cpp:        QoreString fname;
QoreJniClassMap.cpp:        field->getName(fname);
QoreJniClassMap.cpp:        const QoreTypeInfo* fieldTypeInfo = field->getQoreTypeInfo(*this, pgm);
QoreJniClassMap.cpp:        if (field->isStatic()) {
QoreJniClassMap.cpp:            printd(LogLevel, "+ adding static field %s %s %s.%s (%s)\n", access_str(field->getAccess()),
QoreJniClassMap.cpp:                typeInfoGetName(fieldTypeInfo), qc.getName(), fname.c_str(), field->isFinal() ? "const" : "var");
QoreJniClassMap.cpp:            QoreValue v(field->getStatic(pgm, false));
QoreJniClassMap.cpp:            if (field->isFinal()) {
QoreJniClassMap.cpp:                if (v.isNothing())
QoreJniClassMap.cpp:                    v.assign(0ll);
QoreJniClassMap.cpp:                qc.addBuiltinConstant(fname.c_str(), v, field->getAccess());
QoreJniClassMap.cpp:            } else
QoreJniClassMap.cpp:                qc.addBuiltinStaticVar(fname.c_str(), v, field->getAccess(), fieldTypeInfo);
QoreJniClassMap.cpp:        } else if (!qc.findLocalMember(fname.c_str())) {
QoreJniClassMap.cpp:            printd(LogLevel, "+ adding field %s %s %s.%s\n", access_str(field->getAccess()),
QoreJniClassMap.cpp:                typeInfoGetName(fieldTypeInfo), qc.getName(), fname.c_str());
QoreJniClassMap.cpp:            qc.addMember(fname.c_str(), field->getAccess(), fieldTypeInfo);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData::JniExternalProgramData(QoreNamespace* jni, QoreProgram* pgm) : pgm(pgm), jni(jni) {
QoreJniClassMap.cpp:    assert(jni);
QoreJniClassMap.cpp:    Env env(false);
QoreJniClassMap.cpp:    assert(pgm);
QoreJniClassMap.cpp:    // set up QoreURLClassLoader constructor args
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        std::vector<jvalue> jargs(2);
QoreJniClassMap.cpp:        jargs[0].j = reinterpret_cast<long>(pgm);
QoreJniClassMap.cpp:        jargs[1].l = Globals::syscl;
QoreJniClassMap.cpp:        // create our custom classloader
QoreJniClassMap.cpp:        classLoader = env.newObject(Globals::classQoreURLClassLoader, Globals::ctorQoreURLClassLoader,
QoreJniClassMap.cpp:            &jargs[0]).makeGlobal();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    initDynamicApi(env);
QoreJniClassMap.cpp:    // setup classpath
QoreJniClassMap.cpp:    TempString classpath(SystemEnvironment::get("QORE_JNI_CLASSPATH"));
QoreJniClassMap.cpp:    if (classpath) {
QoreJniClassMap.cpp:        addClasspath(classpath->c_str());
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData::JniExternalProgramData(const JniExternalProgramData& parent, Env& env, QoreProgram* pgm) :
QoreJniClassMap.cpp:        pgm(pgm),
QoreJniClassMap.cpp:        classLoader(nullptr),
QoreJniClassMap.cpp:        override_compat_types(parent.override_compat_types),
QoreJniClassMap.cpp:        compat_types(parent.compat_types) {
QoreJniClassMap.cpp:    // create the classLoader and set the parent
QoreJniClassMap.cpp:    {
QoreJniClassMap.cpp:        jvalue jargs[2];
QoreJniClassMap.cpp:        jargs[0].j = (jlong)pgm;
QoreJniClassMap.cpp:        jargs[1].l = parent.classLoader;
QoreJniClassMap.cpp:        classLoader = env.newObject(Globals::classQoreURLClassLoader, Globals::ctorQoreURLClassLoader,
QoreJniClassMap.cpp:            &jargs[0]).makeGlobal();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    initDynamicApi(env);
QoreJniClassMap.cpp:    // copy the parent's class map to this one
QoreJniClassMap.cpp:    jcmap = parent.jcmap;
QoreJniClassMap.cpp:#if QORE_VERSION_CODE >= 10013
QoreJniClassMap.cpp:    ProgramRuntimeExternalParseContextHelper pch(pgm);
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:    // find Jni namespace in new Program if present
QoreJniClassMap.cpp:    jni = pgm->findNamespace("Jni");
QoreJniClassMap.cpp:    if (!jni) {
QoreJniClassMap.cpp:        jni = qjcm.getJniNs().copy();
QoreJniClassMap.cpp:        pgm->getRootNS()->addNamespace(jni);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData::~JniExternalProgramData() {
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        Env env;
QoreJniClassMap.cpp:        env.callVoidMethod(classLoader, Globals::methodQoreURLClassLoaderClearProgramPtr, nullptr);
QoreJniClassMap.cpp:    } catch (UnableToAttachException& e) {
QoreJniClassMap.cpp:        // ignore error - raised when destructions is run after the JVM has shut down
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    // delete fake "$" classes
QoreJniClassMap.cpp:    for (auto& i : fake_cls_map) {
QoreJniClassMap.cpp:        delete i.second;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    classLoader = nullptr;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void JniExternalProgramData::initDynamicApi(Env& env) {
QoreJniClassMap.cpp:    // define the QoreJavaDynamicApi class using our new classloader
QoreJniClassMap.cpp:    LocalReference<jstring> jname = env.newString("org.qore.jni.QoreJavaDynamicApi");
QoreJniClassMap.cpp:    // make byte array
QoreJniClassMap.cpp:    LocalReference<jbyteArray> jbyte_code =
QoreJniClassMap.cpp:        env.newByteArray(java_org_qore_jni_QoreJavaDynamicApi_class_len).as<jbyteArray>();
QoreJniClassMap.cpp:    for (jsize i = 0; (unsigned)i < java_org_qore_jni_QoreJavaDynamicApi_class_len; ++i) {
QoreJniClassMap.cpp:        env.setByteArrayElement(jbyte_code, i, java_org_qore_jni_QoreJavaDynamicApi_class[i]);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    std::vector<jvalue> jargs(4);
QoreJniClassMap.cpp:    jargs[0].l = jname;
QoreJniClassMap.cpp:    jargs[1].l = jbyte_code;
QoreJniClassMap.cpp:    jargs[2].i = 0;
QoreJniClassMap.cpp:    jargs[3].i = java_org_qore_jni_QoreJavaDynamicApi_class_len;
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::JniExternalProgramData() jname: %p bc: %p cl: %d\n", (jobject)jname,
QoreJniClassMap.cpp:        (jobject)jbyte_code, java_org_qore_jni_QoreJavaDynamicApi_class_len);
QoreJniClassMap.cpp:    dynamicApi = env.callObjectMethod(classLoader, Globals::methodQoreURLClassLoaderDefineResolveClass,
QoreJniClassMap.cpp:        &jargs[0]).as<jclass>().makeGlobal();
QoreJniClassMap.cpp:    methodQoreJavaDynamicApiNewInstance = env.getStaticMethod(dynamicApi, "newInstance",
QoreJniClassMap.cpp:        "(Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Ljava/lang/Object;");
QoreJniClassMap.cpp:    methodQoreJavaDynamicApiInvokeMethod = env.getStaticMethod(dynamicApi, "invokeMethod",
QoreJniClassMap.cpp:        "(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;");
QoreJniClassMap.cpp:    methodQoreJavaDynamicApiInvokeMethodNonvirtual = env.getStaticMethod(dynamicApi, "invokeMethodNonvirtual",
QoreJniClassMap.cpp:        "(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;");
QoreJniClassMap.cpp:    methodQoreJavaDynamicApiGetField = env.getStaticMethod(dynamicApi, "getField",
QoreJniClassMap.cpp:        "(Ljava/lang/reflect/Field;Ljava/lang/Object;)Ljava/lang/Object;");
QoreJniClassMap.cpp:    methodQoreJavaDynamicApiLoadServiceLoader = env.getStaticMethod(dynamicApi, "loadServiceLoader",
QoreJniClassMap.cpp:        "(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;");
QoreJniClassMap.cpp:    printd(LogLevel, "JniExternalProgramData::JniExternalProgramData(): this: %p: dynamic API created: %p " \
QoreJniClassMap.cpp:        "classloader: %p QoreJavaClassBase: %p\n", this, getDynamicApi(), getClassLoader(),
QoreJniClassMap.cpp:        (jclass)Globals::classQoreJavaClassBase);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:void JniExternalProgramData::addClasspath(const char* path) {
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    LocalReference<jstring> jname = env.newString(path);
QoreJniClassMap.cpp:    jvalue jarg;
QoreJniClassMap.cpp:    jarg.l = jname;
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        env.callVoidMethod(classLoader, Globals::methodQoreURLClassLoaderAddPath, &jarg);
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        // display exception info on the console as an unhandled exception
QoreJniClassMap.cpp:        ExceptionSink xsink;
QoreJniClassMap.cpp:        e.convert(&xsink);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* JniExternalProgramData::setContext(Env& env) {
QoreJniClassMap.cpp:    QoreProgram* pgm = nullptr;
QoreJniClassMap.cpp:    return setContext(env, pgm);
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* JniExternalProgramData::setContext(Env& env, QoreProgram*& pgm) {
QoreJniClassMap.cpp:    // issue #3199: no program is available when initializing the jni module from the command line
QoreJniClassMap.cpp:    // issue #3153: no context is available when called from a static method
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
QoreJniClassMap.cpp:    // set classloader context in new thread
QoreJniClassMap.cpp:    env.callVoidMethod(jpc->classLoader, Globals::methodQoreURLClassLoaderSetContext, nullptr);
QoreJniClassMap.cpp:    return jpc;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:bool JniExternalProgramData::compatTypes() {
QoreJniClassMap.cpp:    // issue #3199: no program is available when initializing the jni module from the command line
QoreJniClassMap.cpp:    // issue #3153: no context is available when called from a static method
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional();
QoreJniClassMap.cpp:    return jpc->getCompatTypes();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:JniExternalProgramData* JniExternalProgramData::getCreateJniProgramData(QoreProgram* pgm) {
QoreJniClassMap.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
QoreJniClassMap.cpp:    //printd(5, "parse-cmd '%s' jpc: %p jnins: %p\n", arg.c_str(), jpc, jpc ? jpc->getJniNamespace() : nullptr);
QoreJniClassMap.cpp:    if (!jpc) {
QoreJniClassMap.cpp:#if QORE_VERSION_CODE >= 10013
QoreJniClassMap.cpp:        ProgramRuntimeExternalParseContextHelper pch(pgm);
QoreJniClassMap.cpp:#endif
QoreJniClassMap.cpp:        QoreNamespace* jnins = pgm->findNamespace("::Jni");
QoreJniClassMap.cpp:        if (!jnins) {
QoreJniClassMap.cpp:            jnins = qjcm.getJniNs().copy();
QoreJniClassMap.cpp:            pgm->getRootNS()->addNamespace(jnins);
QoreJniClassMap.cpp:        }
QoreJniClassMap.cpp:        jpc = new JniExternalProgramData(jnins, pgm);
QoreJniClassMap.cpp:        pgm->setExternalData("jni", jpc);
QoreJniClassMap.cpp:        pgm->addFeature(QORE_JNI_MODULE_NAME);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return jpc;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jclass> JniExternalProgramData::getClassForValue(const QoreObject* o) {
QoreJniClassMap.cpp:    if (!o->isValid()) {
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    ExceptionSink xsink;
QoreJniClassMap.cpp:    TryPrivateDataRefHolder<QoreJniPrivateData> jo(o, CID_OBJECT, &xsink);
QoreJniClassMap.cpp:    if (jo) {
QoreJniClassMap.cpp:        return env.getObjectClass(jo->getObject()).release();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return getJavaClassForQoreClass(env, o->getClass());
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jclass> JniExternalProgramData::getJavaClassForQoreClass(Env& env, const QoreClass* qc) {
QoreJniClassMap.cpp:    // ensure that class generation is atomic
QoreJniClassMap.cpp:    AutoLocker al(codeGenLock);
QoreJniClassMap.cpp:    // get or create a Java class for the given Qore class
QoreJniClassMap.cpp:    std::string cls_hash = get_class_hash(*qc);
QoreJniClassMap.cpp:    q2jmap_t::iterator i = q2jmap.lower_bound(cls_hash);
QoreJniClassMap.cpp:    if (i == q2jmap.end() || i->first != cls_hash) {
QoreJniClassMap.cpp:        // get Java name for class
QoreJniClassMap.cpp:        LocalReference<jstring> jname = getJavaNameForClass(env, *qc);
QoreJniClassMap.cpp:        jvalue jargs[2];
QoreJniClassMap.cpp:        jargs[0].l = jname;
QoreJniClassMap.cpp:        jargs[1].j = (long)qc;
QoreJniClassMap.cpp:        LocalReference<jclass> jcls = env.callObjectMethod(classLoader,
QoreJniClassMap.cpp:            Globals::methodQoreURLClassLoaderLoadClassWithPtr, &jargs[0]).as<jclass>();
QoreJniClassMap.cpp:        assert(jcls);
QoreJniClassMap.cpp:        // save generated class
QoreJniClassMap.cpp:        i = q2jmap.insert(i, q2jmap_t::value_type(cls_hash, jcls.makeGlobal()));
QoreJniClassMap.cpp:        //printd(5, "JniExternalProgramData::getJavaClassForQoreClass() generated class for '%s': %p\n",
QoreJniClassMap.cpp:        //  qc->getName(), (jclass)i->second);
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return i->second.toLocal();
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:LocalReference<jobject> JniExternalProgramData::getJavaObject(const QoreObject* o) {
QoreJniClassMap.cpp:    if (!o->isValid()) {
QoreJniClassMap.cpp:        return nullptr;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    ExceptionSink xsink;
QoreJniClassMap.cpp:    TryPrivateDataRefHolder<QoreJniPrivateData> jo(o, CID_OBJECT, &xsink);
QoreJniClassMap.cpp:    if (jo) {
QoreJniClassMap.cpp:        return jo->makeLocal();
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    Env env;
QoreJniClassMap.cpp:    LocalReference<jclass> jcls = getJavaClassForQoreClass(env, o->getSurfaceClass());
QoreJniClassMap.cpp:    // return a new Java object with a weak reference to the actual Qore object
QoreJniClassMap.cpp:    jmethodID ctor = env.getMethod(jcls, "<init>", "(Lorg/qore/jni/QoreJavaObjectPtr;)V");
QoreJniClassMap.cpp:    o->tRef();
QoreJniClassMap.cpp:    try {
QoreJniClassMap.cpp:        jvalue arg;
QoreJniClassMap.cpp:        arg.j = reinterpret_cast<jlong>(o);
QoreJniClassMap.cpp:        LocalReference<jobject> jarg = env.newObject(Globals::classQoreJavaObjectPtr, Globals::ctorQoreJavaObjectPtr,
QoreJniClassMap.cpp:            &arg);
QoreJniClassMap.cpp:        arg.l = jarg;
QoreJniClassMap.cpp:        return env.newObject(jcls, ctor, &arg);
QoreJniClassMap.cpp:    } catch (jni::Exception& e) {
QoreJniClassMap.cpp:        const_cast<QoreObject*>(o)->tDeref();
QoreJniClassMap.cpp:        throw;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:bool JniExternalProgramData::addInjectedModule(const char* modstr) {
QoreJniClassMap.cpp:    std::string mod(modstr);
QoreJniClassMap.cpp:    AutoLocker al(injected_module_lock);
QoreJniClassMap.cpp:    strset_t::iterator i = injected_module_set.lower_bound(mod);
QoreJniClassMap.cpp:    if (i == injected_module_set.end() || (*i) != mod) {
QoreJniClassMap.cpp:        injected_module_set.insert(i, mod);
QoreJniClassMap.cpp:        printd(5, "JniExternalProgramData::addInjectedModule() this: %p mod: '%s'\n", this, modstr);
QoreJniClassMap.cpp:        return true;
QoreJniClassMap.cpp:    }
QoreJniClassMap.cpp:    return false;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:bool JniExternalProgramData::isInjectedModule(const char* mod) const {
QoreJniClassMap.cpp:    AutoLocker al(injected_module_lock);
QoreJniClassMap.cpp:    bool rv = injected_module_set.find(mod) != injected_module_set.end();
QoreJniClassMap.cpp:    printd(5, "JniExternalProgramData::isInjectedModule() this: %p find '%s': %d (size: %d)\n", this, mod, rv,
QoreJniClassMap.cpp:        (int)injected_module_set.size());
QoreJniClassMap.cpp:    return rv;
QoreJniClassMap.cpp:}
QoreJniClassMap.cpp:}
Globals.h://--------------------------------------------------------------------*- C++ -*-
Globals.h://
Globals.h://  Qore Programming Language
Globals.h://
Globals.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Globals.h://
Globals.h://  Permission is hereby granted, free of charge, to any person obtaining a
Globals.h://  copy of this software and associated documentation files (the "Software"),
Globals.h://  to deal in the Software without restriction, including without limitation
Globals.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Globals.h://  and/or sell copies of the Software, and to permit persons to whom the
Globals.h://  Software is furnished to do so, subject to the following conditions:
Globals.h://
Globals.h://  The above copyright notice and this permission notice shall be included in
Globals.h://  all copies or substantial portions of the Software.
Globals.h://
Globals.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Globals.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Globals.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Globals.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Globals.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Globals.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Globals.h://  DEALINGS IN THE SOFTWARE.
Globals.h://
Globals.h://------------------------------------------------------------------------------
Globals.h:///
Globals.h:/// \file
Globals.h:/// \brief TODO file description
Globals.h:///
Globals.h://------------------------------------------------------------------------------
Globals.h:#ifndef QORE_JNI_GLOBALS_H_
Globals.h:#define QORE_JNI_GLOBALS_H_
Globals.h:#include "GlobalReference.h"
Globals.h:#include "Env.h"
Globals.h:DLLLOCAL QoreStringNode* jni_module_init_intern();
Globals.h:#define QORE_JNI_MODULE_NAME "jni"
Globals.h:namespace jni {
Globals.h:constexpr const char* JAVA_QORE_CLASS_FIELD = "$qore_cls_ptr";
Globals.h:enum class Type {
Globals.h:    Void, Boolean, Byte, Char, Short, Int, Long, Float, Double, Reference
Globals.h:};
Globals.h:DLLLOCAL extern bool jni_qore_init;
Globals.h:DLLLOCAL const std::string JniImportedFunctionClassName = "$Functions";
Globals.h:DLLLOCAL const std::string JniImportedConstantClassName = "$Constants";
Globals.h:class Env;
Globals.h:class Globals {
Globals.h:public:
Globals.h:    DLLLOCAL static GlobalReference<jobject> syscl;                               // base/system classloader
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveVoid;                   // class for the void return type
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveBoolean;                // class for the primitive type boolean
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveByte;                   // class for the primitive type byte
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveChar;                   // class for the primitive type char
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveShort;                  // class for the primitive type short
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveInt;                    // class for the primitive type int
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveLong;                   // class for the primitive type long
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveFloat;                  // class for the primitive type float
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPrimitiveDouble;                 // class for the primitive type double
Globals.h:    DLLLOCAL static GlobalReference<jclass> arrayClassObject;                     // class for Object[]
Globals.h:    DLLLOCAL static GlobalReference<jclass> arrayClassByte;                       // class for byte[]
Globals.h:    DLLLOCAL static GlobalReference<jclass> classSystem;                          // java.lang.System
Globals.h:    DLLLOCAL static jmethodID methodSystemSetProperty;                            // String System.setProperty()
Globals.h:    DLLLOCAL static jmethodID methodSystemGetProperty;                            // String System.getProperty()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classObject;                          // java.lang.Object
Globals.h:    DLLLOCAL static jmethodID methodObjectClone;                                  // Object Object.clone()
Globals.h:    DLLLOCAL static jmethodID methodObjectGetClass;                               // Class<?> Object.getClass()
Globals.h:    DLLLOCAL static jmethodID methodObjectEquals;                                 // boolean equals(Object)
Globals.h:    DLLLOCAL static jmethodID methodObjectHashCode;                               // int hashCode()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classClass;                           // java.lang.Class
Globals.h:    DLLLOCAL static jmethodID methodClassIsArray;                                 // boolean Class.isArray()
Globals.h:    DLLLOCAL static jmethodID methodClassIsInterface;                             // boolean Class.isInterface()
Globals.h:    DLLLOCAL static jmethodID methodClassGetComponentType;                        // Class<?> Class.getComponentType()
Globals.h:    DLLLOCAL static jmethodID methodClassGetClassLoader;                          // ClassLoader Class.getClassLoader()
Globals.h:    DLLLOCAL static jmethodID methodClassGetName;                                 // String Class.getName()
Globals.h:    DLLLOCAL static jmethodID methodClassGetDeclaredFields;                       // Field[] Class.getDeclaredFields()
Globals.h:    DLLLOCAL static jmethodID methodClassGetSuperClass;                           // Class<? super T> Class.getSuperClass()
Globals.h:    DLLLOCAL static jmethodID methodClassGetInterfaces;                           // Class<?>[] Class.getInterfacess()
Globals.h:    DLLLOCAL static jmethodID methodClassGetDeclaredConstructors;                 // Constructor<?>[] Class.getDeclaredConstructors()
Globals.h:    DLLLOCAL static jmethodID methodClassGetDeclaredConstructor;                  // Constructor<?> Class.getDeclaredConstructor(Class<?>...)
Globals.h:    DLLLOCAL static jmethodID methodClassGetModifiers;                            // int Class.getModifiers()
Globals.h:    DLLLOCAL static jmethodID methodClassIsPrimitive;                             // boolean Class.isPrimitive()
Globals.h:    DLLLOCAL static jmethodID methodClassGetDeclaredMethods;                      // Method[] Class.getDeclaredMethods()
Globals.h:    DLLLOCAL static jmethodID methodClassGetCanonicalName;                        // String Class.getCanonicalName()
Globals.h:    DLLLOCAL static jmethodID methodClassGetDeclaredField;                        // Field Class.getField()
Globals.h:    DLLLOCAL static jmethodID methodClassIsAssignableFrom;                        // boolean Class.isAsignableFrom(Class)
Globals.h:    DLLLOCAL static jmethodID methodClassGetMethod;                               // Method Class.getMethod(String, Class[])
Globals.h:    DLLLOCAL static GlobalReference<jclass> classThrowable;                       // java.lang.Throwable
Globals.h:    DLLLOCAL static jmethodID methodThrowableGetMessage;                          // String Throwable.getMessage()
Globals.h:    DLLLOCAL static jmethodID methodThrowableGetStackTrace;                       // String Throwable.getStackTrace()
Globals.h:    DLLLOCAL static jmethodID methodThrowableGetCause;                            // String Throwable.getCause()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classStackTraceElement;               // java.lang.StackTraceElement
Globals.h:    DLLLOCAL static jmethodID methodStackTraceElementGetClassName;                // String StackTraceElement.getClassName()
Globals.h:    DLLLOCAL static jmethodID methodStackTraceElementGetFileName;                 // String StackTraceElement.getFileName()
Globals.h:    DLLLOCAL static jmethodID methodStackTraceElementGetLineNumber;               // int StackTraceElement.getLineNumber()
Globals.h:    DLLLOCAL static jmethodID methodStackTraceElementGetMethodName;               // String StackTraceElement.getMethodName()
Globals.h:    DLLLOCAL static jmethodID methodStackTraceElementIsNativeMethod;              // boolean StackTraceElement.isNativeMethod()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classString;                          // java.lang.String
Globals.h:    DLLLOCAL static GlobalReference<jclass> classField;                           // java.lang.reflect.Field
Globals.h:    DLLLOCAL static jmethodID methodFieldGetType;                                 // Class<?> Field.getType()
Globals.h:    DLLLOCAL static jmethodID methodFieldGetDeclaringClass;                       // Class<?> Field.getDeclaringClass()
Globals.h:    DLLLOCAL static jmethodID methodFieldGetModifiers;                            // int Field.getModifiers()
Globals.h:    DLLLOCAL static jmethodID methodFieldGetName;                                 // String Field.getName()
Globals.h:    DLLLOCAL static jmethodID methodFieldGet;                                     // Object Field.get(Object)
Globals.h:    DLLLOCAL static jmethodID methodFieldGetLong;                                 // Object Field.getLong(Object)
Globals.h:    DLLLOCAL static jmethodID methodFieldSetAccessible;                           // void Field.setAccessible(boolean)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classMethod;                          // java.lang.reflect.Method
Globals.h:    DLLLOCAL static jmethodID methodMethodGetReturnType;                          // Class<?> Method.getReturnType()
Globals.h:    DLLLOCAL static jmethodID methodMethodGetParameterTypes;                      // Class<?>[] Method.getParameterTypes()
Globals.h:    DLLLOCAL static jmethodID methodMethodGetDeclaringClass;                      // Class<?> Method.getDeclaringClass()
Globals.h:    DLLLOCAL static jmethodID methodMethodGetModifiers;                           // int Method.getModifiers()
Globals.h:    DLLLOCAL static jmethodID methodMethodIsVarArgs;                              // bool Method.isVarArgs()
Globals.h:    DLLLOCAL static jmethodID methodMethodGetName;                                // String Method.getName()
Globals.h:    DLLLOCAL static jmethodID methodMethodToGenericString;                        // String Method.getName()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classConstructor;                     // java.lang.reflect.Constructor
Globals.h:    DLLLOCAL static jmethodID methodConstructorGetParameterTypes;                 // Class<?>[] Constructor.getParameterTypes()
Globals.h:    DLLLOCAL static jmethodID methodConstructorToString;                          // String Constructor.toString()
Globals.h:    DLLLOCAL static jmethodID methodConstructorGetModifiers;                      // int Constructor.getModifiers()
Globals.h:    DLLLOCAL static jmethodID methodConstructorIsVarArgs;                         // boolean Constructor.isVarArgs()
Globals.h:    DLLLOCAL static jmethodID methodConstructorNewInstance;                       // Object newInstance(Object...)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreInvocationHandler;           // org.qore.jni.QoreInvocationHandler
Globals.h:    DLLLOCAL static jmethodID ctorQoreInvocationHandler;                          // QoreInvocationHandler(long)
Globals.h:    DLLLOCAL static jmethodID methodQoreInvocationHandlerDestroy;                 // void QoreInvocationHandler.destroy()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreJavaApi;                     // org.qore.jni.QoreJavaApi
Globals.h:    DLLLOCAL static jmethodID methodQoreJavaApiGetStackTrace;                     // StackTraceElement[] getStackTrace()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreExceptionWrapper;            // org.qore.jni.QoreExceptionWrapper
Globals.h:    DLLLOCAL static jmethodID ctorQoreExceptionWrapper;                           // QoreExceptionWrapper(long)
Globals.h:    DLLLOCAL static jmethodID methodQoreExceptionWrapperGet;                      // long QoreExceptionWrapper.get()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreException;                   // org.qore.jni.QoreException
Globals.h:    DLLLOCAL static jmethodID methodQoreExceptionGetErr;                          // String QoreException.getErr()
Globals.h:    DLLLOCAL static jmethodID methodQoreExceptionGetDesc;                         // String QoreException.getDesc()
Globals.h:    DLLLOCAL static jmethodID methodQoreExceptionGetArg;                          // String QoreException.getArg()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreObjectBase;                  // org.qore.jni.QoreObjectBase
Globals.h:    DLLLOCAL static jmethodID methodQoreObjectBaseGet;                            // long get()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreJavaClassBase;               // org.qore.jni.QoreJavaClassBase
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreObject;                      // org.qore.jni.QoreObject
Globals.h:    DLLLOCAL static jmethodID ctorQoreObject;                                     // QoreObject(long)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreJavaObjectPtr;               // org.qore.jni.QoreJavaObjectPtr
Globals.h:    DLLLOCAL static jmethodID ctorQoreJavaObjectPtr;                              // QoreJavaObjectPtr(long)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreClosure;                     // org.qore.jni.QoreClosure
Globals.h:    DLLLOCAL static jmethodID ctorQoreClosure;                                    // QoreClosure(long)
Globals.h:    DLLLOCAL static jmethodID methodQoreClosureGet;                               // long QoreClosure.get()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreObjectWrapper;               // org.qore.jni.QoreObjectWrapper
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreClosureMarker;               // org.qore.jni.QoreClosureMarker
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreClosureMarkerImpl;           // org.qore.jni.QoreClosureMarkerImpl
Globals.h:    DLLLOCAL static GlobalReference<jclass> classProxy;                           // java.lang.reflect.Proxy
Globals.h:    DLLLOCAL static jmethodID methodProxyNewProxyInstance;                        // Object Proxy.newProxyInstance(ClassLoader, Class[], InvocationHandler)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classClassLoader;                     // java.lang.ClassLoader
Globals.h:    DLLLOCAL static jmethodID methodClassLoaderLoadClass;                         // Class loadClass(String)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreURLClassLoader;              // org.qore.jni.QoreURLClassLoader
Globals.h:    DLLLOCAL static jmethodID ctorQoreURLClassLoader;                             // QoreURLClassLoader(long)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderAddPath;                    // void QoreURLClassLoader.addPath(String)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderLoadClass;                  // Class QoreURLClassLoader.loadClass(String)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderLoadClassWithPtr;           // Class QoreURLClassLoader.loadClassWithPtr(String, long)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderLoadResolveClass;           // Class QoreURLClassLoader.loadResolveClass(String)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderSetContext;                 // void QoreURLClassLoader.setContext()
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderGetProgramPtr;              // long QoreURLClassLoader.getProgramPtr()
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderAddPendingClass;            // void QoreURLClassLoader.addPendingClass(String, byte[])
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderDefineResolveClass;         // Class<?> QoreURLClassLoader.defineResolveClass​(String, byte[], int, int)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderGetResolveClass;            // Class<?> QoreURLClassLoader.getResolveClass(String)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderClearCache;                 // void QoreURLClassLoader.clearCache()
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderDefineClassUnconditional;   // Class<?> QoreURLClassLoader.defineClassUnconditional(String, byte[])
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderGetPtr;                     // long getPtr()
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderGetCurrent;                 // OoreURLClassLoader getCurrent()
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderCheckInProgress;            // boolean checkInProgress(String)
Globals.h:    DLLLOCAL static jmethodID methodQoreURLClassLoaderClearProgramPtr;            // void ClearProgramPtr()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classJavaClassBuilder;                // org.qore.jni.JavaClassBuilder
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderGetFunctionConstantClassBuilder; // static DynamicType.Builder<?> getFunctionConstantClassBuilder(String bin_name)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderAddFunction;                  // static DynamicType.Builder<?> addFunction(DynamicType.Builder<?>, String, long, long, long, TypeDefinition, List<TypeDefinition>, boolean)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderAddStaticField;               // static DynamicType.Builder<?> addStaticField(DynamicType.Builder<?>, String, int, TypeDescription, long, ArrayList)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderCreateStaticInitializer;      // static DynamicType.Builder<?> createStaticInitializer(DynamicType.Builder<?>, String, long, ArrayList)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderGetClassBuilder;              // static DynamicType.Builder<?> getClassBuilder(String, Class<?>, boolean, long)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderAddConstructor;               // static DynamicType.Builder<?> addConstructor(DynamicType.Builder<?>, Class<?>, long, long, int, List<TypeDefinition>, boolean)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderAddNormalMethod;              // static DynamicType.Builder<?> addNormalMethod(DynamicType.Builder<?>, String, long, long, int, TypeDefinition, List<TypeDefinition>, boolean, boolean)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderAddStaticMethod;              // static DynamicType.Builder<?> addStaticMethod(DynamicType.Builder<?>, String, long, long, long, int, TypeDefinition, List<TypeDefinition>, boolean)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderGetByteCodeFromBuilder;       // static byte[] getByteCodeFromBuilder(DynamicType.Builder<?>, QoreURLClassLoader)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderGetTypeDescriptionCls;        // static TypeDescription getTypeDescription(Class<?>)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderGetTypeDescriptionStr;        // static TypeDescription getTypeDescription(String)
Globals.h:    DLLLOCAL static jmethodID methodJavaClassBuilderFindBaseClassMethodConflict;  // static boolean findBaseClassMethodConflict(Class<?>, String, List<TypeDescription>, boolean)
Globals.h:    // to check for headless AWT to avoid importing classes that cannot be initialized when headless
Globals.h:    DLLLOCAL static GlobalReference<jclass> classGraphicsEnvironment;             // java.awt.GraphicsEnvironment
Globals.h:    DLLLOCAL static jmethodID methodGraphicsEnvironmentIsHeadless;                // boolean GraphicsEnvironment.isHeadless()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classThread;                          // java.lang.Thread
Globals.h:    DLLLOCAL static jmethodID methodThreadCurrentThread;                          // Thread Thread.currentThread()
Globals.h:    DLLLOCAL static jmethodID methodThreadGetContextClassLoader;                  // ClassLoader Thread.getContextClassLoader()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classHashMap;                         // java.util.HashMap
Globals.h:    DLLLOCAL static GlobalReference<jclass> classHash;                            // org.qore.jni.Hash
Globals.h:    DLLLOCAL static jmethodID ctorHash;                                           // Hash()
Globals.h:    DLLLOCAL static jmethodID methodHashPut;                                      // Object Hash.put(Object K, Object V)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classMap;                             // java.util.Map
Globals.h:    DLLLOCAL static jmethodID methodMapEntrySet;                                  // Set<Map.Entry<K,V>> Map.entrySet()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classList;                            // java.util.List
Globals.h:    DLLLOCAL static jmethodID methodListSize;                                     // int List.size()
Globals.h:    DLLLOCAL static jmethodID methodListGet;                                      // Object List.get(int index)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classArrayList;                       // java.util.ArrayList
Globals.h:    DLLLOCAL static jmethodID ctorArrayList;                                      // ArrayList()
Globals.h:    DLLLOCAL static jmethodID methodArrayListAdd;                                 // int ArrayList.add(Object)
Globals.h:    DLLLOCAL static jmethodID methodArrayListGet;                                 // Object ArrayList.get(int)
Globals.h:    DLLLOCAL static jmethodID methodArrayListRemove;                              // Object ArrayList.remove(int)
Globals.h:    DLLLOCAL static jmethodID methodArrayListSize;                                // int ArrayList.size()
Globals.h:    DLLLOCAL static jmethodID methodArrayListToArray;                             // Object[] ArrayList.toArray()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classSet;                             // java.util.Set
Globals.h:    DLLLOCAL static jmethodID methodSetIterator;                                  // Set.iterator()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classEntry;                           // java.util.Map.Entry
Globals.h:    DLLLOCAL static jmethodID methodEntryGetKey;                                  // Map.Entry.getKey()
Globals.h:    DLLLOCAL static jmethodID methodEntryGetValue;                                // Map.Entry.getValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classIterator;                        // java.util.Iterator
Globals.h:    DLLLOCAL static jmethodID methodIteratorHasNext;                              // boolean hasNext()
Globals.h:    DLLLOCAL static jmethodID methodIteratorNext;                                 // Object next()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classZonedDateTime;                   // java.time.ZonedDateTime
Globals.h:    DLLLOCAL static jmethodID methodZonedDateTimeParse;                           // ZonedDateTime.parse()
Globals.h:    DLLLOCAL static jmethodID methodZonedDateTimeToString;                        // ZonedDateTime.toString()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classQoreRelativeTime;                // org.qore.jni.QoreRelativeTime
Globals.h:    DLLLOCAL static jmethodID ctorQoreRelativeTime;                               // QoreRelativeTime(int, int, int, int, int, int, int)
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeYear;                           // QoreRelativeTime.year
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeMonth;                          // QoreRelativeTime.month
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeDay;                            // QoreRelativeTime.day
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeHour;                           // QoreRelativeTime.hour
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeMinute;                         // QoreRelativeTime.minute
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeSecond;                         // QoreRelativeTime.second
Globals.h:    DLLLOCAL static jfieldID fieldQoreRelativeTimeUs;                             // QoreRelativeTime.us
Globals.h:    DLLLOCAL static GlobalReference<jclass> classBigDecimal;                      // java.math.BigDecimal
Globals.h:    DLLLOCAL static jmethodID ctorBigDecimal;                                     // BigDecimal(String)
Globals.h:    DLLLOCAL static jmethodID methodBigDecimalToString;                           // BigDecimal.toString()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classArrays;                          // java.util.Arrays
Globals.h:    DLLLOCAL static jmethodID methodArraysToString;                               // Arrays.toString()
Globals.h:    DLLLOCAL static jmethodID methodArraysDeepToString;                           // Arrays.deepToString()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classBoolean;                         // java.lang.Boolean
Globals.h:    DLLLOCAL static jmethodID ctorBoolean;                                        // Boolean(boolean)
Globals.h:    DLLLOCAL static jmethodID methodBooleanBooleanValue;                          // boolean Boolean.booleanValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classInteger;                         // java.lang.Integer
Globals.h:    DLLLOCAL static jmethodID ctorInteger;                                        // Integer(int)
Globals.h:    DLLLOCAL static jmethodID methodIntegerIntValue;                              // int Integer.intValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classLong;                            // java.lang.Long
Globals.h:    DLLLOCAL static jmethodID ctorLong;                                           // Long(long)
Globals.h:    DLLLOCAL static jmethodID methodLongLongValue;                                // long Long.longValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classShort;                           // java.lang.Short
Globals.h:    DLLLOCAL static jmethodID ctorShort;                                          // Short(short)
Globals.h:    DLLLOCAL static jmethodID methodShortShortValue;                              // short Short.shortValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classByte;                            // java.lang.Byte
Globals.h:    DLLLOCAL static jmethodID ctorByte;                                           // Byte(byte)
Globals.h:    DLLLOCAL static jmethodID methodByteByteValue;                                // byte Byte.byteValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classDouble;                          // java.lang.Double
Globals.h:    DLLLOCAL static jmethodID ctorDouble;                                         // Double(double)
Globals.h:    DLLLOCAL static jmethodID methodDoubleDoubleValue;                            // double Double.doubleValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classFloat;                           // java.lang.Float
Globals.h:    DLLLOCAL static jmethodID ctorFloat;                                          // Float(float)
Globals.h:    DLLLOCAL static jmethodID methodFloatFloatValue;                              // float Float.floatValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classCharacter;                       // java.lang.Character
Globals.h:    DLLLOCAL static jmethodID ctorCharacter;                                      // Character(char)
Globals.h:    DLLLOCAL static jmethodID methodCharacterCharValue;                           // char Character.charValue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classCharSequence;                    // java.lang.CharSequence
Globals.h:    DLLLOCAL static GlobalReference<jclass> classBooleanWrapper;                  // org.qore.jni.BooleanWrapper
Globals.h:    DLLLOCAL static jmethodID methodBooleanWrapperSetTrue;                        // setTrue()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classProperties;                      // java.util.Properties
Globals.h:    DLLLOCAL static jmethodID ctorProperties;                                     // Properties()
Globals.h:    DLLLOCAL static jmethodID methodPropertiesSetProperty;                        // Object setProperty(String, String)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classDriverManager;                   // java.sql.DriverManager
Globals.h:    DLLLOCAL static jmethodID methodDriverManagerGetConnection;                   // Connection getConnection(String, Properties)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classConnection;                      // java.sql.Connection
Globals.h:    DLLLOCAL static jmethodID methodConnectionClose;                              // void Connection.close()
Globals.h:    DLLLOCAL static jmethodID methodConnectionCommit;                             // void Connection.commit()
Globals.h:    DLLLOCAL static jmethodID methodConnectionRollback;                           // void Connection.rollback()
Globals.h:    DLLLOCAL static jmethodID methodConnectionCreateArrayOf;                      // Array createArrayOf(String, Object[])
Globals.h:    DLLLOCAL static jmethodID methodConnectionGetMetaData;                        // DatabaseMetaData getMetaData()
Globals.h:    DLLLOCAL static jmethodID methodConnectionPrepareStatement;                   // PreparedStatement prepareStatement(String)
Globals.h:    DLLLOCAL static jmethodID methodConnectionPrepareStatementArray;              // PreparedStatement prepareStatement(String, String[])
Globals.h:    DLLLOCAL static jmethodID methodConnectionSetAutoCommit;                      // void setAutoCommit(boolean)
Globals.h:    DLLLOCAL static jmethodID methodConnectionIsValid;                            // boolean isValid(int)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classDatabaseMetaData;                // java.sql.DatabaseMetaData
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDatabaseMajorVersion;      // int getDatabaseMajorVersion()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDatabaseMinorVersion;      // int getDatabaseMinorVersion()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDatabaseProductName;       // String getDatabaseProductName()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDatabaseProductVersion;    // String getDatabaseProductVersion()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDriverMajorVersion;        // int getDriverMajorVersion()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDriverMinorVersion;        // int getDriverMinorVersion()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDriverName;                // String getDriverName()
Globals.h:    DLLLOCAL static jmethodID methodDatabaseMetaDataGetDriverVersion;             // String getDriverVersion()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classPreparedStatement;               // java.sql.PreparedStatement
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementAddBatch;                    // void addBatch()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementClose;                       // void close()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementExecute;                     // boolean execute()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementExecuteBatch;                // int[] executeBatch()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementGetResultSet;                // ResultSet getResultSet()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementGetMoreResults;              // boolean getMoreResults()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementGetUpdateCount;              // int getUpdateCount()
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetArray;                    // void setArray(int, Array)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetBigDecimal;               // void setBigDecimal(int, BigDecimal)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetBoolean;                  // void setBoolean(int, boolean)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetByte;                     // void setByte(int, byte)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetBytes;                    // void setBytes(int, byte[])
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetDouble;                   // void setBoolean(int, double)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetInt;                      // void setInt(int, int)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetLong;                     // void setLong(int, long)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetShort;                    // void setShort(int, short)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetNull;                     // void setNull(int, int)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetString;                   // void setString(int, String)
Globals.h:    DLLLOCAL static jmethodID methodPreparedStatementSetTimestamp;                // void setTimestamp(int, Timestamp)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classTimestamp;                       // java.sql.Timestamp
Globals.h:    DLLLOCAL static jmethodID ctorTimestamp;                                      // Timestamp(long)
Globals.h:    DLLLOCAL static jmethodID methodTimestampSetNanos;                            // void setNanos(int)
Globals.h:    DLLLOCAL static jmethodID methodTimestampToString;                            // String toString()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classDate;                            // java.sql.Date
Globals.h:    DLLLOCAL static jmethodID methodDateToString;                                 // String toString()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classTime;                            // java.sql.Time
Globals.h:    DLLLOCAL static jmethodID methodTimeToString;                                 // String toString()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classResultSet;                       // java.sql.ResultSet
Globals.h:    DLLLOCAL static jmethodID methodResultSetClose;                               // void close()
Globals.h:    DLLLOCAL static jmethodID methodResultSetGetArray;                            // Array getArray(int)
Globals.h:    DLLLOCAL static jmethodID methodResultSetGetObject;                           // Object getObject(int)
Globals.h:    DLLLOCAL static jmethodID methodResultSetNext;                                // boolean next()
Globals.h:    DLLLOCAL static jmethodID methodResultSetGetMetaData;                         // ResultSetMetaData getMetaData()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classResultSetMetaData;               // java.sql.ResultSetMetadata
Globals.h:    DLLLOCAL static jmethodID methodResultSetMetaDataGetColumnClassName;          // String getColumnClassName()
Globals.h:    DLLLOCAL static jmethodID methodResultSetMetaDataGetColumnCount;              // int getColumnCount()
Globals.h:    DLLLOCAL static jmethodID methodResultSetMetaDataGetColumnLabel;              // String getColumnLabel(int)
Globals.h:    DLLLOCAL static jmethodID methodResultSetMetaDataGetColumnType;               // int getColumnType(int)
Globals.h:    DLLLOCAL static GlobalReference<jclass> classArray;                           // java.sql.Array
Globals.h:    DLLLOCAL static jmethodID methodArrayGetArray;                                // Object getArray()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classSQLException;                    // java.sql.SQLException
Globals.h:    DLLLOCAL static GlobalReference<jclass> classServiceLoader;                   // java.util.ServiceLoader
Globals.h:    DLLLOCAL static jmethodID methodServiceLoaderIterator;                        // Iterator iterator()
Globals.h:    DLLLOCAL static GlobalReference<jclass> classDriver;                          // java.sql.Driver
Globals.h:    DLLLOCAL static int typeNull; // java.sql.Type.NULL value
Globals.h:    DLLLOCAL static int typeChar; // java.sql.Type.CHAR value
Globals.h:    DLLLOCAL static GlobalReference<jstring> javaQoreClassField;
Globals.h:    DLLLOCAL static GlobalReference<jclass> getQoreJavaClassBase(Env& env, jobject classLoader);
Globals.h:    // returns true if this is a Java bootstrap init
Globals.h:    DLLLOCAL static bool init();
Globals.h:    DLLLOCAL static void cleanup();
Globals.h:    DLLLOCAL static Type getType(jclass cls);
Globals.h:    DLLLOCAL static jlong getContextProgram(jobject new_syscl, bool& created);
Globals.h:    DLLLOCAL static QoreProgram* createJavaContextProgram();
Globals.h:    DLLLOCAL static QoreProgram* getJavaContextProgram();
Globals.h:    DLLLOCAL static void clearGlobalContext() {
Globals.h:        if (qph) {
Globals.h:            qph.reset();
Globals.h:        }
Globals.h:    }
Globals.h:    DLLLOCAL static void setAlreadyInitialized() {
Globals.h:        assert(!already_initialized);
Globals.h:        already_initialized = true;
Globals.h:    }
Globals.h:    DLLLOCAL static bool getAlreadyInitialized() {
Globals.h:        return already_initialized;
Globals.h:    }
Globals.h:    // if already initialized, first tries to find the class, and then defines it only if not found, otherwise
Globals.h:    // defines the class
Globals.h:    DLLLOCAL static LocalReference<jclass> findDefineClass(Env& env, const char* name, jobject loader,
Globals.h:            const unsigned char* buf, jsize bufLen);
Globals.h:private:
Globals.h:    DLLLOCAL static ExceptionSink global_xsink;
Globals.h:    DLLLOCAL static std::unique_ptr<QoreProgramHelper> qph;
Globals.h:    DLLLOCAL static bool already_initialized;
Globals.h:    DLLLOCAL static void defineQoreURLClassLoader(Env& env);
Globals.h:};
Globals.h:class QoreJniStackLocationHelper : public QoreExternalRuntimeStackLocationHelper {
Globals.h:public:
Globals.h:    DLLLOCAL QoreJniStackLocationHelper();
Globals.h:    //! returns the name of the function or method call
Globals.h:    DLLLOCAL virtual const std::string& getCallName() const;
Globals.h:    //! returns the call type
Globals.h:    DLLLOCAL virtual qore_call_t getCallType() const;
Globals.h:    //! returns the source location of the element
Globals.h:    DLLLOCAL virtual const QoreProgramLocation& getLocation() const;
Globals.h:    //! returns the next location in the stack or nullptr if there is none
Globals.h:    DLLLOCAL virtual const QoreStackLocation* getNext() const;
Globals.h:private:
Globals.h:    int tid = q_gettid();
Globals.h:    mutable jsize current = 0;
Globals.h:    mutable std::vector<std::string> stack_call;
Globals.h:    mutable std::vector<bool> stack_native;
Globals.h:    mutable std::vector<QoreExternalProgramLocationWrapper> stack_loc;
Globals.h:    mutable bool init = false;
Globals.h:    DLLLOCAL static std::string jni_no_call_name;
Globals.h:    DLLLOCAL static QoreExternalProgramLocationWrapper jni_loc_builtin;
Globals.h:    DLLLOCAL size_t size() const {
Globals.h:        return stack_call.size();
Globals.h:    }
Globals.h:    DLLLOCAL void checkInit() const;
Globals.h:};
Globals.h:// find the root namespace for the given module in the given QoreProgram
Globals.h:DLLLOCAL const QoreNamespace* get_module_root_ns(const char* name, QoreProgram* mod_pgm);
Globals.h:// find a subnamespace with "::" delimited paths; returns nullptr if not found
Globals.h:DLLLOCAL const QoreNamespace* find_ns_path(const QoreNamespace* ns, const char* ns_path);
Globals.h:} // namespace jni
Globals.h:// callled from the QoireURLClassLoader's constructor when used as the system classloader
Globals.h:DLLLOCAL QoreStringNode* jni_module_init_finalize(bool system = false);
Globals.h:#endif // QORE_JNI_GLOBALS_H_
QoreJdbcStatement.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QoreJdbcStatement.h:/*
QoreJdbcStatement.h:    QoreJdbcStatement.h
QoreJdbcStatement.h:    Qore Programming Language JNI Module
QoreJdbcStatement.h:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcStatement.h:    This library is free software; you can redistribute it and/or
QoreJdbcStatement.h:    modify it under the terms of the GNU Lesser General Public
QoreJdbcStatement.h:    License as published by the Free Software Foundation; either
QoreJdbcStatement.h:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcStatement.h:    This library is distributed in the hope that it will be useful,
QoreJdbcStatement.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcStatement.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcStatement.h:    Lesser General Public License for more details.
QoreJdbcStatement.h:    You should have received a copy of the GNU Lesser General Public
QoreJdbcStatement.h:    License along with this library; if not, write to the Free Software
QoreJdbcStatement.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcStatement.h:*/
QoreJdbcStatement.h:#ifndef _QORE_JNI_QOREJDBCSTATEMENT_H
QoreJdbcStatement.h:#define _QORE_JNI_QOREJDBCSTATEMENT_H
QoreJdbcStatement.h:#include <qore/Qore.h>
QoreJdbcStatement.h:#include "QoreJdbcConnection.h"
QoreJdbcStatement.h:#include "Env.h"
QoreJdbcStatement.h:#include "GlobalReference.h"
QoreJdbcStatement.h:#include "LocalReference.h"
QoreJdbcStatement.h:#include <vector>
QoreJdbcStatement.h:#include <string>
QoreJdbcStatement.h:namespace jni {
QoreJdbcStatement.h:struct QoreJdbcColumn {
QoreJdbcStatement.h:    //! Column name in the DB
QoreJdbcStatement.h:    std::string name;
QoreJdbcStatement.h:    //! Column name in the output query
QoreJdbcStatement.h:    std::string qname;
QoreJdbcStatement.h:    //! Strip trailing spaces from string values retrieved (CHAR columns)
QoreJdbcStatement.h:    bool strip = false;
QoreJdbcStatement.h:    //! Constructor
QoreJdbcStatement.h:    DLLLOCAL QoreJdbcColumn(std::string&& name, std::string&& qname, jint ctype);
QoreJdbcStatement.h:};
QoreJdbcStatement.h:// column vector
QoreJdbcStatement.h:typedef std::vector<QoreJdbcColumn> cvec_t;
QoreJdbcStatement.h:class QoreJdbcStatement {
QoreJdbcStatement.h:public:
QoreJdbcStatement.h:    DLLLOCAL QoreJdbcStatement(ExceptionSink* xsink, QoreJdbcConnection* conn) : conn(conn), params(xsink) {
QoreJdbcStatement.h:    }
QoreJdbcStatement.h:    DLLLOCAL virtual ~QoreJdbcStatement();
QoreJdbcStatement.h:    DLLLOCAL bool exec(Env& env, ExceptionSink* xsink, const QoreString& qstr, const QoreListNode* args);
QoreJdbcStatement.h:    //! Return how many rows were affected by the executed statement.
QoreJdbcStatement.h:    /** @return count of affected rows; -1 in case the number is not available
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL int rowsAffected(Env& env);
QoreJdbcStatement.h:    DLLLOCAL bool next(Env& env);
QoreJdbcStatement.h:    //! Acquires the result set
QoreJdbcStatement.h:    DLLLOCAL int acquireResultSet(Env& env, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Get result hash
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @param empty_hash_if_nothing whether to return empty hash or empty hash with column names when no rows
QoreJdbcStatement.h:        available
QoreJdbcStatement.h:        @param max_rows maximum count of rows to return; if <= 0 the count of returned rows is not limited
QoreJdbcStatement.h:        @return hash of result column lists
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL QoreHashNode* getOutputHash(Env& env, ExceptionSink* xsink, bool empty_hash_if_nothing,
QoreJdbcStatement.h:            int max_rows = -1);
QoreJdbcStatement.h:    //! Get a reuslt list as a list of hashes
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @param max_rows maximum count of rows to return; if <= 0 the count of returned rows is not limited
QoreJdbcStatement.h:        @return list of row hashes
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL QoreListNode* getOutputList(Env& env, ExceptionSink* xsink, int max_rows = -1);
QoreJdbcStatement.h:    //! Get one result row as a hash
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return one result-set row
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL QoreHashNode* getSingleRow(Env& env, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Closes the statement
QoreJdbcStatement.h:    /**
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL void close(Env& env);
QoreJdbcStatement.h:protected:
QoreJdbcStatement.h:    //! Possible comment types; used in the parse() method
QoreJdbcStatement.h:    enum SQLCommentType {
QoreJdbcStatement.h:        ESCT_NONE = 0,
QoreJdbcStatement.h:        ESCT_LINE,
QoreJdbcStatement.h:        ESCT_BLOCK,
QoreJdbcStatement.h:    };
QoreJdbcStatement.h:    //! Connection
QoreJdbcStatement.h:    QoreJdbcConnection* conn;
QoreJdbcStatement.h:    //! PreparedStatement object
QoreJdbcStatement.h:    GlobalReference<jobject> stmt;
QoreJdbcStatement.h:    //! Count of bind parameters for the SQL command
QoreJdbcStatement.h:    size_t bind_size = 0;
QoreJdbcStatement.h:    //! The size of any array bind
QoreJdbcStatement.h:    size_t array_bind_size = 0;
QoreJdbcStatement.h:    //! Parameters to be used in the statement
QoreJdbcStatement.h:    ReferenceHolder<QoreListNode> params;
QoreJdbcStatement.h:    //! Column metadata from result sets
QoreJdbcStatement.h:    cvec_t cvec;
QoreJdbcStatement.h:    //! Any active result set
QoreJdbcStatement.h:    LocalReference<jobject> rs;
QoreJdbcStatement.h:    //! Batch execute flag
QoreJdbcStatement.h:    bool do_batch_execute = false;
QoreJdbcStatement.h:    DLLLOCAL void prepareAndBindStatement(Env& env, ExceptionSink* xsink, const QoreString& str);
QoreJdbcStatement.h:    DLLLOCAL void prepareStatement(Env& env, const QoreString& str);
QoreJdbcStatement.h:    //! Reset statement
QoreJdbcStatement.h:    /**
QoreJdbcStatement.h:        This function is called when the DB connection is lost while executing SQL so that
QoreJdbcStatement.h:        the current state can be freed while the driver-specific context data is still present
QoreJdbcStatement.h:        This call resets the query
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL void reset(Env& env);
QoreJdbcStatement.h:    //! Parse a Qore-style SQL statement
QoreJdbcStatement.h:    /** @param str Qore-style SQL statement
QoreJdbcStatement.h:        @param args SQL parameters
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return 0 for OK, -1 for error
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL int parse(QoreString* str, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcStatement.h:    DLLLOCAL int reconnectLostConnection(Env& env, ExceptionSink* xsink);
QoreJdbcStatement.h:    DLLLOCAL int bindQueryArguments(Env& env, ExceptionSink* xsink);
QoreJdbcStatement.h:    DLLLOCAL bool execIntern(Env& env, const QoreString& sql, ExceptionSink* xsink);
QoreJdbcStatement.h:#if 0
QoreJdbcStatement.h:    DLLLOCAL const char* getArrayBindType(const QoreListNode* l) const;
QoreJdbcStatement.h:    int bindInternArrayNative(Env& env, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcStatement.h:#endif
QoreJdbcStatement.h:    //! Return size of arrays in the passed arguments
QoreJdbcStatement.h:    /** @param args SQL parameters
QoreJdbcStatement.h:        @return parameter array size
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL size_t findArraySizeOfArgs(const QoreListNode* args) const;
QoreJdbcStatement.h:    //! Return whether the passed arguments have arrays
QoreJdbcStatement.h:    DLLLOCAL bool hasArrayBind() {
QoreJdbcStatement.h:        array_bind_size = findArraySizeOfArgs(*params);
QoreJdbcStatement.h:        return array_bind_size > 0;
QoreJdbcStatement.h:    }
QoreJdbcStatement.h:    //! Bind a single value argument
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param column JDBC column number, starting from 1
QoreJdbcStatement.h:        @param arg single value parameter
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return 0 for OK, -1 for error
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL int bindParamSingleValue(Env& env, int column, QoreValue arg, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Bind a single value argument as an array
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param column JDBC column number, starting from 1
QoreJdbcStatement.h:        @param arg single value parameter
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return 0 for OK, -1 for error
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL int bindParamArraySingleValue(Env& env, int column, QoreValue arg, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Bind a simple list of SQL parameters
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param args SQL parameters
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return 0 for OK, -1 for error
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL int bindIntern(Env& env, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Bind a list of arrays of SQL parameters
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param args SQL parameters
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return 0 for OK, -1 for error
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL int bindInternArray(Env& env, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcStatement.h:    int bindInternArrayBatch(Env& env, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Describe result set
QoreJdbcStatement.h:    DLLLOCAL int describeResultSet(Env& env, ExceptionSink* xsink);
QoreJdbcStatement.h:    DLLLOCAL void populateOutputHash(QoreHashNode& h, ExceptionSink* xsink);
QoreJdbcStatement.h:    DLLLOCAL QoreHashNode* getOutputHashIntern(Env& env, ExceptionSink* xsink, bool empty_hash_if_nothing,
QoreJdbcStatement.h:            int max_rows = -1);
QoreJdbcStatement.h:    DLLLOCAL QoreListNode* getOutputListIntern(Env& env, ExceptionSink* xsink, int max_rows = -1);
QoreJdbcStatement.h:    //! Get a column's value and return a Qore value for it
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param rs the ResultSet object
QoreJdbcStatement.h:        @param column column number
QoreJdbcStatement.h:        @param rcol result column metadata
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return result value
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL QoreValue getColumnValue(Env& env, int column, QoreJdbcColumn& col, ExceptionSink* xsink);
QoreJdbcStatement.h:    //! Get one result row as a hash
QoreJdbcStatement.h:    /** @param enc the JNI environment variable
QoreJdbcStatement.h:        @param xsink exception sink
QoreJdbcStatement.h:        @return one result-set row
QoreJdbcStatement.h:    */
QoreJdbcStatement.h:    DLLLOCAL QoreHashNode* getSingleRowIntern(Env& env, ExceptionSink* xsink);
QoreJdbcStatement.h:};
QoreJdbcStatement.h:class JavaExceptionRethrowHelper {
QoreJdbcStatement.h:public:
QoreJdbcStatement.h:    DLLLOCAL JavaExceptionRethrowHelper() {
QoreJdbcStatement.h:        if (ex = env->ExceptionOccurred()) {
QoreJdbcStatement.h:            env->ExceptionClear();
QoreJdbcStatement.h:        }
QoreJdbcStatement.h:    }
QoreJdbcStatement.h:    DLLLOCAL ~JavaExceptionRethrowHelper() {
QoreJdbcStatement.h:        if (ex) {
QoreJdbcStatement.h:            env->Throw(ex.release());
QoreJdbcStatement.h:        }
QoreJdbcStatement.h:    }
QoreJdbcStatement.h:private:
QoreJdbcStatement.h:    // not using the Env wrapper because we don't want any C++ exceptions here
QoreJdbcStatement.h:    JNIEnv* env = Jvm::getEnv();
QoreJdbcStatement.h:    LocalReference<jthrowable> ex;
QoreJdbcStatement.h:};
QoreJdbcStatement.h:}
QoreJdbcStatement.h:#endif
QoreJdbcDriver.cpp:/* -*- indent-tabs-mode: nil -*- */
QoreJdbcDriver.cpp:/*
QoreJdbcDriver.cpp:    QoreJdbcDriver.cpp
QoreJdbcDriver.cpp:    Qore Programming Language JNI Module
QoreJdbcDriver.cpp:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcDriver.cpp:    This library is free software; you can redistribute it and/or
QoreJdbcDriver.cpp:    modify it under the terms of the GNU Lesser General Public
QoreJdbcDriver.cpp:    License as published by the Free Software Foundation; either
QoreJdbcDriver.cpp:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcDriver.cpp:    This library is distributed in the hope that it will be useful,
QoreJdbcDriver.cpp:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcDriver.cpp:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcDriver.cpp:    Lesser General Public License for more details.
QoreJdbcDriver.cpp:    You should have received a copy of the GNU Lesser General Public
QoreJdbcDriver.cpp:    License along with this library; if not, write to the Free Software
QoreJdbcDriver.cpp:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcDriver.cpp:*/
QoreJdbcDriver.cpp:#include "QoreJdbcDriver.h"
QoreJdbcDriver.cpp:#include "QoreJdbcConnection.h"
QoreJdbcDriver.cpp:#include "QoreJdbcPreparedStatement.h"
QoreJdbcDriver.cpp:#include <memory>
QoreJdbcDriver.cpp:namespace jni {
QoreJdbcDriver.cpp:static constexpr int jdbc_caps = DBI_CAP_TRANSACTION_MANAGEMENT
QoreJdbcDriver.cpp:   | DBI_CAP_CHARSET_SUPPORT
QoreJdbcDriver.cpp:   | DBI_CAP_STORED_PROCEDURES
QoreJdbcDriver.cpp:   | DBI_CAP_LOB_SUPPORT
QoreJdbcDriver.cpp:   | DBI_CAP_BIND_BY_VALUE
QoreJdbcDriver.cpp:   | DBI_CAP_HAS_EXECRAW
QoreJdbcDriver.cpp:   | DBI_CAP_TIME_ZONE_SUPPORT
QoreJdbcDriver.cpp:   | DBI_CAP_HAS_NUMBER_SUPPORT
QoreJdbcDriver.cpp:   | DBI_CAP_SERVER_TIME_ZONE
QoreJdbcDriver.cpp:   | DBI_CAP_AUTORECONNECT
QoreJdbcDriver.cpp:;
QoreJdbcDriver.cpp:DBIDriver* DBID_JDBC = nullptr;
QoreJdbcDriver.cpp:static int jdbc_open(Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    std::unique_ptr<QoreJdbcConnection> conn(new QoreJdbcConnection(ds, xsink));
QoreJdbcDriver.cpp:    if (*xsink) {
QoreJdbcDriver.cpp:        return -1;
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    ds->setPrivateData((void*)conn.release());
QoreJdbcDriver.cpp:    return 0;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_close(Datasource* ds) {
QoreJdbcDriver.cpp:    std::unique_ptr<QoreJdbcConnection> conn(ds->getPrivateData<QoreJdbcConnection>());
QoreJdbcDriver.cpp:    ExceptionSink xsink;
QoreJdbcDriver.cpp:    try {
QoreJdbcDriver.cpp:        Env env;
QoreJdbcDriver.cpp:        conn->close(env);
QoreJdbcDriver.cpp:    } catch (JavaException& e) {
QoreJdbcDriver.cpp:        e.convert(&xsink);
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    int rc = xsink ? -1 : 0;
QoreJdbcDriver.cpp:    xsink.clear();
QoreJdbcDriver.cpp:    ds->setPrivateData(nullptr);
QoreJdbcDriver.cpp:    return rc;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_commit(Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->commit(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_rollback(Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->rollback(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_begin_transaction(Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    return 0;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_select(Datasource* ds, const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->select(qstr, args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreHashNode* jdbc_select_row(Datasource* ds, const QoreString* qstr, const QoreListNode* args,
QoreJdbcDriver.cpp:        ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->selectRow(qstr, args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_select_rows(Datasource* ds, const QoreString* qstr, const QoreListNode* args,
QoreJdbcDriver.cpp:        ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->selectRows(qstr, args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_exec(Datasource* ds, const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->exec(qstr, args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_exec_raw(Datasource* ds, const QoreString* qstr, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->execRaw(qstr, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_get_server_version(Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->getServerVersion(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_get_client_version(const Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    if (!conn) {
QoreJdbcDriver.cpp:        xsink->raiseException("JDBC-CONNECTION-ERROR", "there is no open connection; client info is provided by the "
QoreJdbcDriver.cpp:            "Java jdbc driver used for the DB connection by this Qore driver; please open a connection to the server "
QoreJdbcDriver.cpp:            "before calling this method");
QoreJdbcDriver.cpp:        return QoreValue();
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    return conn->getClientVersion(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreStringNode* jdbc_get_driver_real_name(Datasource* ds, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->getDriverRealName(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_prepare(SQLStatement* stmt, const QoreString& str, const QoreListNode* args,
QoreJdbcDriver.cpp:        ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    assert(!stmt->getPrivateData());
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = new QoreJdbcPreparedStatement(xsink,
QoreJdbcDriver.cpp:        stmt->getDatasource()->getPrivateData<QoreJdbcConnection>());
QoreJdbcDriver.cpp:    if (*xsink) {
QoreJdbcDriver.cpp:        delete ps;
QoreJdbcDriver.cpp:        return -1;
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    stmt->setPrivateData(ps);
QoreJdbcDriver.cpp:    return ps->prepare(str, args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_prepare_raw(SQLStatement* stmt, const QoreString& str, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    assert(!stmt->getPrivateData());
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = new QoreJdbcPreparedStatement(xsink,
QoreJdbcDriver.cpp:        stmt->getDatasource()->getPrivateData<QoreJdbcConnection>());
QoreJdbcDriver.cpp:    if (*xsink) {
QoreJdbcDriver.cpp:        delete ps;
QoreJdbcDriver.cpp:        return -1;
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    stmt->setPrivateData(ps);
QoreJdbcDriver.cpp:    return ps->prepare(str, nullptr, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_bind(SQLStatement* stmt, const QoreListNode& args, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->bind(args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_bind_placeholders(SQLStatement* stmt, const QoreListNode& args, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    xsink->raiseException("JDBC-BIND-PLACEHHODERS-ERROR", "binding placeholders is not necessary or supported with "
QoreJdbcDriver.cpp:        "the jdbc driver");
QoreJdbcDriver.cpp:    return -1;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_bind_values(SQLStatement* stmt, const QoreListNode& args, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->bind(args, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_exec(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->QoreJdbcPreparedStatement::exec(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_define(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    // define is a noop in the jdbc driver
QoreJdbcDriver.cpp:    return 0;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_affected_rows(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    try {
QoreJdbcDriver.cpp:        Env env;
QoreJdbcDriver.cpp:        return ps->rowsAffected(env);
QoreJdbcDriver.cpp:    } catch (JavaException& e) {
QoreJdbcDriver.cpp:        e.convert(xsink);
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    return -1;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreHashNode* jdbc_stmt_get_output(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->getOutputHash(xsink, false);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreHashNode* jdbc_stmt_get_output_rows(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->getOutputHash(xsink, false);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreHashNode* jdbc_stmt_fetch_row(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->fetchRow(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreListNode* jdbc_stmt_fetch_rows(SQLStatement* stmt, int maxRows, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->fetchRows(maxRows, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreHashNode* jdbc_stmt_fetch_columns(SQLStatement* stmt, int maxRows, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->fetchColumns(maxRows, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreHashNode* jdbc_stmt_describe(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    //return ps->describe(xsink);
QoreJdbcDriver.cpp:    return nullptr;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static bool jdbc_stmt_next(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    return ps->QoreJdbcPreparedStatement::next(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_free(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    // Free all handles without closing the statement or freeing private data
QoreJdbcDriver.cpp:    return ps->clear(xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_stmt_close(SQLStatement* stmt, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcPreparedStatement* ps = stmt->getPrivateData<QoreJdbcPreparedStatement>();
QoreJdbcDriver.cpp:    assert(ps);
QoreJdbcDriver.cpp:    try {
QoreJdbcDriver.cpp:        Env env;
QoreJdbcDriver.cpp:        ps->close(env);
QoreJdbcDriver.cpp:    } catch (JavaException& e) {
QoreJdbcDriver.cpp:        e.convert(xsink);
QoreJdbcDriver.cpp:    }
QoreJdbcDriver.cpp:    delete ps;
QoreJdbcDriver.cpp:    stmt->setPrivateData(nullptr);
QoreJdbcDriver.cpp:    return *xsink ? -1 : 0;
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static int jdbc_opt_set(Datasource* ds, const char* opt, const QoreValue val, ExceptionSink* xsink) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    assert(conn);
QoreJdbcDriver.cpp:    return conn->setOption(opt, val, xsink);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:static QoreValue jdbc_opt_get(const Datasource* ds, const char* opt) {
QoreJdbcDriver.cpp:    QoreJdbcConnection* conn = ds->getPrivateData<QoreJdbcConnection>();
QoreJdbcDriver.cpp:    return conn ? conn->getOption(opt) : QoreValue();
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:void setup_jdbc_driver() {
QoreJdbcDriver.cpp:    qore_dbi_method_list methods;
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_OPEN, jdbc_open);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_CLOSE, jdbc_close);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_COMMIT, jdbc_commit);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_ROLLBACK, jdbc_rollback);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_BEGIN_TRANSACTION, jdbc_begin_transaction);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_SELECT, jdbc_select);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_SELECT_ROWS, jdbc_select_rows);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_SELECT_ROW, jdbc_select_row);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_EXEC, jdbc_exec);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_EXECRAW, jdbc_exec_raw);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_GET_SERVER_VERSION, jdbc_get_server_version);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_GET_CLIENT_VERSION, jdbc_get_client_version);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_GET_DRIVER_REAL_NAME, jdbc_get_driver_real_name);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_PREPARE, jdbc_stmt_prepare);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_PREPARE_RAW, jdbc_stmt_prepare_raw);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_BIND, jdbc_stmt_bind);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_BIND_PLACEHOLDERS, jdbc_stmt_bind_placeholders);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_BIND_VALUES, jdbc_stmt_bind_values);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_EXEC, jdbc_stmt_exec);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_DEFINE, jdbc_stmt_define);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_FETCH_ROW, jdbc_stmt_fetch_row);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_FETCH_ROWS, jdbc_stmt_fetch_rows);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_FETCH_COLUMNS, jdbc_stmt_fetch_columns);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_DESCRIBE, jdbc_stmt_describe);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_NEXT, jdbc_stmt_next);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_FREE, jdbc_stmt_free);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_CLOSE, jdbc_stmt_close);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_AFFECTED_ROWS, jdbc_stmt_affected_rows);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_GET_OUTPUT, jdbc_stmt_get_output);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_STMT_GET_OUTPUT_ROWS, jdbc_stmt_get_output_rows);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_OPT_SET, jdbc_opt_set);
QoreJdbcDriver.cpp:    methods.add(QDBI_METHOD_OPT_GET, jdbc_opt_get);
QoreJdbcDriver.cpp:    methods.registerOption(DBI_OPT_NUMBER_OPT, "when set, numeric/decimal values are returned as integers if "
QoreJdbcDriver.cpp:        "possible, otherwise as arbitrary-precision number values; the argument is ignored; setting this option "
QoreJdbcDriver.cpp:        "turns it on and turns off 'string-numbers' and 'numeric-numbers'");
QoreJdbcDriver.cpp:    methods.registerOption(DBI_OPT_NUMBER_STRING, "when set, numeric/decimal values are returned as strings for "
QoreJdbcDriver.cpp:        "backwards-compatibility; the argument is ignored; setting this option turns it on and turns off "
QoreJdbcDriver.cpp:        "'optimal-numbers' and 'numeric-numbers'");
QoreJdbcDriver.cpp:    methods.registerOption(DBI_OPT_NUMBER_NUMERIC, "when set, numeric/decimal values are returned as "
QoreJdbcDriver.cpp:        "arbitrary-precision number values; the argument is ignored; setting this option turns it on and turns off "
QoreJdbcDriver.cpp:        "'string-numbers' and 'optimal-numbers'");
QoreJdbcDriver.cpp:    methods.registerOption(JDBC_OPT_CLASSPATH, "set the classpath before loading the driver", stringTypeInfo);
QoreJdbcDriver.cpp:    methods.registerOption(JDBC_OPT_URL, "override the database string with the jdbc driver URL", stringTypeInfo);
QoreJdbcDriver.cpp:    DBID_JDBC = DBI.registerDriver("jdbc", methods, jdbc_caps);
QoreJdbcDriver.cpp:}
QoreJdbcDriver.cpp:}
defs.cpp://--------------------------------------------------------------------*- C++ -*-
defs.cpp://
defs.cpp://  Qore Programming Language
defs.cpp://
defs.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
defs.cpp://
defs.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
defs.cpp://  copy of this software and associated documentation files (the "Software"),
defs.cpp://  to deal in the Software without restriction, including without limitation
defs.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
defs.cpp://  and/or sell copies of the Software, and to permit persons to whom the
defs.cpp://  Software is furnished to do so, subject to the following conditions:
defs.cpp://
defs.cpp://  The above copyright notice and this permission notice shall be included in
defs.cpp://  all copies or substantial portions of the Software.
defs.cpp://
defs.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
defs.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
defs.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
defs.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
defs.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
defs.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
defs.cpp://  DEALINGS IN THE SOFTWARE.
defs.cpp://
defs.cpp://------------------------------------------------------------------------------
defs.cpp:#include "defs.h"
defs.cpp:#include <qore/Qore.h>
defs.cpp:#include "Jvm.h"
defs.cpp:#include "LocalReference.h"
defs.cpp:#include "Globals.h"
defs.cpp:#include "QoreJniClassMap.h"
defs.cpp:#include "JavaToQore.h"
defs.cpp:namespace jni {
defs.cpp:static const char* this_file = q_basenameptr(__FILE__);
defs.cpp:thread_local QoreThreadAttacher qoreThreadAttacher;
defs.cpp:class JniCallStack : public QoreCallStack {
defs.cpp:public:
defs.cpp:    DLLLOCAL JniCallStack(jobject throwable, QoreExternalProgramLocationWrapper& loc) {
defs.cpp:        Env env;
defs.cpp:        try {
defs.cpp:            LocalReference<jobjectArray> jstack = env.callObjectMethod(throwable, Globals::methodThrowableGetStackTrace, nullptr).as<jobjectArray>();
defs.cpp:            if (jstack) {
defs.cpp:                QoreString code;
defs.cpp:                for (jsize i = 0, e = env.getArrayLength(jstack); i < e; ++i) {
defs.cpp:                    LocalReference<jobject> jste = env.getObjectArrayElement(jstack, i);
defs.cpp:                    LocalReference<jstring> jcls = env.callObjectMethod(jste, Globals::methodStackTraceElementGetClassName, nullptr).as<jstring>();
defs.cpp:                    jni::Env::GetStringUtfChars cname(env, jcls);
defs.cpp:                    LocalReference<jstring> jmethod = env.callObjectMethod(jste, Globals::methodStackTraceElementGetMethodName, nullptr).as<jstring>();
defs.cpp:                    jni::Env::GetStringUtfChars mname(env, jmethod);
defs.cpp:                    LocalReference<jstring> jfilename = env.callObjectMethod(jste, Globals::methodStackTraceElementGetFileName, nullptr).as<jstring>();
defs.cpp:                    jni::Env::GetStringUtfChars file(env, jfilename);
defs.cpp:                    jint line = env.callIntMethod(jste, Globals::methodStackTraceElementGetLineNumber, nullptr);
defs.cpp:                    jboolean native = env.callBooleanMethod(jste, Globals::methodStackTraceElementIsNativeMethod, nullptr);
defs.cpp:                    printd(LogLevel, "JniCallStack::JniCallStack() adding %s\n", code.c_str());
defs.cpp:                    if (!i) {
defs.cpp:                        loc.set(file.c_str(), line, line, nullptr, 0, "Java");
defs.cpp:                    } else {
defs.cpp:                        add(native ? CT_BUILTIN : CT_USER, file.c_str(), line, line, code.c_str(), "Java");
defs.cpp:                    }
defs.cpp:                    code.clear();
defs.cpp:                    code.sprintf("%s.%s", cname.c_str(), mname.c_str());
defs.cpp:                }
defs.cpp:                if (!code.empty()) {
defs.cpp:                    add(CT_BUILTIN, this_file, __LINE__, __LINE__, code.c_str(), "c++");
defs.cpp:                }
defs.cpp:            }
defs.cpp:        } catch (jni::Exception& e) {
defs.cpp:            e.ignore();
defs.cpp:        }
defs.cpp:    }
defs.cpp:};
defs.cpp:void JavaException::ignore() {
defs.cpp:    // not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    JNIEnv* env = Jvm::getEnv();
defs.cpp:    LocalReference<jthrowable> throwable = env->ExceptionOccurred();
defs.cpp:    assert(throwable != nullptr);
defs.cpp:    env->ExceptionClear();
defs.cpp:}
defs.cpp:jthrowable JavaException::save() {
defs.cpp:    // not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    JNIEnv* env = Jvm::getEnv();
defs.cpp:    LocalReference<jthrowable> throwable = env->ExceptionOccurred();
defs.cpp:    assert(throwable != nullptr);
defs.cpp:    env->ExceptionClear();
defs.cpp:    return throwable.release();
defs.cpp:}
defs.cpp:void JavaException::restore(jthrowable je) {
defs.cpp:    // not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    JNIEnv* env = Jvm::getEnv();
defs.cpp:    env->Throw(je);
defs.cpp:}
defs.cpp:QoreStringNode* JavaException::toString(bool clear) const {
defs.cpp:    JNIEnv* env = Jvm::getEnv();         //not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    LocalReference<jthrowable> throwable = env->ExceptionOccurred();
defs.cpp:    assert(throwable != nullptr);
defs.cpp:    if (clear) {
defs.cpp:        env->ExceptionClear();
defs.cpp:    }
defs.cpp:    if (env->IsInstanceOf(throwable, Globals::classQoreExceptionWrapper)) {
defs.cpp:        jlong l = env->CallLongMethod(throwable, Globals::methodQoreExceptionWrapperGet);
defs.cpp:        if (l != 0) {
defs.cpp:            ExceptionSink *src = reinterpret_cast<ExceptionSink*>(l);
defs.cpp:            QoreValue err = src->getExceptionErr();
defs.cpp:            QoreValue desc = src->getExceptionDesc();
defs.cpp:            QoreValue arg = src->getExceptionArg();
defs.cpp:            QoreStringNodeValueHelper terr(err);
defs.cpp:            QoreStringNodeValueHelper tdesc(desc);
defs.cpp:            SimpleRefHolder<QoreStringNode> rv(new QoreStringNodeMaker("%s: %s", terr->c_str(), tdesc->c_str()));
defs.cpp:            if (arg) {
defs.cpp:                QoreStringNodeValueHelper targ(arg);
defs.cpp:                rv->sprintf(" arg: %s", targ->c_str());
defs.cpp:            }
defs.cpp:            src->clear();
defs.cpp:            return rv.release();
defs.cpp:        }
defs.cpp:        //if l is zero, it means that the xsink wrapped in QoreExceptionWrapper has already been consumed. This should
defs.cpp:        //not happen, but if it does, we simply report the QoreExceptionWrapper as if it were a normal Java exception
defs.cpp:    }
defs.cpp:    SimpleRefHolder<QoreStringNode> desc(new QoreStringNode(QCS_UTF8));
defs.cpp:    while (true) {
defs.cpp:        LocalReference<jstring> excName = static_cast<jstring>(env->CallObjectMethod(env->GetObjectClass(throwable),
defs.cpp:            Globals::methodClassGetName));
defs.cpp:        if (clear && env->ExceptionCheck()) {
defs.cpp:            env->ExceptionClear();
defs.cpp:            return new QoreStringNode("Unable to get exception class name: another exception thrown");
defs.cpp:        }
defs.cpp:        const char* chars = env->GetStringUTFChars(excName, nullptr);
defs.cpp:        if (!chars) {
defs.cpp:            env->ExceptionClear();
defs.cpp:            return new QoreStringNode("Unable to get exception class name: GetStringUTFChars() failed");
defs.cpp:        }
defs.cpp:        //printd(5, "chars: %s\n", chars);
defs.cpp:        if (!desc->empty()) {
defs.cpp:            desc->concat(": ");
defs.cpp:        }
defs.cpp:        desc->concat(chars);
defs.cpp:        env->ReleaseStringUTFChars(excName, chars);
defs.cpp:        LocalReference<jstring> msg = static_cast<jstring>(env->CallObjectMethod(throwable, Globals::methodThrowableGetMessage));
defs.cpp:        //printd(5, "msg: %p\n", (jstring)msg);
defs.cpp:        if (clear && env->ExceptionCheck()) {
defs.cpp:            env->ExceptionClear();
defs.cpp:        } else if (msg != nullptr) {
defs.cpp:            desc->concat(": ");
defs.cpp:            chars = env->GetStringUTFChars(msg, nullptr);
defs.cpp:            if (!chars) {
defs.cpp:                env->ExceptionClear();
defs.cpp:            } else {
defs.cpp:                desc->concat(chars);
defs.cpp:                env->ReleaseStringUTFChars(msg, chars);
defs.cpp:            }
defs.cpp:        }
defs.cpp:        /*
defs.cpp:        jmethodID methodThrowablePrintStackTrace = env->GetMethodID(Globals::classThrowable, "printStackTrace", "()V");
defs.cpp:        env->CallVoidMethod(throwable, methodThrowablePrintStackTrace);
defs.cpp:        */
defs.cpp:        LocalReference<jthrowable> cause = static_cast<jthrowable>(env->CallObjectMethod(throwable,
defs.cpp:            Globals::methodThrowableGetCause));
defs.cpp:        //printd(5, "cause: %p\n", (jthrowable)cause);
defs.cpp:        if (!cause) {
defs.cpp:            break;
defs.cpp:        }
defs.cpp:        throwable = cause.release();
defs.cpp:    }
defs.cpp:    return desc.release();
defs.cpp:}
defs.cpp:void JavaException::convert(ExceptionSink* xsink) {
defs.cpp:    JNIEnv* env = Jvm::getEnv();         //not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    LocalReference<jthrowable> throwable = env->ExceptionOccurred();
defs.cpp:    assert(throwable != nullptr);
defs.cpp:    env->ExceptionClear();
defs.cpp:    if (env->IsInstanceOf(throwable, Globals::classQoreExceptionWrapper)) {
defs.cpp:        jlong l = env->CallLongMethod(throwable, Globals::methodQoreExceptionWrapperGet);
defs.cpp:        if (l != 0) {
defs.cpp:            ExceptionSink* src = reinterpret_cast<ExceptionSink *>(l);
defs.cpp:            xsink->assimilate(src);
defs.cpp:            return;
defs.cpp:        }
defs.cpp:        //if l is zero, it means that the xsink wrapped in QoreExceptionWrapper has already been consumed. This should
defs.cpp:        //not happen, but if it does, we simply report the QoreExceptionWrapper as if it was a normal Java exception
defs.cpp:    }
defs.cpp:    if (env->IsInstanceOf(throwable, Globals::classQoreException)) {
defs.cpp:        LocalReference<jstring> err = static_cast<jstring>(env->CallObjectMethod(throwable,
defs.cpp:            Globals::methodQoreExceptionGetErr));
defs.cpp:        LocalReference<jstring> desc = static_cast<jstring>(env->CallObjectMethod(throwable,
defs.cpp:            Globals::methodQoreExceptionGetDesc));
defs.cpp:        LocalReference<jobject> arg = static_cast<jstring>(env->CallObjectMethod(throwable,
defs.cpp:            Globals::methodQoreExceptionGetArg));
defs.cpp:        const char* err_str = env->GetStringUTFChars(err, nullptr);
defs.cpp:        const char* desc_str = desc ? env->GetStringUTFChars(desc, nullptr) : "";
defs.cpp:        QoreValue qore_arg;
defs.cpp:        if (arg) {
defs.cpp:            qore_arg = JavaToQore::convertToQore(arg.release(), jni_get_program_context(), false);
defs.cpp:        }
defs.cpp:        QoreExternalProgramLocationWrapper loc;
defs.cpp:        JniCallStack callstack(throwable, loc);
defs.cpp:        xsink->raiseExceptionArg(loc.get(), err_str, qore_arg, new QoreStringNode(desc_str), callstack);
defs.cpp:        return;
defs.cpp:    }
defs.cpp:    LocalReference<jstring> excName = static_cast<jstring>(env->CallObjectMethod(env->GetObjectClass(throwable),
defs.cpp:        Globals::methodClassGetName));
defs.cpp:    if (env->ExceptionCheck()) {
defs.cpp:        env->ExceptionClear();
defs.cpp:        xsink->raiseException("JNI-ERROR", "Unable to get exception class name - another exception thrown");
defs.cpp:        return;
defs.cpp:    }
defs.cpp:    const char* chars = env->GetStringUTFChars(excName, nullptr);
defs.cpp:    if (!chars) {
defs.cpp:        env->ExceptionClear();
defs.cpp:        xsink->raiseException("JNI-ERROR", "Unable to get exception class name - GetStringUTFChars() failed");
defs.cpp:        return;
defs.cpp:    }
defs.cpp:    SimpleRefHolder<QoreStringNode> desc(new QoreStringNode(chars, QCS_UTF8));
defs.cpp:    env->ReleaseStringUTFChars(excName, chars);
defs.cpp:    LocalReference<jstring> msg = static_cast<jstring>(env->CallObjectMethod(throwable,
defs.cpp:        Globals::methodThrowableGetMessage));
defs.cpp:    if (env->ExceptionCheck()) {
defs.cpp:        env->ExceptionClear();
defs.cpp:    } else if (msg != nullptr) {
defs.cpp:        desc->concat(": ");
defs.cpp:        chars = env->GetStringUTFChars(msg, nullptr);
defs.cpp:        if (!chars) {
defs.cpp:            env->ExceptionClear();
defs.cpp:        } else {
defs.cpp:            desc->concat(chars);
defs.cpp:            env->ReleaseStringUTFChars(msg, chars);
defs.cpp:        }
defs.cpp:    }
defs.cpp:    QoreProgram* pgm = nullptr;
defs.cpp:    jni_get_context_unconditional(pgm);
defs.cpp:    // add Java call stack to Qore call stack
defs.cpp:    QoreExternalProgramLocationWrapper loc;
defs.cpp:    JniCallStack stack(throwable, loc);
defs.cpp:    LocalReference<jclass> tcls(env->GetObjectClass(throwable));
defs.cpp:    {
defs.cpp:        Env jenv(env);
defs.cpp:        QoreClass* qc;
defs.cpp:        try {
defs.cpp:            qc = qjcm.findCreateQoreClass(jenv, tcls, pgm);
defs.cpp:            xsink->raiseExceptionArg(loc.get(), "JNI-ERROR", new QoreObject(qc, pgm,
defs.cpp:                new QoreJniPrivateData(throwable.as<jobject>())), desc.release(), stack);
defs.cpp:        } catch (jni::Exception& e) {
defs.cpp:            xsink->raiseExceptionArg(loc.get(), "JNI-ERROR", QoreValue(), desc.release());
defs.cpp:        }
defs.cpp:    }
defs.cpp:}
defs.cpp:void JavaException::ignoreOrRethrowNoClass() {
defs.cpp:    JNIEnv* env = Jvm::getEnv();         //not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    LocalReference<jthrowable> throwable = env->ExceptionOccurred();
defs.cpp:    assert(throwable != nullptr);
defs.cpp:    env->ExceptionClear();
defs.cpp:    // to show an unhandled exception on the console
defs.cpp:    ExceptionSink xsink;
defs.cpp:    if (env->IsInstanceOf(throwable, Globals::classQoreExceptionWrapper)) {
defs.cpp:        jlong l = env->CallLongMethod(throwable, Globals::methodQoreExceptionWrapperGet);
defs.cpp:        if (l != 0) {
defs.cpp:            ExceptionSink *src = reinterpret_cast<ExceptionSink *>(l);
defs.cpp:            xsink.assimilate(src);
defs.cpp:            return;
defs.cpp:        }
defs.cpp:        //if l is zero, it means that the xsink wrapped in QoreExceptionWrapper has already been consumed. This should
defs.cpp:        //not happen, but if it does, we simply report the QoreExceptionWrapper as if it was normal Java exception
defs.cpp:    }
defs.cpp:    LocalReference<jstring> excName = static_cast<jstring>(env->CallObjectMethod(env->GetObjectClass(throwable), Globals::methodClassGetName));
defs.cpp:    if (env->ExceptionCheck()) {
defs.cpp:        env->ExceptionClear();
defs.cpp:        xsink.raiseException("JNI-ERROR", "Unable to get exception class name: another exception thrown");
defs.cpp:        return;
defs.cpp:    }
defs.cpp:    const char* chars = env->GetStringUTFChars(excName, nullptr);
defs.cpp:    if (!chars) {
defs.cpp:        env->ExceptionClear();
defs.cpp:        xsink.raiseException("JNI-ERROR", "Unable to get exception class name: GetStringUTFChars() failed");
defs.cpp:        return;
defs.cpp:    }
defs.cpp:    // return if this is the exception we should ignore
defs.cpp:    if (!strcmp(chars, "java.lang.ClassNotFoundException")
defs.cpp:        || !strcmp(chars, "java.lang.NoClassDefFoundError"))
defs.cpp:        return;
defs.cpp:    SimpleRefHolder<QoreStringNode> desc(new QoreStringNode(chars, QCS_UTF8));
defs.cpp:    env->ReleaseStringUTFChars(excName, chars);
defs.cpp:    LocalReference<jstring> msg = static_cast<jstring>(env->CallObjectMethod(throwable, Globals::methodThrowableGetMessage));
defs.cpp:    if (env->ExceptionCheck()) {
defs.cpp:        env->ExceptionClear();
defs.cpp:    } else if (msg != nullptr) {
defs.cpp:        desc->concat(": ");
defs.cpp:        chars = env->GetStringUTFChars(msg, nullptr);
defs.cpp:        if (!chars) {
defs.cpp:            env->ExceptionClear();
defs.cpp:        } else {
defs.cpp:            desc->concat(chars);
defs.cpp:            env->ReleaseStringUTFChars(msg, chars);
defs.cpp:        }
defs.cpp:    }
defs.cpp:    // add Java call stack to Qore call stack
defs.cpp:    QoreExternalProgramLocationWrapper loc;
defs.cpp:    JniCallStack stack(throwable, loc);
defs.cpp:    xsink.raiseExceptionArg(loc.get(), "JNI-ERROR", new QoreObject(QC_THROWABLE, getProgram(), new QoreJniPrivateData(throwable.as<jobject>())), desc.release(), stack);
defs.cpp:}
defs.cpp:// workaround for https://bugs.openjdk.java.net/browse/JDK-8221530
defs.cpp:bool JavaException::checkBug_8221530() {
defs.cpp:    JNIEnv* env = Jvm::getEnv();         //not using the Env wrapper because we don't want any C++ exceptions here
defs.cpp:    LocalReference<jthrowable> throwable = save();
defs.cpp:    assert(throwable);
defs.cpp:    LocalReference<jstring> excName = static_cast<jstring>(env->CallObjectMethod(env->GetObjectClass(throwable), Globals::methodClassGetName));
defs.cpp:    if (env->ExceptionCheck()) {
defs.cpp:        // Unable to get exception class name: another exception thrown
defs.cpp:        env->ExceptionClear();
defs.cpp:        restore(throwable.release());
defs.cpp:        return true;
defs.cpp:    }
defs.cpp:    const char* chars = env->GetStringUTFChars(excName, nullptr);
defs.cpp:    if (!chars) {
defs.cpp:        // Unable to get exception class name: GetStringUTFChars() failed
defs.cpp:        env->ExceptionClear();
defs.cpp:        restore(throwable.release());
defs.cpp:        return true;
defs.cpp:    }
defs.cpp:    // return if this is the exception we should ignore
defs.cpp:    if (strcmp(chars, "java.lang.NullPointerException")) {
defs.cpp:        restore(throwable.release());
defs.cpp:        return true;
defs.cpp:    }
defs.cpp:    // check if the exception happened in AccessibleObject
defs.cpp:    QoreExternalProgramLocationWrapper loc;
defs.cpp:    JniCallStack callstack(throwable, loc);
defs.cpp:    // check that the last element in the callstack (i.e. the first call) is a call to
defs.cpp:    // "java.lang.reflect.*.setAccessible()"
defs.cpp:    if (callstack.empty()) {
defs.cpp:        restore(throwable.release());
defs.cpp:        return true;
defs.cpp:    }
defs.cpp:    const std::string& code = callstack.back().code;
defs.cpp:    size_t i = code.find("java.lang.reflect");
defs.cpp:    if (i != 0) {
defs.cpp:        restore(throwable.release());
defs.cpp:        return true;
defs.cpp:    }
defs.cpp:    i = code.find("setAccessible");
defs.cpp:    if (i != code.size() - 13) {
defs.cpp:        restore(throwable.release());
defs.cpp:        return true;
defs.cpp:    }
defs.cpp:    return false;
defs.cpp:}
defs.cpp:} // namespace jni
GlobalReference.cpp://--------------------------------------------------------------------*- C++ -*-
GlobalReference.cpp://
GlobalReference.cpp://  Qore Programming Language
GlobalReference.cpp://
GlobalReference.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
GlobalReference.cpp://
GlobalReference.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
GlobalReference.cpp://  copy of this software and associated documentation files (the "Software"),
GlobalReference.cpp://  to deal in the Software without restriction, including without limitation
GlobalReference.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
GlobalReference.cpp://  and/or sell copies of the Software, and to permit persons to whom the
GlobalReference.cpp://  Software is furnished to do so, subject to the following conditions:
GlobalReference.cpp://
GlobalReference.cpp://  The above copyright notice and this permission notice shall be included in
GlobalReference.cpp://  all copies or substantial portions of the Software.
GlobalReference.cpp://
GlobalReference.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
GlobalReference.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
GlobalReference.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
GlobalReference.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
GlobalReference.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
GlobalReference.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
GlobalReference.cpp://  DEALINGS IN THE SOFTWARE.
GlobalReference.cpp://
GlobalReference.cpp://------------------------------------------------------------------------------
GlobalReference.cpp:#include "GlobalReference.h"
GlobalReference.cpp:#include "LocalReference.h"
GlobalReference.cpp:namespace jni {
GlobalReference.cpp:template<>
GlobalReference.cpp:jobject GlobalReference<jobject>::toLocal() const {
GlobalReference.cpp:   jobject local = Jvm::getEnv()->NewLocalRef(ref);
GlobalReference.cpp:   if (local == nullptr)
GlobalReference.cpp:      throw JavaException();
GlobalReference.cpp:   return local;
GlobalReference.cpp:}
GlobalReference.cpp:template<>
GlobalReference.cpp:jclass GlobalReference<jclass>::toLocal() const {
GlobalReference.cpp:   jclass local = static_cast<jclass>(Jvm::getEnv()->NewLocalRef(ref));
GlobalReference.cpp:   if (local == nullptr)
GlobalReference.cpp:      throw JavaException();
GlobalReference.cpp:   return local;
GlobalReference.cpp:}
GlobalReference.cpp:}
GlobalReference.h://--------------------------------------------------------------------*- C++ -*-
GlobalReference.h://
GlobalReference.h://  Qore Programming Language
GlobalReference.h://
GlobalReference.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
GlobalReference.h://
GlobalReference.h://  Permission is hereby granted, free of charge, to any person obtaining a
GlobalReference.h://  copy of this software and associated documentation files (the "Software"),
GlobalReference.h://  to deal in the Software without restriction, including without limitation
GlobalReference.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
GlobalReference.h://  and/or sell copies of the Software, and to permit persons to whom the
GlobalReference.h://  Software is furnished to do so, subject to the following conditions:
GlobalReference.h://
GlobalReference.h://  The above copyright notice and this permission notice shall be included in
GlobalReference.h://  all copies or substantial portions of the Software.
GlobalReference.h://
GlobalReference.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
GlobalReference.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
GlobalReference.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
GlobalReference.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
GlobalReference.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
GlobalReference.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
GlobalReference.h://  DEALINGS IN THE SOFTWARE.
GlobalReference.h://
GlobalReference.h://------------------------------------------------------------------------------
GlobalReference.h:///
GlobalReference.h:/// \file
GlobalReference.h:/// \brief Defines the GlobalReference helper class template
GlobalReference.h:///
GlobalReference.h://------------------------------------------------------------------------------
GlobalReference.h:#ifndef QORE_JNI_GLOBALREFERENCE_H_
GlobalReference.h:#define QORE_JNI_GLOBALREFERENCE_H_
GlobalReference.h:#include <qore/Qore.h>
GlobalReference.h:#include "Jvm.h"
GlobalReference.h:#include "defs.h"
GlobalReference.h:namespace jni {
GlobalReference.h:template<typename T>
GlobalReference.h:class LocalReference;
GlobalReference.h:/**
GlobalReference.h: * \brief A RAII wrapper for JNI's global references.
GlobalReference.h: *
GlobalReference.h: * Destructor attempts to attach the current thread to the JVM - if it is not possible, the reference leaks.
GlobalReference.h: * \tparam T the type of the reference (jobject, jclass etc.)
GlobalReference.h: */
GlobalReference.h:template<typename T>
GlobalReference.h:class GlobalReference {
GlobalReference.h:public:
GlobalReference.h:    /**
GlobalReference.h:     * \brief Creates an instance.
GlobalReference.h:     * \param ref the global reference
GlobalReference.h:     */
GlobalReference.h:    GlobalReference(T ref = nullptr) : ref(ref) {
GlobalReference.h:        assert(ref == nullptr || Jvm::getEnv()->GetObjectRefType(ref) == JNIGlobalRefType);
GlobalReference.h:        if (ref != nullptr) {
GlobalReference.h:            printd(LogLevel + 1, "GlobalReference created: %p\n", ref);
GlobalReference.h:        }
GlobalReference.h:    }
GlobalReference.h:    /**
GlobalReference.h:     * \brief Destroys the global reference represented by this instance.
GlobalReference.h:     */
GlobalReference.h:    ~GlobalReference() {
GlobalReference.h:        del();
GlobalReference.h:    }
GlobalReference.h:    /**
GlobalReference.h:     * \brief Move constructor.
GlobalReference.h:     * \param src the source global reference wrapper
GlobalReference.h:     */
GlobalReference.h:    GlobalReference(GlobalReference &&src) : ref(src.ref) {
GlobalReference.h:        src.ref = nullptr;
GlobalReference.h:    }
GlobalReference.h:    /**
GlobalReference.h:     * \brief Move assignment.
GlobalReference.h:     * \param src the source global reference wrapper
GlobalReference.h:     * \return *this
GlobalReference.h:     */
GlobalReference.h:    GlobalReference &operator=(GlobalReference &&src) {
GlobalReference.h:        del();
GlobalReference.h:        ref = src.ref;
GlobalReference.h:        src.ref = nullptr;
GlobalReference.h:        return *this;
GlobalReference.h:    }
GlobalReference.h:    /**
GlobalReference.h:     * \brief Implicit conversion to the reference type.
GlobalReference.h:     */
GlobalReference.h:    operator T() const {
GlobalReference.h:        return ref;
GlobalReference.h:    }
GlobalReference.h:    template<typename T2>
GlobalReference.h:    T2 cast() const {
GlobalReference.h:        return static_cast<T2>(ref);
GlobalReference.h:    }
GlobalReference.h:    /**
GlobalReference.h:     * \brief Creates a global reference from a local reference.
GlobalReference.h:     * \param ref the local reference
GlobalReference.h:     * \return global reference
GlobalReference.h:     */
GlobalReference.h:    static GlobalReference<T> fromLocal(T ref) {
GlobalReference.h:        assert(ref != nullptr);
GlobalReference.h:        T global = static_cast<T>(Jvm::getEnv()->NewGlobalRef(ref));
GlobalReference.h:        if (global == nullptr) {
GlobalReference.h:            throw JavaException();
GlobalReference.h:        }
GlobalReference.h:        return global;
GlobalReference.h:    }
GlobalReference.h:    /**
GlobalReference.h:     * \brief Returns a local reference from the global reference
GlobalReference.h:     * \return the local reference
GlobalReference.h:     */
GlobalReference.h:    DLLLOCAL T toLocal() const;
GlobalReference.h:private:
GlobalReference.h:    GlobalReference(const GlobalReference &) = delete;
GlobalReference.h:    GlobalReference &operator=(const GlobalReference &) = delete;
GlobalReference.h:    void del() {
GlobalReference.h:        if (ref != nullptr) {
GlobalReference.h:            try {
GlobalReference.h:                printd(LogLevel + 1, "GlobalReference deleted: %p\n", ref);
GlobalReference.h:                Jvm::attachAndGetEnv()->DeleteGlobalRef(ref);
GlobalReference.h:            } catch (Exception& e) {
GlobalReference.h:                printd(LogLevel, "Unable to delete GlobalReference");
GlobalReference.h:            }
GlobalReference.h:        }
GlobalReference.h:    }
GlobalReference.h:private:
GlobalReference.h:    T ref;
GlobalReference.h:};
GlobalReference.h:} // namespace jni
GlobalReference.h:#endif // QORE_JNI_GLOBALREFERENCE_H_
Env.h://--------------------------------------------------------------------*- C++ -*-
Env.h://
Env.h://  Qore Programming Language
Env.h://
Env.h://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
Env.h://
Env.h://  Permission is hereby granted, free of charge, to any person obtaining a
Env.h://  copy of this software and associated documentation files (the "Software"),
Env.h://  to deal in the Software without restriction, including without limitation
Env.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Env.h://  and/or sell copies of the Software, and to permit persons to whom the
Env.h://  Software is furnished to do so, subject to the following conditions:
Env.h://
Env.h://  The above copyright notice and this permission notice shall be included in
Env.h://  all copies or substantial portions of the Software.
Env.h://
Env.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Env.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Env.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Env.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Env.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Env.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Env.h://  DEALINGS IN THE SOFTWARE.
Env.h://
Env.h://------------------------------------------------------------------------------
Env.h:///
Env.h:/// \file
Env.h:/// \brief Defines the Env class.
Env.h:///
Env.h://------------------------------------------------------------------------------
Env.h:#ifndef QORE_JNI_ENV_H_
Env.h:#define QORE_JNI_ENV_H_
Env.h:#include "Jvm.h"
Env.h:#include "LocalReference.h"
Env.h:namespace jni {
Env.h:/**
Env.h: * \brief Provides access to JNI functions.
Env.h: *
Env.h: * Wraps JNI references to RAII objects and uses C++ exceptions for error reporting.
Env.h: */
Env.h:class Env {
Env.h:public:
Env.h:    /**
Env.h:     * \brief Default constructor. Attaches current thread to the JVM.
Env.h:     * \param set_context set the classloader context
Env.h:     * \throws UnableToAttachException if the thread cannot be attached to the JVM
Env.h:     */
Env.h:    DLLLOCAL Env(bool set_context = true);
Env.h:    /**
Env.h:     * \brief Constructor.
Env.h:     * \param env the Env object associated with this thread
Env.h:     */
Env.h:    DLLLOCAL Env(JNIEnv *env) : env(env) {
Env.h:        Jvm::setEnv(env);
Env.h:    }
Env.h:    DLLLOCAL JNIEnv* operator*() {
Env.h:        return env;
Env.h:    }
Env.h:   /**
Env.h:    * \brief Returns the major version number in the higher 16 bits and the minor version number in the lower 16 bits.
Env.h:    * \return the major version number in the higher 16 bits and the minor version number in the lower 16 bits
Env.h:    */
Env.h:   DLLLOCAL jint getVersion() {
Env.h:      return env->GetVersion();
Env.h:   }
Env.h:   /**
Env.h:    * \brief Finds a class with given name.
Env.h:    * \param name fully-qualified class name or an array type signature
Env.h:    * \return a local reference to the class object
Env.h:    * \throws JavaException if the class cannot be found
Env.h:    */
Env.h:   DLLLOCAL LocalReference<jclass> findClass(const char* name) {
Env.h:      jclass c = env->FindClass(name);
Env.h:      if (c == nullptr) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return c;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Finds a field in a class.
Env.h:    * \param cls the class
Env.h:    * \param name the name of the field
Env.h:    * \param descriptor the field descriptor
Env.h:    * \return field id
Env.h:    * \throws JavaException if the field cannot be found
Env.h:    */
Env.h:   DLLLOCAL jfieldID getField(jclass cls, const char* name, const char* descriptor) {
Env.h:      jfieldID id = env->GetFieldID(cls, name, descriptor);
Env.h:      if (id == nullptr) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return id;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Finds a static field in a class.
Env.h:    * \param cls the class
Env.h:    * \param name the name of the field
Env.h:    * \param descriptor the field descriptor
Env.h:    * \return field id
Env.h:    * \throws JavaException if the field cannot be found
Env.h:    */
Env.h:   DLLLOCAL jfieldID getStaticField(jclass cls, const char* name, const char* descriptor) {
Env.h:      jfieldID id = env->GetStaticFieldID(cls, name, descriptor);
Env.h:      if (id == nullptr) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return id;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Finds a method in a class.
Env.h:    * \param cls the class
Env.h:    * \param name the name of the method
Env.h:    * \param descriptor the method signature
Env.h:    * \return method id
Env.h:    * \throws JavaException if the method cannot be found
Env.h:    */
Env.h:   DLLLOCAL jmethodID getMethod(jclass cls, const char* name, const char* descriptor) {
Env.h:      jmethodID id = env->GetMethodID(cls, name, descriptor);
Env.h:      if (id == nullptr) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return id;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Finds a static method in a class.
Env.h:    * \param cls the class
Env.h:    * \param name the name of the method
Env.h:    * \param descriptor the method signature
Env.h:    * \return method id
Env.h:    * \throws JavaException if the method cannot be found
Env.h:    */
Env.h:   DLLLOCAL jmethodID getStaticMethod(jclass cls, const char* name, const char* descriptor) {
Env.h:      jmethodID id = env->GetStaticMethodID(cls, name, descriptor);
Env.h:      if (id == nullptr) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return id;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a boolean field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jboolean getBooleanField(jobject object, jfieldID id) {
Env.h:      return env->GetBooleanField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a byte field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jbyte getByteField(jobject object, jfieldID id) {
Env.h:      return env->GetByteField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a char field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jchar getCharField(jobject object, jfieldID id) {
Env.h:      return env->GetCharField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a double field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jdouble getDoubleField(jobject object, jfieldID id) {
Env.h:      return env->GetDoubleField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a float field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jfloat getFloatField(jobject object, jfieldID id) {
Env.h:      return env->GetFloatField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of an int field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jint getIntField(jobject object, jfieldID id) {
Env.h:      return env->GetIntField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a long field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jlong getLongField(jobject object, jfieldID id) {
Env.h:      return env->GetLongField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of an Object field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL LocalReference<jobject> getObjectField(jobject object, jfieldID id) {
Env.h:      return env->GetObjectField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a short field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jshort getShortField(jobject object, jfieldID id) {
Env.h:      return env->GetShortField(object, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static boolean field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jboolean getStaticBooleanField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticBooleanField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static byte field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jbyte getStaticByteField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticByteField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static char field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jchar getStaticCharField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticCharField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static double field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jdouble getStaticDoubleField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticDoubleField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static float field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jfloat getStaticFloatField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticFloatField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static int field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jint getStaticIntField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticIntField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static long field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jlong getStaticLongField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticLongField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static Object field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL LocalReference<jobject> getStaticObjectField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticObjectField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Gets the value of a static short field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \return the field value
Env.h:    */
Env.h:   DLLLOCAL jshort getStaticShortField(jclass cls, jfieldID id) {
Env.h:      return env->GetStaticShortField(cls, id);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a boolean field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setBooleanField(jobject object, jfieldID id, jboolean value) {
Env.h:      env->SetBooleanField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a byte field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setByteField(jobject object, jfieldID id, jbyte value) {
Env.h:      env->SetByteField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a char field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setCharField(jobject object, jfieldID id, jchar value) {
Env.h:      env->SetCharField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a double field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setDoubleField(jobject object, jfieldID id, jdouble value) {
Env.h:      env->SetDoubleField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a float field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setFloatField(jobject object, jfieldID id, jfloat value) {
Env.h:      env->SetFloatField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a int field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setIntField(jobject object, jfieldID id, jint value) {
Env.h:      env->SetIntField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a long field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setLongField(jobject object, jfieldID id, jlong value) {
Env.h:      env->SetLongField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a Object field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setObjectField(jobject object, jfieldID id, jobject value) {
Env.h:      env->SetObjectField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a short field.
Env.h:    * \param object the instance
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setShortField(jobject object, jfieldID id, jshort value) {
Env.h:      env->SetShortField(object, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static boolean field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticBooleanField(jclass cls, jfieldID id, jboolean value) {
Env.h:      env->SetStaticBooleanField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static byte field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticByteField(jclass cls, jfieldID id, jbyte value) {
Env.h:      env->SetStaticByteField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static char field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticCharField(jclass cls, jfieldID id, jchar value) {
Env.h:      env->SetStaticCharField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static double field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticDoubleField(jclass cls, jfieldID id, jdouble value) {
Env.h:      env->SetStaticDoubleField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static float field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticFloatField(jclass cls, jfieldID id, jfloat value) {
Env.h:      env->SetStaticFloatField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static int field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticIntField(jclass cls, jfieldID id, jint value) {
Env.h:      env->SetStaticIntField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static long field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticLongField(jclass cls, jfieldID id, jlong value) {
Env.h:      env->SetStaticLongField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static Object field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticObjectField(jclass cls, jfieldID id, jobject value) {
Env.h:      env->SetStaticObjectField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Sets the value of a static short field.
Env.h:    * \param cls the class of the field
Env.h:    * \param id the field id
Env.h:    * \param value the field value
Env.h:    */
Env.h:   DLLLOCAL void setStaticShortField(jclass cls, jfieldID id, jshort value) {
Env.h:      env->SetStaticShortField(cls, id, value);
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jboolean callBooleanMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jboolean ret = env->CallBooleanMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jbyte callByteMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jbyte ret = env->CallByteMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jchar callCharMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jchar ret = env->CallCharMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jdouble callDoubleMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jdouble ret = env->CallDoubleMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jfloat callFloatMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jfloat ret = env->CallFloatMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jint callIntMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jint ret = env->CallIntMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jlong callLongMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jlong ret = env->CallLongMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL LocalReference<jobject> callObjectMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      LocalReference<jobject> ret = env->CallObjectMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jshort callShortMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      jshort ret = env->CallShortMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method.
Env.h:    * \param object the instance
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL void callVoidMethod(jobject object, jmethodID id, const jvalue *args) {
Env.h:      env->CallVoidMethodA(object, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jboolean callNonvirtualBooleanMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jboolean ret = env->CallNonvirtualBooleanMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jbyte callNonvirtualByteMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jbyte ret = env->CallNonvirtualByteMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jchar callNonvirtualCharMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jchar ret = env->CallNonvirtualCharMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jdouble callNonvirtualDoubleMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jdouble ret = env->CallNonvirtualDoubleMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jfloat callNonvirtualFloatMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jfloat ret = env->CallNonvirtualFloatMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jint callNonvirtualIntMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jint ret = env->CallNonvirtualIntMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jlong callNonvirtualLongMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jlong ret = env->CallNonvirtualLongMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL LocalReference<jobject> callNonvirtualObjectMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      LocalReference<jobject> ret = env->CallNonvirtualObjectMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jshort callNonvirtualShortMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jshort ret = env->CallNonvirtualShortMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes an instance method non-virtually.
Env.h:    * \param object the instance
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL void callNonvirtualVoidMethod(jobject object, jclass cls, jmethodID id, const jvalue *args) {
Env.h:      env->CallNonvirtualVoidMethodA(object, cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jboolean callStaticBooleanMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jboolean ret = env->CallStaticBooleanMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jbyte callStaticByteMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jbyte ret = env->CallStaticByteMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jchar callStaticCharMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jchar ret = env->CallStaticCharMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jdouble callStaticDoubleMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jdouble ret = env->CallStaticDoubleMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jfloat callStaticFloatMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jfloat ret = env->CallStaticFloatMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jint callStaticIntMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jint ret = env->CallStaticIntMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jlong callStaticLongMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jlong ret = env->CallStaticLongMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL LocalReference<jobject> callStaticObjectMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      LocalReference<jobject> ret = env->CallStaticObjectMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:   /**
Env.h:    * \brief Invokes a static method.
Env.h:    * \param cls the class of the method
Env.h:    * \param id the method id
Env.h:    * \param args the arguments
Env.h:    * \return the return value
Env.h:    * \throws JavaException if the method throws an exception
Env.h:    */
Env.h:   DLLLOCAL jshort callStaticShortMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:      jshort ret = env->CallStaticShortMethodA(cls, id, args);
Env.h:      if (env->ExceptionCheck()) {
Env.h:         throw JavaException();
Env.h:      }
Env.h:      return ret;
Env.h:   }
Env.h:    /**
Env.h:     * \brief Invokes a static method.
Env.h:     * \param cls the class of the method
Env.h:     * \param id the method id
Env.h:     * \param args the arguments
Env.h:     * \throws JavaException if the method throws an exception
Env.h:     */
Env.h:    DLLLOCAL void callStaticVoidMethod(jclass cls, jmethodID id, const jvalue *args) {
Env.h:        env->CallStaticVoidMethodA(cls, id, args);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    /**
Env.h:     * \brief Tests whether an object is an instance of a class.
Env.h:     * \param obj the object
Env.h:     * \param cls the class
Env.h:     * \return true if obj can be cast to cls
Env.h:     */
Env.h:    DLLLOCAL bool isInstanceOf(jobject obj, jclass cls) {
Env.h:        return env->IsInstanceOf(obj, cls) == JNI_TRUE;
Env.h:    }
Env.h:    /**
Env.h:     * \brief Creates a new Java object.
Env.h:     * \param cls the class of the object
Env.h:     * \param id the id of the constructor
Env.h:     * \param args the arguments for the constructor
Env.h:     * \return a reference to the new object
Env.h:     * \throws JavaException if the construction fails
Env.h:     */
Env.h:    DLLLOCAL LocalReference<jobject> newObject(jclass cls, jmethodID id, const jvalue *args) {
Env.h:        jobject ret = env->NewObjectA(cls, id, args);
Env.h:        if (ret == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return ret;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jstring> newString(const char* utf8) {
Env.h:        jstring s = env->NewStringUTF(utf8);
Env.h:        if (s == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return s;
Env.h:    }
Env.h:    DLLLOCAL void registerNatives(jclass cls, const JNINativeMethod *methods, jint count) {
Env.h:        if (env->RegisterNatives(cls, methods, count) != 0) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jbooleanArray> newBooleanArray(jsize len) {
Env.h:        jbooleanArray array = env->NewBooleanArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jbyteArray> newByteArray(jsize len) {
Env.h:        jbyteArray array = env->NewByteArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jcharArray> newCharArray(jsize len) {
Env.h:        jcharArray array = env->NewCharArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jshortArray> newShortArray(jsize len) {
Env.h:        jshortArray array = env->NewShortArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jintArray> newIntArray(jsize len) {
Env.h:        jintArray array = env->NewIntArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jlongArray> newLongArray(jsize len) {
Env.h:        jlongArray array = env->NewLongArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jfloatArray> newFloatArray(jsize len) {
Env.h:        jfloatArray array = env->NewFloatArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jdoubleArray> newDoubleArray(jsize len) {
Env.h:        jdoubleArray array = env->NewDoubleArray(len);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jobjectArray> newObjectArray(jsize len, jclass cls) {
Env.h:        jobjectArray array = env->NewObjectArray(len, cls, nullptr);
Env.h:        if (array == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return array;
Env.h:    }
Env.h:    DLLLOCAL jsize getArrayLength(jarray array) {
Env.h:        return env->GetArrayLength(array);
Env.h:    }
Env.h:    DLLLOCAL jboolean getBooleanArrayElement(jbooleanArray array, jsize index) {
Env.h:        jboolean value;
Env.h:        env->GetBooleanArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jbyte getByteArrayElement(jbyteArray array, jsize index) {
Env.h:        jbyte value;
Env.h:        env->GetByteArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jchar getCharArrayElement(jcharArray array, jsize index) {
Env.h:        jchar value;
Env.h:        env->GetCharArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jshort getShortArrayElement(jshortArray array, jsize index) {
Env.h:        jshort value;
Env.h:        env->GetShortArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jint getIntArrayElement(jintArray array, jsize index) {
Env.h:        jint value;
Env.h:        env->GetIntArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jlong getLongArrayElement(jlongArray array, jsize index) {
Env.h:        jlong value;
Env.h:        env->GetLongArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jfloat getFloatArrayElement(jfloatArray array, jsize index) {
Env.h:        jfloat value;
Env.h:        env->GetFloatArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL jdouble getDoubleArrayElement(jdoubleArray array, jsize index) {
Env.h:        jdouble value;
Env.h:        env->GetDoubleArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return value;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jobject> getObjectArrayElement(jobjectArray array, jsize index) {
Env.h:        jobject o = env->GetObjectArrayElement(array, index);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return o;
Env.h:    }
Env.h:    DLLLOCAL void setBooleanArrayElement(jbooleanArray array, jsize index, jboolean value) {
Env.h:        env->SetBooleanArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setByteArrayElement(jbyteArray array, jsize index, jbyte value) {
Env.h:        env->SetByteArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setCharArrayElement(jcharArray array, jsize index, jchar value) {
Env.h:        env->SetCharArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setShortArrayElement(jshortArray array, jsize index, jshort value) {
Env.h:        env->SetShortArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setIntArrayElement(jintArray array, jsize index, jint value) {
Env.h:        env->SetIntArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setLongArrayElement(jlongArray array, jsize index, jlong value) {
Env.h:        env->SetLongArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setFloatArrayElement(jfloatArray array, jsize index, jfloat value) {
Env.h:        env->SetFloatArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setDoubleArrayElement(jdoubleArray array, jsize index, jdouble value) {
Env.h:        env->SetDoubleArrayRegion(array, index, 1, &value);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL void setObjectArrayElement(jobjectArray array, jsize index, jobject val) {
Env.h:        env->SetObjectArrayElement(array, index, val);
Env.h:        if (env->ExceptionCheck()) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jobject> toReflectedField(jclass cls, jfieldID id, jboolean isStatic) {
Env.h:        jobject o = env->ToReflectedField(cls, id, isStatic);
Env.h:        if (o == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return o;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jobject> toReflectedMethod(jclass cls, jmethodID id, jboolean isStatic) {
Env.h:        jobject o = env->ToReflectedMethod(cls, id, isStatic);
Env.h:        if (o == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return o;
Env.h:    }
Env.h:    DLLLOCAL jfieldID fromReflectedField(jobject field) {
Env.h:        jfieldID id = env->FromReflectedField(field);
Env.h:        if (id == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return id;
Env.h:    }
Env.h:    DLLLOCAL jmethodID fromReflectedMethod(jobject method) {
Env.h:        jmethodID id = env->FromReflectedMethod(method);
Env.h:        if (id == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return id;
Env.h:    }
Env.h:    DLLLOCAL bool isSameObject(jobject obj1, jobject obj2) {
Env.h:        return env->IsSameObject(obj1, obj2) == JNI_TRUE;
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jclass> getObjectClass(jobject obj) {
Env.h:        assert(obj != nullptr);
Env.h:        return env->GetObjectClass(obj);
Env.h:    }
Env.h:    DLLLOCAL void throwException(jthrowable throwable) {
Env.h:        env->Throw(throwable);
Env.h:    }
Env.h:    DLLLOCAL void throwNew(jclass cls, const char* msg) {
Env.h:        env->ThrowNew(cls, msg);
Env.h:    }
Env.h:    DLLLOCAL LocalReference<jclass> defineClass(const char* name, jobject loader, const unsigned char* buf, jsize bufLen) {
Env.h:        jclass c = env->DefineClass(name, loader, reinterpret_cast<const jbyte*>(buf), bufLen);
Env.h:        if (c == nullptr) {
Env.h:            throw JavaException();
Env.h:        }
Env.h:        return c;
Env.h:    }
Env.h:    //! find or define the given class
Env.h:    /**
Env.h:        we define a class if we are doing a clean initialization, otherwise if we have been initialized from Java, then
Env.h:        the class already exists, so we look for it first
Env.h:    */
Env.h:    DLLLOCAL LocalReference<jclass> findDefineClass(const char* name, jobject loader, const unsigned char* buf, jsize bufLen) {
Env.h:        jclass c = env->FindClass(name);
Env.h:        //if (c) { printd(5, "FOUND '%s': %p\n", name, c); }
Env.h:        if (!c) {
Env.h:            c = env->DefineClass(name, loader, reinterpret_cast<const jbyte*>(buf), bufLen);
Env.h:            if (!c) {
Env.h:                throw JavaException();
Env.h:            }
Env.h:        }
Env.h:        return c;
Env.h:    }
Env.h:    class GetStringUtfChars {
Env.h:    public:
Env.h:        DLLLOCAL GetStringUtfChars(Env &env, const LocalReference<jstring>& strref) :
Env.h:                env(env), str(&strref),
Env.h:                chars(strref ? env.env->GetStringUTFChars(strref, nullptr) : nullptr) {
Env.h:            if (strref && chars == nullptr) {
Env.h:                throw new JavaException;
Env.h:            }
Env.h:        }
Env.h:        DLLLOCAL GetStringUtfChars(Env &env) :
Env.h:                env(env), str(nullptr), chars(nullptr) {
Env.h:        }
Env.h:        DLLLOCAL ~GetStringUtfChars() {
Env.h:            if (str) {
Env.h:                env.env->ReleaseStringUTFChars(*str, chars);
Env.h:            }
Env.h:        }
Env.h:        DLLLOCAL int set(const LocalReference<jstring>& strref) {
Env.h:            discard();
Env.h:            chars = env.env->GetStringUTFChars(strref, nullptr);
Env.h:            if (chars) {
Env.h:                str = &strref;
Env.h:                return 0;
Env.h:            }
Env.h:            return -1;
Env.h:        }
Env.h:        DLLLOCAL void discard() {
Env.h:            if (str) {
Env.h:                env.env->ReleaseStringUTFChars(*str, chars);
Env.h:                str = nullptr;
Env.h:                chars = nullptr;
Env.h:            }
Env.h:        }
Env.h:        DLLLOCAL const char* c_str() const {
Env.h:            return chars ? chars : "";
Env.h:        }
Env.h:        DLLLOCAL char operator[](int i) const {
Env.h:            if (i < 0) {
Env.h:                i = strlen(chars) + i;
Env.h:            }
Env.h:            return chars[i];
Env.h:        }
Env.h:        DLLLOCAL operator bool() const {
Env.h:            return (bool)chars;
Env.h:        }
Env.h:        DLLLOCAL bool operator==(const char* str) const {
Env.h:            assert(chars);
Env.h:            return !strcmp(str, chars);
Env.h:        }
Env.h:        DLLLOCAL bool operator!=(const char* str) const {
Env.h:            assert(chars);
Env.h:            return strcmp(str, chars);
Env.h:        }
Env.h:        DLLLOCAL GetStringUtfChars& operator=(const char* new_chars) {
Env.h:            if (str) {
Env.h:                env.env->ReleaseStringUTFChars(*str, chars);
Env.h:                str = nullptr;
Env.h:            }
Env.h:            chars = new_chars;
Env.h:            return *this;
Env.h:        }
Env.h:    private:
Env.h:        Env& env;
Env.h:        const LocalReference<jstring>* str;
Env.h:        const char* chars;
Env.h:    };
Env.h:private:
Env.h:    JNIEnv* env;
Env.h:    friend class GetStringUtfChars;
Env.h:};
Env.h:} // namespace jni
Env.h:#endif // QORE_JNI_ENV_H_
JavaToQore.cpp://--------------------------------------------------------------------*- C++ -*-
JavaToQore.cpp://
JavaToQore.cpp://  Qore Programming Language
JavaToQore.cpp://
JavaToQore.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
JavaToQore.cpp://
JavaToQore.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
JavaToQore.cpp://  copy of this software and associated documentation files (the "Software"),
JavaToQore.cpp://  to deal in the Software without restriction, including without limitation
JavaToQore.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
JavaToQore.cpp://  and/or sell copies of the Software, and to permit persons to whom the
JavaToQore.cpp://  Software is furnished to do so, subject to the following conditions:
JavaToQore.cpp://
JavaToQore.cpp://  The above copyright notice and this permission notice shall be included in
JavaToQore.cpp://  all copies or substantial portions of the Software.
JavaToQore.cpp://
JavaToQore.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JavaToQore.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JavaToQore.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JavaToQore.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JavaToQore.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
JavaToQore.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
JavaToQore.cpp://  DEALINGS IN THE SOFTWARE.
JavaToQore.cpp://
JavaToQore.cpp://------------------------------------------------------------------------------
JavaToQore.cpp:#include <qore/Qore.h>
JavaToQore.cpp:#include "QoreJniClassMap.h"
JavaToQore.cpp:#include "Globals.h"
JavaToQore.cpp:#include "JavaToQore.h"
JavaToQore.cpp:#include "QoreJniFunctionalInterface.h"
JavaToQore.cpp:namespace jni {
JavaToQore.cpp:QoreValue JavaToQore::convertToQore(LocalReference<jobject> v, QoreProgram* pgm, bool compat_types,
JavaToQore.cpp:        NumericOption numeric) {
JavaToQore.cpp:    if (!v) {
JavaToQore.cpp:        return QoreValue();
JavaToQore.cpp:    }
JavaToQore.cpp:    Env env;
JavaToQore.cpp:    // convert to Qore value if possible
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classString)) {
JavaToQore.cpp:        Env::GetStringUtfChars chars(env, v.as<jstring>());
JavaToQore.cpp:        return QoreValue(new QoreStringNode(chars.c_str(), QCS_UTF8));
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classZonedDateTime)) {
JavaToQore.cpp:        LocalReference<jstring> date_str = env.callObjectMethod(v,
JavaToQore.cpp:            Globals::methodZonedDateTimeToString, nullptr).as<jstring>();
JavaToQore.cpp:        Env::GetStringUtfChars chars(env, date_str);
JavaToQore.cpp:        return QoreValue(new DateTimeNode(chars.c_str()));
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classTimestamp)) {
JavaToQore.cpp:        LocalReference<jstring> date_str = env.callObjectMethod(v,
JavaToQore.cpp:            Globals::methodTimestampToString, nullptr).as<jstring>();
JavaToQore.cpp:        Env::GetStringUtfChars chars(env, date_str);
JavaToQore.cpp:        return QoreValue(new DateTimeNode(chars.c_str()));
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classDate)) {
JavaToQore.cpp:        LocalReference<jstring> date_str = env.callObjectMethod(v,
JavaToQore.cpp:            Globals::methodDateToString, nullptr).as<jstring>();
JavaToQore.cpp:        Env::GetStringUtfChars chars(env, date_str);
JavaToQore.cpp:        return QoreValue(new DateTimeNode(chars.c_str()));
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classTime)) {
JavaToQore.cpp:        LocalReference<jstring> time_str = env.callObjectMethod(v,
JavaToQore.cpp:            Globals::methodTimeToString, nullptr).as<jstring>();
JavaToQore.cpp:        Env::GetStringUtfChars chars(env, time_str);
JavaToQore.cpp:        QoreStringMaker date("1970-01-01T%s", chars.c_str());
JavaToQore.cpp:        return QoreValue(new DateTimeNode(date.c_str()));
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classBigDecimal)) {
JavaToQore.cpp:        LocalReference<jstring> num_str = env.callObjectMethod(v,
JavaToQore.cpp:            Globals::methodBigDecimalToString, nullptr).as<jstring>();
JavaToQore.cpp:        Env::GetStringUtfChars chars(env, num_str);
JavaToQore.cpp:        switch (numeric) {
JavaToQore.cpp:            case ENO_NUMERIC:
JavaToQore.cpp:                return new QoreNumberNode(chars.c_str());
JavaToQore.cpp:            case ENO_STRING:
JavaToQore.cpp:                return new QoreStringNode(chars.c_str());
JavaToQore.cpp:            case ENO_OPTIMAL: {
JavaToQore.cpp:                const char* dot = strchr(chars.c_str(), '.');
JavaToQore.cpp:                if (!dot) {
JavaToQore.cpp:                    errno = 0;
JavaToQore.cpp:                    int64 num = strtoll(chars.c_str(), 0, 10);
JavaToQore.cpp:                    if (errno == ERANGE) {
JavaToQore.cpp:                        return new QoreNumberNode(chars.c_str());
JavaToQore.cpp:                    }
JavaToQore.cpp:                    return num;
JavaToQore.cpp:                }
JavaToQore.cpp:                SimpleRefHolder<QoreNumberNode> afterDot(new QoreNumberNode(dot + 1));
JavaToQore.cpp:                if (afterDot->equals(0LL)) {
JavaToQore.cpp:                    return strtoll(chars.c_str(), 0, 10);
JavaToQore.cpp:                }
JavaToQore.cpp:                return new QoreNumberNode(chars.c_str());
JavaToQore.cpp:            }
JavaToQore.cpp:            default:
JavaToQore.cpp:                assert(false);
JavaToQore.cpp:        }
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classQoreObjectBase)) {
JavaToQore.cpp:        QoreObject* obj = reinterpret_cast<QoreObject*>(env.callLongMethod(v,
JavaToQore.cpp:            Globals::methodQoreObjectBaseGet, nullptr));
JavaToQore.cpp:        return obj->refSelf();
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classQoreClosure)) {
JavaToQore.cpp:        ResolvedCallReferenceNode* call = reinterpret_cast<ResolvedCallReferenceNode*>(env.callLongMethod(v,
JavaToQore.cpp:            Globals::methodQoreClosureGet, nullptr));
JavaToQore.cpp:        return call->refRefSelf();
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classMap) && !JniExternalProgramData::compatTypes()) {
JavaToQore.cpp:        // create hash from Map
JavaToQore.cpp:        LocalReference<jobject> set = env.callObjectMethod(v,
JavaToQore.cpp:            Globals::methodMapEntrySet, nullptr);
JavaToQore.cpp:        if (!set) {
JavaToQore.cpp:            return QoreValue();
JavaToQore.cpp:        }
JavaToQore.cpp:        LocalReference<jobject> i = env.callObjectMethod(set,
JavaToQore.cpp:            Globals::methodSetIterator, nullptr);
JavaToQore.cpp:        if (!i) {
JavaToQore.cpp:            return QoreValue();
JavaToQore.cpp:        }
JavaToQore.cpp:        ExceptionSink xsink;
JavaToQore.cpp:        ReferenceHolder<QoreHashNode> rv(new QoreHashNode(autoTypeInfo), &xsink);
JavaToQore.cpp:        while (true) {
JavaToQore.cpp:            if (!env.callBooleanMethod(i, Globals::methodIteratorHasNext, nullptr)) {
JavaToQore.cpp:                break;
JavaToQore.cpp:            }
JavaToQore.cpp:            LocalReference<jobject> element = env.callObjectMethod(i,
JavaToQore.cpp:                Globals::methodIteratorNext, nullptr);
JavaToQore.cpp:            if (element) {
JavaToQore.cpp:                LocalReference<jobject> key = env.callObjectMethod(element,
JavaToQore.cpp:                    Globals::methodEntryGetKey, nullptr);
JavaToQore.cpp:                // if key is not a string, then we cannot convert it to Qore
JavaToQore.cpp:                if (!env.isInstanceOf(key, Globals::classString)) {
JavaToQore.cpp:                    return qjcm.getValue(v, pgm, compat_types);
JavaToQore.cpp:                }
JavaToQore.cpp:                LocalReference<jobject> value = env.callObjectMethod(element,
JavaToQore.cpp:                    Globals::methodEntryGetValue, nullptr);
JavaToQore.cpp:                ValueHolder val(convertToQore(value.release(), pgm, compat_types), &xsink);
JavaToQore.cpp:                if (xsink) {
JavaToQore.cpp:                    break;
JavaToQore.cpp:                }
JavaToQore.cpp:                Env::GetStringUtfChars key_str(env, key.as<jstring>());
JavaToQore.cpp:                rv->setKeyValue(key_str.c_str(), val.release(), &xsink);
JavaToQore.cpp:                if (xsink) {
JavaToQore.cpp:                    break;
JavaToQore.cpp:                }
JavaToQore.cpp:            }
JavaToQore.cpp:        }
JavaToQore.cpp:        if (xsink) {
JavaToQore.cpp:            throw XsinkException(xsink);
JavaToQore.cpp:        }
JavaToQore.cpp:        return rv.release();
JavaToQore.cpp:    }
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classList)) {
JavaToQore.cpp:        // create list from List
JavaToQore.cpp:        jint size = env.callIntMethod(v, Globals::methodListSize, nullptr);
JavaToQore.cpp:        ExceptionSink xsink;
JavaToQore.cpp:        ReferenceHolder<QoreListNode> rv(new QoreListNode(autoTypeInfo), &xsink);
JavaToQore.cpp:        jint pos = 0;
JavaToQore.cpp:        while (pos < size) {
JavaToQore.cpp:            std::vector<jvalue> jargs(1);
JavaToQore.cpp:            jargs[0].i = pos++;
JavaToQore.cpp:            LocalReference<jobject> value = env.callObjectMethod(v,
JavaToQore.cpp:                Globals::methodListGet, &jargs[0]);
JavaToQore.cpp:            ValueHolder val(convertToQore(value.release(), pgm, compat_types), &xsink);
JavaToQore.cpp:            if (xsink) {
JavaToQore.cpp:                break;
JavaToQore.cpp:            }
JavaToQore.cpp:            rv->push(val.release(), &xsink);
JavaToQore.cpp:        }
JavaToQore.cpp:        if (xsink) {
JavaToQore.cpp:            throw XsinkException(xsink);
JavaToQore.cpp:        }
JavaToQore.cpp:        return rv.release();
JavaToQore.cpp:    }
JavaToQore.cpp:    // for relative date/time values
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classQoreRelativeTime)) {
JavaToQore.cpp:        int year = env.getIntField(v, Globals::fieldQoreRelativeTimeYear),
JavaToQore.cpp:            month = env.getIntField(v, Globals::fieldQoreRelativeTimeMonth),
JavaToQore.cpp:            day = env.getIntField(v, Globals::fieldQoreRelativeTimeDay),
JavaToQore.cpp:            hour = env.getIntField(v, Globals::fieldQoreRelativeTimeHour),
JavaToQore.cpp:            minute = env.getIntField(v, Globals::fieldQoreRelativeTimeMinute),
JavaToQore.cpp:            second = env.getIntField(v, Globals::fieldQoreRelativeTimeSecond),
JavaToQore.cpp:            us = env.getIntField(v, Globals::fieldQoreRelativeTimeUs);
JavaToQore.cpp:        return QoreValue(DateTimeNode::makeRelative(year, month, day, hour, minute, second, us));
JavaToQore.cpp:    }
JavaToQore.cpp:    // for Qore closure / call references
JavaToQore.cpp:    if (env.isInstanceOf(v, Globals::classQoreClosureMarker)) {
JavaToQore.cpp:        return new QoreJniFunctionalInterface(v);
JavaToQore.cpp:    }
JavaToQore.cpp:    return qjcm.getValue(v, pgm, compat_types);
JavaToQore.cpp:}
JavaToQore.cpp:} // namespace jni
jni-module.cpp:/* -*- indent-tabs-mode: nil -*- */
jni-module.cpp:/*
jni-module.cpp:    jni-module.cpp
jni-module.cpp:    JNI integration to Qore
jni-module.cpp:    Qore Programming Language
jni-module.cpp:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
jni-module.cpp:    Permission is hereby granted, free of charge, to any person obtaining a
jni-module.cpp:    copy of this software and associated documentation files (the "Software"),
jni-module.cpp:    to deal in the Software without restriction, including without limitation
jni-module.cpp:    the rights to use, copy, modify, merge, publish, distribute, sublicense,
jni-module.cpp:    and/or sell copies of the Software, and to permit persons to whom the
jni-module.cpp:    Software is furnished to do so, subject to the following conditions:
jni-module.cpp:    The above copyright notice and this permission notice shall be included in
jni-module.cpp:    all copies or substantial portions of the Software.
jni-module.cpp:    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
jni-module.cpp:    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
jni-module.cpp:    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
jni-module.cpp:    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
jni-module.cpp:    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
jni-module.cpp:    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
jni-module.cpp:    DEALINGS IN THE SOFTWARE.
jni-module.cpp:    Note that the Qore library is released under a choice of three open-source
jni-module.cpp:    licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
jni-module.cpp:    information.
jni-module.cpp:*/
jni-module.cpp:#include <qore/Qore.h>
jni-module.cpp:#include <unistd.h>
jni-module.cpp:#include <errno.h>
jni-module.cpp:#include <string.h>
jni-module.cpp:#include <map>
jni-module.cpp:#include <vector>
jni-module.cpp:#include <dlfcn.h>
jni-module.cpp:#include "defs.h"
jni-module.cpp:#include "Jvm.h"
jni-module.cpp:#include "QoreJniClassMap.h"
jni-module.cpp:#include "Method.h"
jni-module.cpp:#include "QoreToJava.h"
jni-module.cpp:#include "Globals.h"
jni-module.cpp:#include "QoreJdbcDriver.h"
jni-module.cpp:using namespace jni;
jni-module.cpp:#ifndef Q_WINDOWS
jni-module.cpp:#include <signal.h>
jni-module.cpp:#include <pthread.h>
jni-module.cpp:#endif
jni-module.cpp:sig_vec_t sig_vec = {
jni-module.cpp:#ifndef Q_WINDOWS
jni-module.cpp:    SIGTRAP, SIGUSR1, SIGSEGV, SIGBUS
jni-module.cpp:#endif
jni-module.cpp:};
jni-module.cpp:static QoreStringNode* jni_module_init();
jni-module.cpp:static void jni_module_ns_init(QoreNamespace* rns, QoreNamespace* qns);
jni-module.cpp:static void jni_module_delete();
jni-module.cpp:static void jni_module_parse_cmd(const QoreString& cmd, ExceptionSink* xsink);
jni-module.cpp:DLLEXPORT char qore_module_name[] = QORE_JNI_MODULE_NAME;
jni-module.cpp:DLLEXPORT char qore_module_version[] = PACKAGE_VERSION;
jni-module.cpp:DLLEXPORT char qore_module_description[] = "JNI module";
jni-module.cpp:DLLEXPORT char qore_module_author[] = "Qore Technologies, s.r.o.";
jni-module.cpp:DLLEXPORT char qore_module_url[] = "http://qore.org";
jni-module.cpp:DLLEXPORT int qore_module_api_major = QORE_MODULE_API_MAJOR;
jni-module.cpp:DLLEXPORT int qore_module_api_minor = QORE_MODULE_API_MINOR;
jni-module.cpp:DLLEXPORT qore_module_init_t qore_module_init = jni_module_init;
jni-module.cpp:DLLEXPORT qore_module_ns_init_t qore_module_ns_init = jni_module_ns_init;
jni-module.cpp:DLLEXPORT qore_module_delete_t qore_module_delete = jni_module_delete;
jni-module.cpp:DLLEXPORT qore_module_parse_cmd_t qore_module_parse_cmd = jni_module_parse_cmd;
jni-module.cpp:DLLEXPORT qore_license_t qore_module_license = QL_MIT;
jni-module.cpp:DLLEXPORT char qore_module_license_str[] = "MIT";
jni-module.cpp:// global type compatibility option
jni-module.cpp:DLLLOCAL bool jni_compat_types = false;
jni-module.cpp:static bool jni_init_failed = false;
jni-module.cpp:// module cmd type
jni-module.cpp:using qore_jni_module_cmd_t = void (*) (const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_import(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_add_classpath(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_add_relative_classpath(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:// define-pending-class: for resolving circular dependencies with inner classes
jni-module.cpp:static void qore_jni_mc_define_pending_class(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_define_class(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_set_compat_types(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_set_property(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:static void qore_jni_mc_mark_module_injected(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc);
jni-module.cpp:// module cmds
jni-module.cpp:typedef std::map<std::string, qore_jni_module_cmd_t> mcmap_t;
jni-module.cpp:static mcmap_t mcmap = {
jni-module.cpp:    {"import", qore_jni_mc_import},
jni-module.cpp:    {"add-classpath", qore_jni_mc_add_classpath},
jni-module.cpp:    {"add-relative-classpath", qore_jni_mc_add_relative_classpath},
jni-module.cpp:    {"define-pending-class", qore_jni_mc_define_pending_class},
jni-module.cpp:    {"define-class", qore_jni_mc_define_class},
jni-module.cpp:    {"set-compat-types", qore_jni_mc_set_compat_types},
jni-module.cpp:    {"set-property", qore_jni_mc_set_property},
jni-module.cpp:    {"mark-module-injected", qore_jni_mc_mark_module_injected},
jni-module.cpp:};
jni-module.cpp:static void jni_thread_cleanup(void*) {
jni-module.cpp:    jni::Jvm::threadCleanup();
jni-module.cpp:}
jni-module.cpp:static bool bootstrap = false;
jni-module.cpp:static bool already_initialized = false;
jni-module.cpp:static bool deferred_ns_init = false;
jni-module.cpp:QoreStringNode* jni_module_init_finalize(bool system) {
jni-module.cpp:    tclist.push(jni_thread_cleanup, nullptr);
jni-module.cpp:    try {
jni-module.cpp:        QoreProgram* pgm = Globals::createJavaContextProgram();
jni-module.cpp:        printd(5, "jni_module_init_finalize() pgm: %p\n", pgm);
jni-module.cpp:        // issue #4006: ensure there is a program context for initialization
jni-module.cpp:        QoreProgramContextHelper pgm_ctx(pgm);
jni-module.cpp:        qjcm.init(pgm, already_initialized);
jni-module.cpp:    } catch (jni::Exception& e) {
jni-module.cpp:        tclist.pop(false);
jni-module.cpp:        qore_release_signals(sig_vec, QORE_JNI_MODULE_NAME);
jni-module.cpp:        jni::Jvm::destroyVM();
jni-module.cpp:        // display exception info on the console as an unhandled exception
jni-module.cpp:        if (system) {
jni-module.cpp:            throw;
jni-module.cpp:            return nullptr;
jni-module.cpp:        } else {
jni-module.cpp:            ExceptionSink xsink;
jni-module.cpp:            e.convert(&xsink);
jni-module.cpp:            return new QoreStringNode("JNI-FINALIZATION-ERR");
jni-module.cpp:        }
jni-module.cpp:    }
jni-module.cpp:    ExceptionSink xsink;
jni-module.cpp:    ValueHolder v(qore_get_module_option("jni", "compat-types"), &xsink);
jni-module.cpp:    if (v) {
jni-module.cpp:        jni_compat_types = true;
jni-module.cpp:    }
jni-module.cpp:    printd(5, "jni_module_init_finalize() jni module init done\n");
jni-module.cpp:    return nullptr;
jni-module.cpp:}
jni-module.cpp:static QoreStringNode* jni_module_init() {
jni-module.cpp:    if (jni_init_failed) {
jni-module.cpp:        return new QoreStringNode("jni module initialization failed");
jni-module.cpp:    }
jni-module.cpp:    printd(5, "jni_module_init()\n");
jni-module.cpp:    jni::jni_qore_init = true;
jni-module.cpp:    qore_set_module_option("jni", "jni-version", JNI_VERSION_10);
jni-module.cpp:    QoreStringNode* err = nullptr;
jni-module.cpp:    ValueHolder jvm_ptr(qore_get_module_option("jni", "jvm-ptr"), nullptr);
jni-module.cpp:    if (jvm_ptr->getType() == NT_INT) {
jni-module.cpp:        jni::Jvm::setVmPtr(reinterpret_cast<JavaVM*>(jvm_ptr->getAsBigInt()));
jni-module.cpp:        already_initialized = true;
jni-module.cpp:        Globals::setAlreadyInitialized();
jni-module.cpp:    } else {
jni-module.cpp:        already_initialized = false;
jni-module.cpp:        try {
jni-module.cpp:            err = jni::Jvm::createVM();
jni-module.cpp:        } catch (jni::Exception& e) {
jni-module.cpp:            ExceptionSink xsink;
jni-module.cpp:            e.convert(&xsink);
jni-module.cpp:            const QoreValue desc = xsink.getExceptionDesc();
jni-module.cpp:            if (desc.getType() == NT_STRING) {
jni-module.cpp:                err = new QoreStringNode(*desc.get<const QoreStringNode>());
jni-module.cpp:            } else {
jni-module.cpp:                err = new QoreStringNode("unknown exception calling Jvm::createVM()");
jni-module.cpp:            }
jni-module.cpp:        }
jni-module.cpp:        if (err) {
jni-module.cpp:            jni_init_failed = true;
jni-module.cpp:            err->prepend("Could not create the Java Virtual Machine: ");
jni-module.cpp:            return err;
jni-module.cpp:        }
jni-module.cpp:    }
jni-module.cpp:    try {
jni-module.cpp:        bootstrap = Globals::init();
jni-module.cpp:    } catch (QoreStandardException &e) {
jni-module.cpp:        throw;
jni-module.cpp:    } catch (JavaException& e) {
jni-module.cpp:        jni_init_failed = true;
jni-module.cpp:        return e.toString();
jni-module.cpp:    } catch (Exception &e) {
jni-module.cpp:        jni_init_failed = true;
jni-module.cpp:        return new QoreStringNode("JVM initialization failed due to an unknown error");
jni-module.cpp:    }
jni-module.cpp:    jni::setup_jdbc_driver();
jni-module.cpp:    printd(5, "jni_module_init() initialized JVM\n");
jni-module.cpp:#ifndef Q_WINDOWS
jni-module.cpp:    {
jni-module.cpp:        sig_vec_t new_sig_vec;
jni-module.cpp:        for (int sig : sig_vec) {
jni-module.cpp:            QoreStringNode *err = qore_reassign_signal(sig, QORE_JNI_MODULE_NAME);
jni-module.cpp:            if (err) {
jni-module.cpp:                // ignore errors; already assigned to another module
jni-module.cpp:                err->deref();
jni-module.cpp:            }
jni-module.cpp:            new_sig_vec.push_back(sig);
jni-module.cpp:        }
jni-module.cpp:        if (!new_sig_vec.empty()) {
jni-module.cpp:            sigset_t mask;
jni-module.cpp:            // setup signal mask
jni-module.cpp:            sigemptyset(&mask);
jni-module.cpp:            for (auto& sig : new_sig_vec) {
jni-module.cpp:                //printd(LogLevel, "jni_module_init() unblocking signal %d\n", sig);
jni-module.cpp:                sigaddset(&mask, sig);
jni-module.cpp:            }
jni-module.cpp:            // unblock threads
jni-module.cpp:            pthread_sigmask(SIG_UNBLOCK, &mask, 0);
jni-module.cpp:        }
jni-module.cpp:    }
jni-module.cpp:#endif
jni-module.cpp:    if (!bootstrap) {
jni-module.cpp:        return jni_module_init_finalize();
jni-module.cpp:    }
jni-module.cpp:    return nullptr;
jni-module.cpp:}
jni-module.cpp:static void jni_module_ns_init(QoreNamespace* rns, QoreNamespace* qns) {
jni-module.cpp:    QoreProgram* pgm = getProgram();
jni-module.cpp:    // we can ignore the first program to be initialized when bootstrapping
jni-module.cpp:    if (bootstrap && !deferred_ns_init) {
jni-module.cpp:        deferred_ns_init = true;
jni-module.cpp:        return;
jni-module.cpp:    }
jni-module.cpp:    assert(pgm->getRootNS() == rns);
jni-module.cpp:    if (!pgm->getExternalData("jni")) {
jni-module.cpp:        QoreNamespace* jnins = qjcm.getJniNs().copy();
jni-module.cpp:        rns->addNamespace(jnins);
jni-module.cpp:        pgm->setExternalData("jni", new JniExternalProgramData(jnins, pgm));
jni-module.cpp:    }
jni-module.cpp:}
jni-module.cpp:static void jni_module_delete() {
jni-module.cpp:    // clear all objects from stored classes before destroying the JVM (releases all global references)
jni-module.cpp:    Globals::clearGlobalContext();
jni-module.cpp:    {
jni-module.cpp:        ExceptionSink xsink;
jni-module.cpp:        qjcm.destroy(xsink);
jni-module.cpp:    }
jni-module.cpp:    tclist.pop(false);
jni-module.cpp:    jni::Jvm::destroyVM();
jni-module.cpp:}
jni-module.cpp:static QoreNamespace* qore_jni_wildcard_import(QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    if (arg[-2] != '.' || arg.strlen() < 3) {
jni-module.cpp:        throw QoreJniException("JNI-IMPORT-ERROR", "invalid import argument: '%s'", arg.getBuffer());
jni-module.cpp:        return nullptr;
jni-module.cpp:    }
jni-module.cpp:    arg.terminate(arg.strlen() - 2);
jni-module.cpp:    arg.replaceAll(".", "::");
jni-module.cpp:    return jni_module_find_create_java_namespace(arg, pgm);
jni-module.cpp:}
jni-module.cpp:extern "C" QoreNamespace* jni_module_find_create_java_namespace(QoreString& arg, QoreProgram* pgm) {
jni-module.cpp:    arg.concat("::x");
jni-module.cpp:    // create jni namespace in root namespace if necessary
jni-module.cpp:    QoreNamespace* jns = pgm->getRootNS()->findLocalNamespace("Jni");
jni-module.cpp:    QoreNamespace* ns = jns->findCreateNamespacePath(arg.c_str());
jni-module.cpp:    printd(LogLevel, "jni_module_find_create_java_namespace() nsp: '%s' ns: %p '%s'\n", arg.c_str(), ns, ns->getName());
jni-module.cpp:    ns->setClassHandler(jni_class_handler);
jni-module.cpp:    return ns;
jni-module.cpp:}
jni-module.cpp:// exported function
jni-module.cpp:extern "C" int jni_module_import(ExceptionSink* xsink, QoreProgram* pgm, const char* import) {
jni-module.cpp:    JniExternalProgramData* jpc = JniExternalProgramData::getCreateJniProgramData(pgm);
jni-module.cpp:        //printd(5, "jni_module_import '%s' jpc: %p jnins: %p pgm: %p\n", import, jpc, jpc->getJniNamespace(), pgm);
jni-module.cpp:    QoreString arg(import);
jni-module.cpp:    try {
jni-module.cpp:        if (arg[-1] != '*') {
jni-module.cpp:            Env env;
jni-module.cpp:            //printd(5, "jni_module_import() non wc lcc arg: '%s' (pgm: %p)\n", arg.c_str(), pgm);
jni-module.cpp:            // the following call adds the class to the current program as well
jni-module.cpp:            qjcm.findCreateQoreClass(env, arg.c_str(), pgm);
jni-module.cpp:        } else {
jni-module.cpp:            QoreNamespace* ns = qore_jni_wildcard_import(arg, pgm, jpc);
jni-module.cpp:            if (!ns) {
jni-module.cpp:                assert(*xsink);
jni-module.cpp:                return -1;
jni-module.cpp:            }
jni-module.cpp:        }
jni-module.cpp:    } catch (jni::Exception& e) {
jni-module.cpp:        e.convert(xsink);
jni-module.cpp:        return -1;
jni-module.cpp:    }
jni-module.cpp:    return 0;
jni-module.cpp:}
jni-module.cpp:static void jni_module_parse_cmd(const QoreString& cmd, ExceptionSink* xsink) {
jni-module.cpp:    printd(LogLevel, "jni_module_parse_cmd() cmd: '%s'\n", cmd.c_str());
jni-module.cpp:    const char* p = strchr(cmd.getBuffer(), ' ');
jni-module.cpp:    if (!p) {
jni-module.cpp:        xsink->raiseException("JNI-PARSE-COMMAND-ERROR", "missing command name in parse command: '%s'", cmd.getBuffer());
jni-module.cpp:        return;
jni-module.cpp:    }
jni-module.cpp:    QoreString str(&cmd, p - cmd.getBuffer());
jni-module.cpp:    QoreString arg(cmd);
jni-module.cpp:    arg.replace(0, p - cmd.getBuffer() + 1, (const char*)0);
jni-module.cpp:    arg.trim();
jni-module.cpp:    mcmap_t::const_iterator i = mcmap.find(str.c_str());
jni-module.cpp:    if (i == mcmap.end()) {
jni-module.cpp:        QoreStringNode* desc = new QoreStringNodeMaker("unrecognized command '%s' in '%s' (valid commands: ", str.c_str(), cmd.c_str());
jni-module.cpp:        for (mcmap_t::const_iterator i = mcmap.begin(), e = mcmap.end(); i != e; ++i) {
jni-module.cpp:            if (i != mcmap.begin())
jni-module.cpp:                desc->concat(", ");
jni-module.cpp:            desc->sprintf("'%s'", i->first.c_str());
jni-module.cpp:        }
jni-module.cpp:        desc->concat(')');
jni-module.cpp:        xsink->raiseException("JNI-PARSE-COMMAND-ERROR", desc);
jni-module.cpp:        return;
jni-module.cpp:    }
jni-module.cpp:    // we must use "getProgram()" here for the parse context QoreProgram
jni-module.cpp:    QoreProgram* pgm = getProgram();
jni-module.cpp:    JniExternalProgramData* jpc = JniExternalProgramData::getCreateJniProgramData(pgm);
jni-module.cpp:    try {
jni-module.cpp:        i->second(arg, pgm, jpc);
jni-module.cpp:    } catch (jni::Exception& e) {
jni-module.cpp:        e.convert(xsink);
jni-module.cpp:    }
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_import(const QoreString& cmd_arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    QoreString arg(cmd_arg);
jni-module.cpp:    assert(pgm);
jni-module.cpp:    assert(pgm->checkFeature(QORE_JNI_MODULE_NAME));
jni-module.cpp:    // process import statement
jni-module.cpp:    printd(LogLevel, "qore_jni_mc_import() pgm: %p arg: %s c: %c\n", pgm, arg.getBuffer(), arg[-1]);
jni-module.cpp:    // see if there is a wildcard at the end
jni-module.cpp:    if (arg[-1] == '*') {
jni-module.cpp:        qore_jni_wildcard_import(arg, pgm, jpc);
jni-module.cpp:    } else {
jni-module.cpp:        printd(LogLevel, "jni_module_parse_cmd() non wc lcc arg: '%s' (pgm: %p)\n", arg.c_str(), pgm);
jni-module.cpp:        Env env;
jni-module.cpp:        env.callVoidMethod(jpc->getClassLoader(), Globals::methodQoreURLClassLoaderSetContext, nullptr);
jni-module.cpp:        // the following call adds the class to the current program as well
jni-module.cpp:        qjcm.findCreateQoreClass(env, arg.c_str(), pgm, jpc);
jni-module.cpp:    }
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_add_classpath(const QoreString& cmd_arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    QoreString arg(cmd_arg);
jni-module.cpp:    q_env_subst(arg);
jni-module.cpp:    printd(LogLevel, "qore_jni_mc_add_classpath() jpc: %p arg: '%s'\n", jpc, arg.c_str());
jni-module.cpp:    jpc->addClasspath(arg.c_str());
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_add_relative_classpath(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    SimpleRefHolder<QoreStringNode> cwd_str;
jni-module.cpp:    assert(pgm);
jni-module.cpp:    cwd_str = pgm->getScriptDir();
jni-module.cpp:    if (!cwd_str) {
jni-module.cpp:        char* cwd = getcwd(nullptr, 0);
jni-module.cpp:        if (!cwd) {
jni-module.cpp:            throw QoreJniException("JNI-ADD-RELATIVE-CLASSPATH-ERROR", "cannot determine relative path; there is no " \
jni-module.cpp:                "information in the Program context and cannot get current working directory: %s", strerror(errno));
jni-module.cpp:        }
jni-module.cpp:        ON_BLOCK_EXIT(free, cwd);
jni-module.cpp:        cwd_str = new QoreStringNode(cwd);
jni-module.cpp:    }
jni-module.cpp:    cwd_str->concat(QORE_DIR_SEP);
jni-module.cpp:    cwd_str->concat(arg.c_str());
jni-module.cpp:    q_normalize_path(**cwd_str);
jni-module.cpp:    cwd_str->concat('/');
jni-module.cpp:    printd(LogLevel, "qore_jni_mc_add_relative_classpath() arg: '%s' cwd: '%s'\n", arg.c_str(), cwd_str->c_str());
jni-module.cpp:    jpc->addClasspath(cwd_str->c_str());
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_define_pending_class(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    assert(pgm);
jni-module.cpp:    assert(pgm->checkFeature(QORE_JNI_MODULE_NAME));
jni-module.cpp:    // find end of name
jni-module.cpp:    qore_offset_t end = arg.find(' ');
jni-module.cpp:    if (end == -1) {
jni-module.cpp:        throw QoreJniException("JNI-DEFINE-CLASS-ERROR", "cannot find the end of the class name in the 'define-pending-class' directive");
jni-module.cpp:    }
jni-module.cpp:    QoreString java_name(&arg, end);
jni-module.cpp:    QoreString base64(arg.c_str() + end + 1);
jni-module.cpp:    ExceptionSink xsink;
jni-module.cpp:    SimpleRefHolder<BinaryNode> byte_code(base64.parseBase64(&xsink));
jni-module.cpp:    if (xsink) {
jni-module.cpp:        throw XsinkException(xsink);
jni-module.cpp:    }
jni-module.cpp:    jni::Env env;
jni-module.cpp:    assert(jpc);
jni-module.cpp:    printd(5, "define-pending-class %s pgm: %p loader: %x\n", java_name.c_str(), pgm,
jni-module.cpp:        env.callIntMethod((jobject)jpc->getClassLoader(), jni::Globals::methodObjectHashCode, nullptr));
jni-module.cpp:    // convert java name to dot name; QoreURLClassLoader.addPendingClass() requires the dot name
jni-module.cpp:    java_name.replaceAll("/", ".");
jni-module.cpp:    // add the byte code as a pending class
jni-module.cpp:    LocalReference<jstring> jname = env.newString(java_name.c_str());
jni-module.cpp:    LocalReference<jbyteArray> jbyte_code = QoreToJava::makeByteArray(env, **byte_code);
jni-module.cpp:    std::vector<jvalue> jargs(2);
jni-module.cpp:    jargs[0].l = jname;
jni-module.cpp:    jargs[1].l = jbyte_code;
jni-module.cpp:    env.callVoidMethod(jpc->getClassLoader(), Globals::methodQoreURLClassLoaderAddPendingClass, &jargs[0]);
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_define_class(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    assert(pgm);
jni-module.cpp:    assert(pgm->checkFeature(QORE_JNI_MODULE_NAME));
jni-module.cpp:    assert(jpc);
jni-module.cpp:    // find end of name
jni-module.cpp:    qore_offset_t end = arg.find(' ');
jni-module.cpp:    if (end == -1) {
jni-module.cpp:        throw QoreJniException("JNI-DEFINE-CLASS-ERROR", "cannot find the end of the class name in the 'define-class' directive");
jni-module.cpp:    }
jni-module.cpp:    QoreString java_name(&arg, end);
jni-module.cpp:    QoreString base64(arg.c_str() + end + 1);
jni-module.cpp:    ExceptionSink xsink;
jni-module.cpp:    SimpleRefHolder<BinaryNode> byte_code(base64.parseBase64(&xsink));
jni-module.cpp:    if (xsink) {
jni-module.cpp:        throw XsinkException(xsink);
jni-module.cpp:    }
jni-module.cpp:    jni::Env env;
jni-module.cpp:    // XXX DEBUG
jni-module.cpp:    QoreProgram* ptr = (QoreProgram*)env.callLongMethod(jpc->getClassLoader(), Globals::methodQoreURLClassLoaderGetPtr, nullptr);
jni-module.cpp:    assert(ptr == pgm);
jni-module.cpp:    env.callVoidMethod(jpc->getClassLoader(), Globals::methodQoreURLClassLoaderSetContext, nullptr);
jni-module.cpp:    //printd(5, "qore_jni_mc_define_class() jpc: %p name: '%s' class size: %d\n", jpc, java_name.c_str(), byte_code->size());
jni-module.cpp:    // conver to binary name
jni-module.cpp:    QoreString binary_name(java_name);
jni-module.cpp:    binary_name.replaceAll("/", ".");
jni-module.cpp:    assert(jpc->getClassLoader());
jni-module.cpp:    LocalReference<jclass> jcls = Globals::findDefineClass(env, binary_name.c_str(), jpc->getClassLoader(),
jni-module.cpp:        static_cast<const unsigned char*>(byte_code->getPtr()), byte_code->size());
jni-module.cpp:    //LocalReference<jclass> jcls = env.defineClass(java_name.c_str(), jpc->getClassLoader(),
jni-module.cpp:    //    static_cast<const unsigned char*>(byte_code->getPtr()), byte_code->size());
jni-module.cpp:    // import the class immediately
jni-module.cpp:    qjcm.findCreateQoreClassInProgram(binary_name, java_name.c_str(), new Class(jcls), pgm);
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_set_compat_types(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    assert(pgm);
jni-module.cpp:    assert(pgm->checkFeature(QORE_JNI_MODULE_NAME));
jni-module.cpp:    assert(jpc);
jni-module.cpp:    bool compat_types = q_parse_bool(arg.c_str());
jni-module.cpp:    jpc->overrideCompatTypes(compat_types);
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_set_property(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    assert(pgm);
jni-module.cpp:    assert(pgm->checkFeature(QORE_JNI_MODULE_NAME));
jni-module.cpp:    assert(jpc);
jni-module.cpp:    // find end of property name
jni-module.cpp:    qore_offset_t end = arg.find(' ');
jni-module.cpp:    if (end == -1) {
jni-module.cpp:        throw QoreJniException("JNI-SET-PROPERTY-ERROR", "cannot find the end of the property name in the 'set-property' directive");
jni-module.cpp:    }
jni-module.cpp:    QoreString property(&arg, end);
jni-module.cpp:    QoreString value(arg.c_str() + end + 1);
jni-module.cpp:    //printd(5, "qore_jni_mc_set_property() '%s' = '%s'\n", property.c_str(), value.c_str());
jni-module.cpp:    jni::Env env;
jni-module.cpp:    LocalReference<jstring> jprop = env.newString(property.c_str());
jni-module.cpp:    LocalReference<jstring> jval = env.newString(value.c_str());
jni-module.cpp:    std::vector<jvalue> jargs(2);
jni-module.cpp:    jargs[0].l = jprop;
jni-module.cpp:    jargs[1].l = jval;
jni-module.cpp:    LocalReference<jstring> str = env.callStaticObjectMethod(Globals::classSystem,
jni-module.cpp:        Globals::methodSystemSetProperty, &jargs[0]).as<jstring>();
jni-module.cpp:    str = nullptr;
jni-module.cpp:}
jni-module.cpp:static void qore_jni_mc_mark_module_injected(const QoreString& arg, QoreProgram* pgm, JniExternalProgramData* jpc) {
jni-module.cpp:    assert(pgm);
jni-module.cpp:    assert(pgm->checkFeature(QORE_JNI_MODULE_NAME));
jni-module.cpp:    assert(jpc);
jni-module.cpp:    jpc->addInjectedModule(arg.c_str());
jni-module.cpp:}
jni-module.cpp:QoreClass* jni_class_handler(QoreNamespace* ns, const char* cname) {
jni-module.cpp:    // get full class path
jni-module.cpp:    QoreString cp(ns->getName());
jni-module.cpp:    cp.concat('.');
jni-module.cpp:    cp.concat(cname);
jni-module.cpp:    const QoreNamespace* jns = ns;
jni-module.cpp:    while (true) {
jni-module.cpp:        printd(LogLevel, "jni_class_handler() ns: %p (%s) jns: %p (%s) cname: %s\n", ns, ns->getName(), jns, jns->getName(), cname);
jni-module.cpp:        jns = jns->getParent();
jni-module.cpp:        assert(jns);
jni-module.cpp:        if (!strcmp(jns->getName(), "Jni"))
jni-module.cpp:            break;
jni-module.cpp:        cp.prepend(".");
jni-module.cpp:        cp.prepend(jns->getName());
jni-module.cpp:    }
jni-module.cpp:    printd(LogLevel, "jni_class_handler() ns: %p cname: %s cp: %s\n", ns, cname, cp.c_str());
jni-module.cpp:    QoreProgram* pgm = ns->getProgram();
jni-module.cpp:    assert(pgm);
jni-module.cpp:    try {
jni-module.cpp:        Env env;
jni-module.cpp:        QoreClass* qc = qjcm.findCreateQoreClass(env, cp.c_str(), pgm);
jni-module.cpp:        printd(LogLevel, "jni_class_handler() cp: %s returning qc: %p\n", cp.c_str(), qc);
jni-module.cpp:        return qc;
jni-module.cpp:    } catch (jni::JavaException& e) {
jni-module.cpp:        // ignore class not found exceptions here
jni-module.cpp:        e.ignoreOrRethrowNoClass();
jni-module.cpp:    } catch (jni::Exception& e) {
jni-module.cpp:        // display exception info on the console as an unhandled exception
jni-module.cpp:        {
jni-module.cpp:            ExceptionSink xsink;
jni-module.cpp:            e.convert(&xsink);
jni-module.cpp:        }
jni-module.cpp:        assert(false);
jni-module.cpp:    }
jni-module.cpp:    return nullptr;
jni-module.cpp:}
Field.h://--------------------------------------------------------------------*- C++ -*-
Field.h://
Field.h://  Qore Programming Language
Field.h://
Field.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Field.h://
Field.h://  Permission is hereby granted, free of charge, to any person obtaining a
Field.h://  copy of this software and associated documentation files (the "Software"),
Field.h://  to deal in the Software without restriction, including without limitation
Field.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Field.h://  and/or sell copies of the Software, and to permit persons to whom the
Field.h://  Software is furnished to do so, subject to the following conditions:
Field.h://
Field.h://  The above copyright notice and this permission notice shall be included in
Field.h://  all copies or substantial portions of the Software.
Field.h://
Field.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Field.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Field.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Field.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Field.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Field.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Field.h://  DEALINGS IN THE SOFTWARE.
Field.h://
Field.h://------------------------------------------------------------------------------
Field.h:///
Field.h:/// \file
Field.h:/// \brief Defines the Field class.
Field.h:///
Field.h://------------------------------------------------------------------------------
Field.h:#ifndef QORE_JNI_FIELD_H_
Field.h:#define QORE_JNI_FIELD_H_
Field.h:#include <qore/Qore.h>
Field.h:#include <classfile_constants.h>
Field.h:#include "Class.h"
Field.h:#include "Globals.h"
Field.h:#include "Env.h"
Field.h:#include "QoreJniClassMap.h"
Field.h:namespace jni {
Field.h:/**
Field.h: * \brief Represents a Java field.
Field.h: */
Field.h:class BaseField : public ObjectBase {
Field.h:public:
Field.h:    /**
Field.h:     * \brief Constructor.
Field.h:     * \param cls the class associated with the field id
Field.h:     * \param id the field id
Field.h:     * \param isStatic true if the field is static
Field.h:     */
Field.h:    BaseField(Class *cls, jfieldID id, bool isStatic) : cls(cls), id(id) {
Field.h:        printd(LogLevel, "BaseField::BaseField(), this: %p, cls: %p, id: %p\n", this, cls, id);
Field.h:        Env env;
Field.h:        field = env.toReflectedField(cls->getJavaObject(), id, isStatic).makeGlobal();
Field.h:        init(env);
Field.h:    }
Field.h:    /**
Field.h:     * \brief Constructor.
Field.h:     * \param field an instance of java.lang.reflect.Field
Field.h:     * \param cls the owning class
Field.h:     */
Field.h:    BaseField(jobject field, Class* cls) : cls(cls) {
Field.h:        Env env;
Field.h:        id = env.fromReflectedField(field);
Field.h:        this->field = GlobalReference<jobject>::fromLocal(field);
Field.h:        printd(LogLevel, "BaseField::BaseField(), this: %p, cls: %p, id: %p\n", this, cls, id);
Field.h:        init(env);
Field.h:    }
Field.h:    ~BaseField() {
Field.h:        printd(LogLevel, "BaseField::~BaseField(), this: %p, cls: %p, id: %p\n", this, cls, id);
Field.h:    }
Field.h:    /**
Field.h:     * \brief Gets the value of an instance field.
Field.h:     *
Field.h:     * \param object the instance
Field.h:     * \param compat_types if backwards-compatible types should be used
Field.h:     *
Field.h:     * \return the value of the static field
Field.h:     *
Field.h:     * \throws Exception if the value cannot be retrieved
Field.h:     */
Field.h:    QoreValue get(jobject object, QoreProgram* pgm, bool compat_types);
Field.h:    /**
Field.h:     * \brief Sets the value of an instance field.
Field.h:     * \param object the instance
Field.h:     * \param value the new value
Field.h:     * \throws Exception if the value cannot be set
Field.h:     */
Field.h:    void set(jobject object, const QoreValue &value, JniExternalProgramData* jpc);
Field.h:    /**
Field.h:     * \brief Gets the value of a static field.
Field.h:     * \return the value of the static field
Field.h:     * \throws Exception if the value cannot be retrieved
Field.h:     */
Field.h:    QoreValue getStatic(QoreProgram* pgm, bool compat_types);
Field.h:    /**
Field.h:     * \brief Sets the value of a static field.
Field.h:     * \param value the new value
Field.h:     * \throws Exception if the value cannot be set
Field.h:     */
Field.h:    void setStatic(const QoreValue &value, JniExternalProgramData* jpc);
Field.h:    jobject getJavaObject() const override {
Field.h:        return field;
Field.h:    }
Field.h:    DLLLOCAL void getName(QoreString& str);
Field.h:    DLLLOCAL const QoreTypeInfo* getQoreTypeInfo(QoreJniClassMap& clsmap, QoreProgram* pgm = nullptr) {
Field.h:        return clsmap.getQoreType(typeClass, pgm);
Field.h:    }
Field.h:    DLLLOCAL int isStatic() const {
Field.h:        return mods & JVM_ACC_STATIC;
Field.h:    }
Field.h:    DLLLOCAL int isFinal() const {
Field.h:        return mods & JVM_ACC_FINAL;
Field.h:    }
Field.h:    ClassAccess getAccess() const {
Field.h:        ClassAccess access = Public;
Field.h:        if (mods & JVM_ACC_PRIVATE)
Field.h:            access = Internal;
Field.h:        else if (mods & JVM_ACC_PROTECTED)
Field.h:            access = Private;
Field.h:        return access;
Field.h:    }
Field.h:protected:
Field.h:    DLLLOCAL BaseField() {
Field.h:    }
Field.h:    DLLLOCAL void init(Env &env) {
Field.h:        typeClass = env.callObjectMethod(field, Globals::methodFieldGetType, nullptr).as<jclass>().makeGlobal();
Field.h:        type = Globals::getType(typeClass);
Field.h:        mods = env.callIntMethod(field, Globals::methodFieldGetModifiers, nullptr);
Field.h:    }
Field.h:protected:
Field.h:    Class* cls;
Field.h:    jfieldID id;
Field.h:    GlobalReference<jobject> field;              // the instance of java.lang.reflect.Field
Field.h:    GlobalReference<jclass> typeClass;           // the type of the field
Field.h:    Type type;
Field.h:    int mods;
Field.h:};
Field.h:class Field : public BaseField {
Field.h:public:
Field.h:   /**
Field.h:    * \brief Constructor.
Field.h:    * \param cls the class associated with the field id
Field.h:    * \param id the field id
Field.h:    * \param isStatic true if the field is static
Field.h:    */
Field.h:   Field(Class *cls, jfieldID id, bool isStatic) : BaseField(cls, id, isStatic) {
Field.h:      cls->ref();
Field.h:      cls_holder = cls;
Field.h:   }
Field.h:   /**
Field.h:    * \brief Constructor.
Field.h:    * \param field an instance of java.lang.reflect.Field
Field.h:    */
Field.h:   Field(jobject field) {
Field.h:      Env env;
Field.h:      cls_holder = cls = new Class(env.callObjectMethod(field, Globals::methodFieldGetDeclaringClass, nullptr).as<jclass>());
Field.h:      id = env.fromReflectedField(field);
Field.h:      this->field = GlobalReference<jobject>::fromLocal(field);
Field.h:      printd(LogLevel, "Field::Field(), this: %p, cls: %p, id: %p\n", this, cls, id);
Field.h:      init(env);
Field.h:   }
Field.h:private:
Field.h:   SimpleRefHolder<Class> cls_holder;
Field.h:};
Field.h:} // namespace jni
Field.h:#endif // QORE_JNI_FIELD_H_
QoreJdbcPreparedStatement.cpp:/* -*- indent-tabs-mode: nil -*- */
QoreJdbcPreparedStatement.cpp:/*
QoreJdbcPreparedStatement.cpp:    QoreJdbcPreparedStatement.cpp
QoreJdbcPreparedStatement.cpp:    Qore Programming Language JNI Module
QoreJdbcPreparedStatement.cpp:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcPreparedStatement.cpp:    This library is free software; you can redistribute it and/or
QoreJdbcPreparedStatement.cpp:    modify it under the terms of the GNU Lesser General Public
QoreJdbcPreparedStatement.cpp:    License as published by the Free Software Foundation; either
QoreJdbcPreparedStatement.cpp:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcPreparedStatement.cpp:    This library is distributed in the hope that it will be useful,
QoreJdbcPreparedStatement.cpp:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcPreparedStatement.cpp:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcPreparedStatement.cpp:    Lesser General Public License for more details.
QoreJdbcPreparedStatement.cpp:    You should have received a copy of the GNU Lesser General Public
QoreJdbcPreparedStatement.cpp:    License along with this library; if not, write to the Free Software
QoreJdbcPreparedStatement.cpp:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcPreparedStatement.cpp:*/
QoreJdbcPreparedStatement.cpp:#include "QoreJdbcPreparedStatement.h"
QoreJdbcPreparedStatement.cpp:namespace jni {
QoreJdbcPreparedStatement.cpp:QoreJdbcPreparedStatement::QoreJdbcPreparedStatement(ExceptionSink* xsink, QoreJdbcConnection* c) :
QoreJdbcPreparedStatement.cpp:        QoreJdbcStatement(xsink, c) {
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:QoreJdbcPreparedStatement::~QoreJdbcPreparedStatement() {
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:int QoreJdbcPreparedStatement::prepare(const QoreString& qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    // Convert string to required character encoding.
QoreJdbcPreparedStatement.cpp:    TempEncodingHelper str(qstr, QCS_UTF8, xsink);
QoreJdbcPreparedStatement.cpp:    if (*xsink) {
QoreJdbcPreparedStatement.cpp:        return false;
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    str.makeTemp();
QoreJdbcPreparedStatement.cpp:    if (parse(const_cast<QoreString*>(*str), args, xsink)) {
QoreJdbcPreparedStatement.cpp:        assert(*xsink);
QoreJdbcPreparedStatement.cpp:        return -1;
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    sql = *str;
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        //printd(5, "QoreJdbcPreparedStatement::prepare() this: %p '%s' args: %zd cvec: %zd\n", this, str->c_str(),
QoreJdbcPreparedStatement.cpp:        //    args ? args->size() : 0, cvec.size());
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        prepareStatement(env, *str);
QoreJdbcPreparedStatement.cpp:        // Save bind arguments
QoreJdbcPreparedStatement.cpp:        assignBindArgs(xsink, args ? args->listRefSelf() : nullptr);
QoreJdbcPreparedStatement.cpp:        return 0;
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return -1;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:int QoreJdbcPreparedStatement::exec(ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        if (bindQueryArguments(env, xsink)) {
QoreJdbcPreparedStatement.cpp:            assert(*xsink);
QoreJdbcPreparedStatement.cpp:            return -1;
QoreJdbcPreparedStatement.cpp:        }
QoreJdbcPreparedStatement.cpp:        if (execIntern(env, sql, xsink)
QoreJdbcPreparedStatement.cpp:            && (acquireResultSet(env, xsink) || describeResultSet(env, xsink))) {
QoreJdbcPreparedStatement.cpp:                return -1;
QoreJdbcPreparedStatement.cpp:        }
QoreJdbcPreparedStatement.cpp:        return *xsink ? -1 : 0;
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return -1;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:int QoreJdbcPreparedStatement::bind(const QoreListNode& args, ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        assignBindArgs(xsink, args.listRefSelf());
QoreJdbcPreparedStatement.cpp:        return *xsink ? -1 : 0;
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return -1;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:QoreHashNode* QoreJdbcPreparedStatement::getOutputHash(ExceptionSink* xsink, bool empty_hash_if_nothing,
QoreJdbcPreparedStatement.cpp:        int max_rows) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        return getOutputHashIntern(env, xsink, empty_hash_if_nothing, max_rows);
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return nullptr;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:QoreHashNode* QoreJdbcPreparedStatement::fetchRow(ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        return getSingleRowIntern(env, xsink);
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return nullptr;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:QoreListNode* QoreJdbcPreparedStatement::fetchRows(int max_rows, ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        return getOutputListIntern(env, xsink, max_rows);
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return nullptr;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:QoreHashNode* QoreJdbcPreparedStatement::fetchColumns(int max_rows, ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        return getOutputHashIntern(env, xsink, true, max_rows);
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return nullptr;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:bool QoreJdbcPreparedStatement::next(ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        return QoreJdbcStatement::next(env);
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return false;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:int QoreJdbcPreparedStatement::clear(ExceptionSink* xsink) {
QoreJdbcPreparedStatement.cpp:    try {
QoreJdbcPreparedStatement.cpp:        //printd(5, "QoreJdbcPreparedStatement::clear() %p\n", this);
QoreJdbcPreparedStatement.cpp:        assignBindArgs(xsink, nullptr);
QoreJdbcPreparedStatement.cpp:        sql.clear();
QoreJdbcPreparedStatement.cpp:        Env env;
QoreJdbcPreparedStatement.cpp:        reset(env);
QoreJdbcPreparedStatement.cpp:        return *xsink ? -1 : 0;
QoreJdbcPreparedStatement.cpp:    } catch (JavaException& e) {
QoreJdbcPreparedStatement.cpp:        e.convert(xsink);
QoreJdbcPreparedStatement.cpp:    }
QoreJdbcPreparedStatement.cpp:    return -1;
QoreJdbcPreparedStatement.cpp:}
QoreJdbcPreparedStatement.cpp:}
InvocationHandler.cpp://--------------------------------------------------------------------*- C++ -*-
InvocationHandler.cpp://
InvocationHandler.cpp://  Qore Programming Language
InvocationHandler.cpp://
InvocationHandler.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
InvocationHandler.cpp://
InvocationHandler.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
InvocationHandler.cpp://  copy of this software and associated documentation files (the "Software"),
InvocationHandler.cpp://  to deal in the Software without restriction, including without limitation
InvocationHandler.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
InvocationHandler.cpp://  and/or sell copies of the Software, and to permit persons to whom the
InvocationHandler.cpp://  Software is furnished to do so, subject to the following conditions:
InvocationHandler.cpp://
InvocationHandler.cpp://  The above copyright notice and this permission notice shall be included in
InvocationHandler.cpp://  all copies or substantial portions of the Software.
InvocationHandler.cpp://
InvocationHandler.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
InvocationHandler.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
InvocationHandler.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
InvocationHandler.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
InvocationHandler.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
InvocationHandler.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
InvocationHandler.cpp://  DEALINGS IN THE SOFTWARE.
InvocationHandler.cpp://
InvocationHandler.cpp://------------------------------------------------------------------------------
InvocationHandler.cpp:#include "InvocationHandler.h"
InvocationHandler.cpp:#include "Globals.h"
InvocationHandler.cpp:namespace jni {
InvocationHandler.cpp:InvocationHandler::InvocationHandler(std::unique_ptr<Dispatcher> dispatcher) {
InvocationHandler.cpp:   Env env;
InvocationHandler.cpp:   jvalue arg;
InvocationHandler.cpp:   arg.j = reinterpret_cast<jlong>(dispatcher.get());
InvocationHandler.cpp:   LocalReference<jobject> obj = env.newObject(Globals::classQoreInvocationHandler, Globals::ctorQoreInvocationHandler, &arg);
InvocationHandler.cpp:   dispatcher.release();    // from now on, the Java instance of QoreInvocationHandler is responsible for the dispatcher
InvocationHandler.cpp:   jobj = obj.makeGlobal();
InvocationHandler.cpp:}
InvocationHandler.cpp:InvocationHandler::InvocationHandler(const ResolvedCallReferenceNode *callback)
InvocationHandler.cpp:      : InvocationHandler(std::unique_ptr<Dispatcher>(new QoreCodeDispatcher(callback))) {
InvocationHandler.cpp:}
InvocationHandler.cpp:void InvocationHandler::destroy() {
InvocationHandler.cpp:   Env env;
InvocationHandler.cpp:   env.callVoidMethod(jobj, Globals::methodQoreInvocationHandlerDestroy, nullptr);
InvocationHandler.cpp:}
InvocationHandler.cpp:} // namespace jni
QoreJdbcConnection.cpp:/* -*- indent-tabs-mode: nil -*- */
QoreJdbcConnection.cpp:/*
QoreJdbcConnection.cpp:    QoreJdbcConnection.cpp
QoreJdbcConnection.cpp:    Qore Programming Language JNI Module
QoreJdbcConnection.cpp:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcConnection.cpp:    This library is free software; you can redistribute it and/or
QoreJdbcConnection.cpp:    modify it under the terms of the GNU Lesser General Public
QoreJdbcConnection.cpp:    License as published by the Free Software Foundation; either
QoreJdbcConnection.cpp:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcConnection.cpp:    This library is distributed in the hope that it will be useful,
QoreJdbcConnection.cpp:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcConnection.cpp:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcConnection.cpp:    Lesser General Public License for more details.
QoreJdbcConnection.cpp:    You should have received a copy of the GNU Lesser General Public
QoreJdbcConnection.cpp:    License along with this library; if not, write to the Free Software
QoreJdbcConnection.cpp:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcConnection.cpp:*/
QoreJdbcConnection.cpp:#include "QoreJdbcConnection.h"
QoreJdbcConnection.cpp:#include "QoreJdbcStatement.h"
QoreJdbcConnection.cpp:#include "QoreJdbcDriver.h"
QoreJdbcConnection.cpp:#include "LocalReference.h"
QoreJdbcConnection.cpp:#include "Globals.h"
QoreJdbcConnection.cpp:#include "QoreToJava.h"
QoreJdbcConnection.cpp:#include "Env.h"
QoreJdbcConnection.cpp:#include <vector>
QoreJdbcConnection.cpp:namespace jni {
QoreJdbcConnection.cpp:static void set_prop(Env& env, LocalReference<jobject>& props, const char* prop, const char* val) {
QoreJdbcConnection.cpp:    std::vector<jvalue> jargs(2);
QoreJdbcConnection.cpp:    LocalReference<jstring> jprop = env.newString(prop);
QoreJdbcConnection.cpp:    jargs[0].l = jprop;
QoreJdbcConnection.cpp:    LocalReference<jstring> jval = env.newString(val);
QoreJdbcConnection.cpp:    jargs[1].l = jval;
QoreJdbcConnection.cpp:    LocalReference<jobject> ignore = env.callObjectMethod(props, Globals::methodPropertiesSetProperty, &jargs[0]);
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreJdbcConnection::QoreJdbcConnection(Datasource* ds, ExceptionSink* xsink) : ds(ds) {
QoreJdbcConnection.cpp:    assert(pgm);
QoreJdbcConnection.cpp:    jpc = JniExternalProgramData::getCreateJniProgramData(pgm);
QoreJdbcConnection.cpp:    assert(jpc);
QoreJdbcConnection.cpp:    // Parse options passed through the datasource.
QoreJdbcConnection.cpp:    if (parseOptions(xsink)) {
QoreJdbcConnection.cpp:        return;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    if (connect(env, xsink)) {
QoreJdbcConnection.cpp:        assert(*xsink);
QoreJdbcConnection.cpp:        return;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    // determine DB type
QoreJdbcConnection.cpp:    LocalReference<jobject> md = env.callObjectMethod(connection, Globals::methodConnectionGetMetaData, nullptr);
QoreJdbcConnection.cpp:    if (!md) {
QoreJdbcConnection.cpp:        return;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:#if 0
QoreJdbcConnection.cpp:    LocalReference<jstring> str = env.callObjectMethod(md,
QoreJdbcConnection.cpp:        Globals::methodDatabaseMetaDataGetDatabaseProductName, nullptr).as<jstring>();
QoreJdbcConnection.cpp:    if (str) {
QoreJdbcConnection.cpp:        Env::GetStringUtfChars jname(env, str);
QoreJdbcConnection.cpp:        QoreString product_name(jname.c_str());
QoreJdbcConnection.cpp:        product_name.tolwr();
QoreJdbcConnection.cpp:        if (product_name.startsWith("oracle")) {
QoreJdbcConnection.cpp:            dbtype = DBT_ORACLE;
QoreJdbcConnection.cpp:            array_support = DAS_SUPPORTED;
QoreJdbcConnection.cpp:            LocalReference<jclass> cls = env.callObjectMethod(connection, Globals::methodObjectGetClass, nullptr)
QoreJdbcConnection.cpp:                .as<jclass>();
QoreJdbcConnection.cpp:            methodOracleConnectionCreateOracleArray = env.getMethod(cls, "createOracleArray",
QoreJdbcConnection.cpp:                "(Ljava/lang/String;Ljava/lang/Object;)Ljava/sql/Array;");
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:#endif
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreJdbcConnection::~QoreJdbcConnection() {
QoreJdbcConnection.cpp:    assert(!connection);
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:int QoreJdbcConnection::reconnect(Env& env, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    close(env);
QoreJdbcConnection.cpp:    return connect(env, xsink);
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:int QoreJdbcConnection::connect(Env& env, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(!connection);
QoreJdbcConnection.cpp:    // get URL
QoreJdbcConnection.cpp:    const std::string& str = db.empty() ? ds->getDBNameStr() : db;
QoreJdbcConnection.cpp:    if (str.empty()) {
QoreJdbcConnection.cpp:        xsink->raiseException("JDBC-CONNECTION-ERROR", "cannot build JDBC URL without a db name or 'url' connection "
QoreJdbcConnection.cpp:            "option");
QoreJdbcConnection.cpp:        return -1;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    QoreStringMaker url("%s%s", !str.rfind("jdbc:", 0) ? "" : "jdbc:", str.c_str());
QoreJdbcConnection.cpp:    //printd(5, "QoreJdbcConnection::connect() using URL '%s'\n", url.c_str());
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        LocalReference<jobject> props = env.newObject(Globals::classProperties, Globals::ctorProperties, nullptr);
QoreJdbcConnection.cpp:        {
QoreJdbcConnection.cpp:            const std::string& str = ds->getUsernameStr();
QoreJdbcConnection.cpp:            if (!str.empty()) {
QoreJdbcConnection.cpp:                set_prop(env, props, "user", str.c_str());
QoreJdbcConnection.cpp:            }
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        {
QoreJdbcConnection.cpp:            const std::string& str = ds->getPasswordStr();
QoreJdbcConnection.cpp:            if (!str.empty()) {
QoreJdbcConnection.cpp:                set_prop(env, props, "password", str.c_str());
QoreJdbcConnection.cpp:            }
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        std::vector<jvalue> jargs(2);
QoreJdbcConnection.cpp:        LocalReference<jstring> jurl = env.newString(url.c_str());
QoreJdbcConnection.cpp:        jargs[0].l = jurl;
QoreJdbcConnection.cpp:        jargs[1].l = props;
QoreJdbcConnection.cpp:        connection = env.callStaticObjectMethod(Globals::classDriverManager,
QoreJdbcConnection.cpp:            Globals::methodDriverManagerGetConnection, &jargs[0]).makeGlobal();
QoreJdbcConnection.cpp:        // turn off autocommit
QoreJdbcConnection.cpp:        jargs[0].z = false;
QoreJdbcConnection.cpp:        env.callVoidMethod(connection, Globals::methodConnectionSetAutoCommit, &jargs[0]);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:        xsink->appendLastDescription(" (using JDBC URL: '%s')", url.c_str());
QoreJdbcConnection.cpp:        return -1;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(!*xsink);
QoreJdbcConnection.cpp:    return 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:int QoreJdbcConnection::parseOptions(ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    ConstHashIterator hi(ds->getConnectOptions());
QoreJdbcConnection.cpp:    while (hi.next()) {
QoreJdbcConnection.cpp:        //printd(5, "QoreJdbcConnection::parseOptions() this: %p '%s' = %s\n", this, hi.getKey(),
QoreJdbcConnection.cpp:        //    hi.get().getFullTypeName());
QoreJdbcConnection.cpp:        if (setOption(hi.getKey(), hi.get(), xsink)) {
QoreJdbcConnection.cpp:            return -1;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:int QoreJdbcConnection::close(Env& env) {
QoreJdbcConnection.cpp:    if (!connection) {
QoreJdbcConnection.cpp:        return 0;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    JavaExceptionRethrowHelper erh;
QoreJdbcConnection.cpp:    env.callVoidMethod(connection, Globals::methodConnectionClose, nullptr);
QoreJdbcConnection.cpp:    connection = nullptr;
QoreJdbcConnection.cpp:    return 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:int QoreJdbcConnection::setOption(const char* opt, const QoreValue val, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    if (!strcasecmp(opt, JDBC_OPT_CLASSPATH)) {
QoreJdbcConnection.cpp:        if (val.getType() != NT_STRING) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-OPTION-ERROR", "'%s' expects a 'string' value; got type '%s' instead",
QoreJdbcConnection.cpp:                JDBC_OPT_CLASSPATH, val.getFullTypeName());
QoreJdbcConnection.cpp:            return -1;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        const char* cp = val.get<const QoreStringNode>()->c_str();
QoreJdbcConnection.cpp:        if (!strcmp(classpath.c_str(), cp)) {
QoreJdbcConnection.cpp:            return 0;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        QoreString arg(cp);
QoreJdbcConnection.cpp:        q_env_subst(arg);
QoreJdbcConnection.cpp:        //printd(5, "QoreJdbcConnection::setOption() %p '%s' jpc: %p arg: '%s'\n", this, opt, jpc, arg.c_str());
QoreJdbcConnection.cpp:        try {
QoreJdbcConnection.cpp:            jpc->addClasspath(arg.c_str());
QoreJdbcConnection.cpp:            //printd(5, "QoreJdbcConnection::setOption() %p '%s' jpc: %p add classpath: '%s' (driver: %p)\n", this, opt,
QoreJdbcConnection.cpp:            //    jpc, arg.c_str(), *Globals::classDriver);
QoreJdbcConnection.cpp:            classpath = arg.c_str();
QoreJdbcConnection.cpp:            // try to load new drivers
QoreJdbcConnection.cpp:            Env env;
QoreJdbcConnection.cpp:            LocalReference<jobject> sm = jpc->loadServiceLoader(env, Globals::classDriver);
QoreJdbcConnection.cpp:            LocalReference<jobject> iterator = env.callObjectMethod(sm, Globals::methodServiceLoaderIterator,
QoreJdbcConnection.cpp:                nullptr);
QoreJdbcConnection.cpp:            while (true) {
QoreJdbcConnection.cpp:                jboolean b = env.callBooleanMethod(iterator, Globals::methodIteratorHasNext, nullptr);
QoreJdbcConnection.cpp:                if (!b) {
QoreJdbcConnection.cpp:                    break;
QoreJdbcConnection.cpp:                }
QoreJdbcConnection.cpp:                LocalReference<jobject> o = env.callObjectMethod(iterator, Globals::methodIteratorNext, nullptr);
QoreJdbcConnection.cpp:            }
QoreJdbcConnection.cpp:        } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:            e.convert(xsink);
QoreJdbcConnection.cpp:            return -1;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, JDBC_OPT_URL)) {
QoreJdbcConnection.cpp:        if (val.getType() != NT_STRING) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-OPTION-ERROR", "'%s' expects a 'string' value; got type '%s' instead",
QoreJdbcConnection.cpp:                JDBC_OPT_URL, val.getFullTypeName());
QoreJdbcConnection.cpp:            return -1;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        db = val.get<const QoreStringNode>()->c_str();
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, DBI_OPT_NUMBER_OPT)) {
QoreJdbcConnection.cpp:        numeric = ENO_OPTIMAL;
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, DBI_OPT_NUMBER_STRING)) {
QoreJdbcConnection.cpp:        numeric = ENO_STRING;
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, DBI_OPT_NUMBER_NUMERIC)) {
QoreJdbcConnection.cpp:        numeric = ENO_NUMERIC;
QoreJdbcConnection.cpp:    } else {
QoreJdbcConnection.cpp:        xsink->raiseException("JDBC-OPTION-ERROR", "invalid option '%s'", opt);
QoreJdbcConnection.cpp:        return -1;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreValue QoreJdbcConnection::getOption(const char* opt) {
QoreJdbcConnection.cpp:    if (!strcasecmp(opt, JDBC_OPT_CLASSPATH)) {
QoreJdbcConnection.cpp:        return classpath.empty() ? QoreValue() : new QoreStringNode(classpath);
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, JDBC_OPT_URL)) {
QoreJdbcConnection.cpp:        return db.empty() ? QoreValue() : new QoreStringNode(db);
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, DBI_OPT_NUMBER_OPT)) {
QoreJdbcConnection.cpp:        return numeric == ENO_OPTIMAL;
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, DBI_OPT_NUMBER_STRING)) {
QoreJdbcConnection.cpp:        return numeric == ENO_STRING;
QoreJdbcConnection.cpp:    } else if (!strcasecmp(opt, DBI_OPT_NUMBER_NUMERIC)) {
QoreJdbcConnection.cpp:        return numeric == ENO_NUMERIC;
QoreJdbcConnection.cpp:    } else {
QoreJdbcConnection.cpp:        assert(false);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return QoreValue();
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:#if 0
QoreJdbcConnection.cpp:bool QoreJdbcConnection::areArraysSupported(Env& env) {
QoreJdbcConnection.cpp:    if (array_support == DAS_SUPPORTED) {
QoreJdbcConnection.cpp:        return true;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    if (array_support == DAS_NOT_SUPPORTED) {
QoreJdbcConnection.cpp:        return false;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    // lock and check again
QoreJdbcConnection.cpp:    AutoLocker al(m);
QoreJdbcConnection.cpp:    if (array_support == DAS_SUPPORTED) {
QoreJdbcConnection.cpp:        return true;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    if (array_support == DAS_NOT_SUPPORTED) {
QoreJdbcConnection.cpp:        return false;
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    // try to create an array of strings
QoreJdbcConnection.cpp:    ExceptionSink xsink;
QoreJdbcConnection.cpp:    ReferenceHolder<QoreListNode> l(new QoreListNode(autoTypeInfo), &xsink);
QoreJdbcConnection.cpp:    l->push(new QoreStringNode("x"), &xsink);
QoreJdbcConnection.cpp:    LocalReference<jobject> array_arg = QoreToJava::toAnyObject(env, *l, jpc);
QoreJdbcConnection.cpp:    std::vector<jvalue> jargs(2);
QoreJdbcConnection.cpp:    LocalReference<jstring> jurl = env.newString("VARCHAR");
QoreJdbcConnection.cpp:    jargs[0].l = jurl;
QoreJdbcConnection.cpp:    jargs[1].l = array_arg;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        LocalReference<jobject> array = env.callObjectMethod(connection, Globals::methodConnectionCreateArrayOf,
QoreJdbcConnection.cpp:            &jargs[0]);
QoreJdbcConnection.cpp:        printd(0, "QoreJdbcConnection::areArraysSupported() OK\n");
QoreJdbcConnection.cpp:        array_support = DAS_SUPPORTED;
QoreJdbcConnection.cpp:        return true;
QoreJdbcConnection.cpp:    } catch (JavaException& e) {
QoreJdbcConnection.cpp:        SimpleRefHolder<QoreStringNode> errtxt(e.toString(false));
QoreJdbcConnection.cpp:        printd(0, "QoreJdbcConnection::areArraysSupported() %s\n", errtxt->c_str());
QoreJdbcConnection.cpp:        e.ignore();
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    array_support = DAS_NOT_SUPPORTED;
QoreJdbcConnection.cpp:    return false;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:#endif
QoreJdbcConnection.cpp:int QoreJdbcConnection::commit(ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        env.callVoidMethod(connection, Globals::methodConnectionCommit, nullptr);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return *xsink ? -1 : 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:int QoreJdbcConnection::rollback(ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        env.callVoidMethod(connection, Globals::methodConnectionRollback, nullptr);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return *xsink ? -1 : 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreValue QoreJdbcConnection::getServerVersion(ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        LocalReference<jobject> md = env.callObjectMethod(connection, Globals::methodConnectionGetMetaData, nullptr);
QoreJdbcConnection.cpp:        if (!md) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-METADATA-ERROR", "the connection returned no metadata");
QoreJdbcConnection.cpp:            return QoreValue();
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        ReferenceHolder<QoreHashNode> rv(new QoreHashNode(autoTypeInfo), xsink);
QoreJdbcConnection.cpp:        LocalReference<jstring> str = env.callObjectMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDatabaseProductName, nullptr).as<jstring>();
QoreJdbcConnection.cpp:        if (str) {
QoreJdbcConnection.cpp:            Env::GetStringUtfChars desc(env, str);
QoreJdbcConnection.cpp:            rv->setKeyValue("name", new QoreStringNode(desc.c_str()), xsink);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        str = env.callObjectMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDatabaseProductVersion, nullptr).as<jstring>();
QoreJdbcConnection.cpp:        if (str) {
QoreJdbcConnection.cpp:            Env::GetStringUtfChars desc(env, str);
QoreJdbcConnection.cpp:            rv->setKeyValue("version", new QoreStringNode(desc.c_str()), xsink);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        jint i = env.callIntMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDatabaseMajorVersion, nullptr);
QoreJdbcConnection.cpp:        rv->setKeyValue("major_version", i, xsink);
QoreJdbcConnection.cpp:        i = env.callIntMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDatabaseMinorVersion, nullptr);
QoreJdbcConnection.cpp:        rv->setKeyValue("minor_version", i, xsink);
QoreJdbcConnection.cpp:        return rv.release();
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return *xsink ? -1 : 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreValue QoreJdbcConnection::getClientVersion(ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        LocalReference<jobject> md = env.callObjectMethod(connection, Globals::methodConnectionGetMetaData, nullptr);
QoreJdbcConnection.cpp:        if (!md) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-METADATA-ERROR", "the connection returned no metadata");
QoreJdbcConnection.cpp:            return QoreValue();
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        ReferenceHolder<QoreHashNode> rv(new QoreHashNode(autoTypeInfo), xsink);
QoreJdbcConnection.cpp:        LocalReference<jstring> str = env.callObjectMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDriverName, nullptr).as<jstring>();
QoreJdbcConnection.cpp:        if (str) {
QoreJdbcConnection.cpp:            Env::GetStringUtfChars desc(env, str);
QoreJdbcConnection.cpp:            rv->setKeyValue("name", new QoreStringNode(desc.c_str()), xsink);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        str = env.callObjectMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDriverVersion, nullptr).as<jstring>();
QoreJdbcConnection.cpp:        if (str) {
QoreJdbcConnection.cpp:            Env::GetStringUtfChars desc(env, str);
QoreJdbcConnection.cpp:            rv->setKeyValue("version", new QoreStringNode(desc.c_str()), xsink);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        jint i = env.callIntMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDriverMajorVersion, nullptr);
QoreJdbcConnection.cpp:        rv->setKeyValue("major_version", i, xsink);
QoreJdbcConnection.cpp:        i = env.callIntMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDriverMinorVersion, nullptr);
QoreJdbcConnection.cpp:        rv->setKeyValue("minor_version", i, xsink);
QoreJdbcConnection.cpp:        return rv.release();
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    return *xsink ? -1 : 0;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreStringNode* QoreJdbcConnection::getDriverRealName(ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        LocalReference<jobject> md = env.callObjectMethod(connection, Globals::methodConnectionGetMetaData, nullptr);
QoreJdbcConnection.cpp:        if (!md) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-METADATA-ERROR", "the connection returned no metadata");
QoreJdbcConnection.cpp:            return nullptr;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        LocalReference<jstring> str = env.callObjectMethod(md,
QoreJdbcConnection.cpp:            Globals::methodDatabaseMetaDataGetDatabaseProductName, nullptr).as<jstring>();
QoreJdbcConnection.cpp:        if (!str) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-METADATA-ERROR", "Connection.getMetaData() returned no server product name");
QoreJdbcConnection.cpp:            return nullptr;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        Env::GetStringUtfChars desc(env, str);
QoreJdbcConnection.cpp:        SimpleRefHolder<QoreStringNode> rv(new QoreStringNode(desc.c_str()));
QoreJdbcConnection.cpp:        return rv.release();
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(*xsink);
QoreJdbcConnection.cpp:    return nullptr;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreValue QoreJdbcConnection::select(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        QoreJdbcStatement stmt(xsink, this);
QoreJdbcConnection.cpp:        bool result_set = stmt.exec(env, xsink, qstr, args);
QoreJdbcConnection.cpp:        if (*xsink) {
QoreJdbcConnection.cpp:            return QoreValue();
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        if (result_set) {
QoreJdbcConnection.cpp:            return stmt.getOutputHash(env, xsink, false);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        return stmt.rowsAffected(env);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(*xsink);
QoreJdbcConnection.cpp:    return QoreValue();
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreListNode* QoreJdbcConnection::selectRows(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    ValueHolder rv(xsink);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        QoreJdbcStatement stmt(xsink, this);
QoreJdbcConnection.cpp:        bool result_set = stmt.exec(env, xsink, qstr, args);
QoreJdbcConnection.cpp:        if (*xsink) {
QoreJdbcConnection.cpp:            return nullptr;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        if (!result_set) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-SELECT-ROWS-ERROR", "SQL passed to selectRows() did not return a result set");
QoreJdbcConnection.cpp:            return nullptr;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        return stmt.getOutputList(env, xsink);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(*xsink);
QoreJdbcConnection.cpp:    return nullptr;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreHashNode* QoreJdbcConnection::selectRow(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    ValueHolder rv(xsink);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        QoreJdbcStatement stmt(xsink, this);
QoreJdbcConnection.cpp:        bool result_set = stmt.exec(env, xsink, qstr, args);
QoreJdbcConnection.cpp:        if (*xsink) {
QoreJdbcConnection.cpp:            return nullptr;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        if (!result_set) {
QoreJdbcConnection.cpp:            xsink->raiseException("JDBC-SELECT-ROW-ERROR", "SQL passed to selectRow() did not return a result set");
QoreJdbcConnection.cpp:            return nullptr;
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        return stmt.getSingleRow(env, xsink);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(*xsink);
QoreJdbcConnection.cpp:    return nullptr;
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreValue QoreJdbcConnection::exec(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        QoreJdbcStatement stmt(xsink, this);
QoreJdbcConnection.cpp:        bool result_set = stmt.exec(env, xsink, qstr, args);
QoreJdbcConnection.cpp:        if (*xsink) {
QoreJdbcConnection.cpp:            return QoreValue();
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        if (result_set) {
QoreJdbcConnection.cpp:            return stmt.getOutputHash(env, xsink, false);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        return stmt.rowsAffected(env);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(*xsink);
QoreJdbcConnection.cpp:    return QoreValue();
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:QoreValue QoreJdbcConnection::execRaw(const QoreString* qstr, ExceptionSink* xsink) {
QoreJdbcConnection.cpp:    assert(connection);
QoreJdbcConnection.cpp:    Env env;
QoreJdbcConnection.cpp:    try {
QoreJdbcConnection.cpp:        QoreJdbcStatement stmt(xsink, this);
QoreJdbcConnection.cpp:        bool result_set = stmt.exec(env, xsink, qstr, nullptr);
QoreJdbcConnection.cpp:        if (*xsink) {
QoreJdbcConnection.cpp:            return QoreValue();
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        if (result_set) {
QoreJdbcConnection.cpp:            return stmt.getOutputHash(env, xsink, false);
QoreJdbcConnection.cpp:        }
QoreJdbcConnection.cpp:        return stmt.rowsAffected(env);
QoreJdbcConnection.cpp:    } catch (jni::Exception& e) {
QoreJdbcConnection.cpp:        e.convert(xsink);
QoreJdbcConnection.cpp:    }
QoreJdbcConnection.cpp:    assert(*xsink);
QoreJdbcConnection.cpp:    return QoreValue();
QoreJdbcConnection.cpp:}
QoreJdbcConnection.cpp:}
Env.cpp://--------------------------------------------------------------------*- C++ -*-
Env.cpp://
Env.cpp://  Qore Programming Language
Env.cpp://
Env.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Env.cpp://
Env.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Env.cpp://  copy of this software and associated documentation files (the "Software"),
Env.cpp://  to deal in the Software without restriction, including without limitation
Env.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Env.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Env.cpp://  Software is furnished to do so, subject to the following conditions:
Env.cpp://
Env.cpp://  The above copyright notice and this permission notice shall be included in
Env.cpp://  all copies or substantial portions of the Software.
Env.cpp://
Env.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Env.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Env.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Env.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Env.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Env.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Env.cpp://  DEALINGS IN THE SOFTWARE.
Env.cpp://
Env.cpp://------------------------------------------------------------------------------
Env.cpp:///
Env.cpp:/// \file
Env.cpp:/// \brief Defines the Env class implementation.
Env.cpp:///
Env.cpp://------------------------------------------------------------------------------
Env.cpp:#include "defs.h"
Env.cpp:#include "QoreJniClassMap.h"
Env.cpp:#include <qore/Qore.h>
Env.cpp:using namespace jni;
Env.cpp:Env::Env(bool set_context) {
Env.cpp:   bool new_attach;
Env.cpp:   env = Jvm::attachAndGetEnv(new_attach);
Env.cpp:   if (set_context && new_attach)
Env.cpp:      JniExternalProgramData::setContext(*this);
Env.cpp:}
QoreJniFunctionalInterface.h://--------------------------------------------------------------------*- C++ -*-
QoreJniFunctionalInterface.h://
QoreJniFunctionalInterface.h://  Qore Programming Language
QoreJniFunctionalInterface.h://
QoreJniFunctionalInterface.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
QoreJniFunctionalInterface.h://
QoreJniFunctionalInterface.h://  Permission is hereby granted, free of charge, to any person obtaining a
QoreJniFunctionalInterface.h://  copy of this software and associated documentation files (the "Software"),
QoreJniFunctionalInterface.h://  to deal in the Software without restriction, including without limitation
QoreJniFunctionalInterface.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
QoreJniFunctionalInterface.h://  and/or sell copies of the Software, and to permit persons to whom the
QoreJniFunctionalInterface.h://  Software is furnished to do so, subject to the following conditions:
QoreJniFunctionalInterface.h://
QoreJniFunctionalInterface.h://  The above copyright notice and this permission notice shall be included in
QoreJniFunctionalInterface.h://  all copies or substantial portions of the Software.
QoreJniFunctionalInterface.h://
QoreJniFunctionalInterface.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
QoreJniFunctionalInterface.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
QoreJniFunctionalInterface.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
QoreJniFunctionalInterface.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
QoreJniFunctionalInterface.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
QoreJniFunctionalInterface.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
QoreJniFunctionalInterface.h://  DEALINGS IN THE SOFTWARE.
QoreJniFunctionalInterface.h://
QoreJniFunctionalInterface.h://------------------------------------------------------------------------------
QoreJniFunctionalInterface.h:///
QoreJniFunctionalInterface.h:/// \file
QoreJniFunctionalInterface.h:/// \brief Defines the QoreJniFunctionalInterface class
QoreJniFunctionalInterface.h://------------------------------------------------------------------------------
QoreJniFunctionalInterface.h:#include <qore/Qore.h>
QoreJniFunctionalInterface.h:#include "jni.h"
QoreJniFunctionalInterface.h:#include "GlobalReference.h"
QoreJniFunctionalInterface.h:#include "Method.h"
QoreJniFunctionalInterface.h:namespace jni {
QoreJniFunctionalInterface.h:class QoreJniFunctionalInterface : public ResolvedCallReferenceNode {
QoreJniFunctionalInterface.h:public:
QoreJniFunctionalInterface.h:    DLLLOCAL QoreJniFunctionalInterface(jobject obj);
QoreJniFunctionalInterface.h:    DLLLOCAL virtual QoreValue execValue(const QoreListNode* args, ExceptionSink* xsink) const override;
QoreJniFunctionalInterface.h:    DLLLOCAL virtual QoreFunction* getFunction() override {
QoreJniFunctionalInterface.h:        return nullptr;
QoreJniFunctionalInterface.h:    }
QoreJniFunctionalInterface.h:    DLLLOCAL virtual int getAsString(QoreString& str, int foff, ExceptionSink* xsink) const override;
QoreJniFunctionalInterface.h:    DLLLOCAL virtual QoreString* getAsString(bool& del, int foff, ExceptionSink* xsink) const override;
QoreJniFunctionalInterface.h:    DLLLOCAL virtual const char* getTypeName() const override {
QoreJniFunctionalInterface.h:        return "java closure wrapper";
QoreJniFunctionalInterface.h:    }
QoreJniFunctionalInterface.h:private:
QoreJniFunctionalInterface.h:    GlobalReference<jobject> obj;
QoreJniFunctionalInterface.h:    SimpleRefHolder<Class> cls;
QoreJniFunctionalInterface.h:    SimpleRefHolder<BaseMethod> method;
QoreJniFunctionalInterface.h:    QoreProgram* src_pgm;
QoreJniFunctionalInterface.h:};
QoreJniFunctionalInterface.h:}
Array.cpp://--------------------------------------------------------------------*- C++ -*-
Array.cpp://
Array.cpp://  Qore Programming Language
Array.cpp://
Array.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Array.cpp://
Array.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Array.cpp://  copy of this software and associated documentation files (the "Software"),
Array.cpp://  to deal in the Software without restriction, including without limitation
Array.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Array.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Array.cpp://  Software is furnished to do so, subject to the following conditions:
Array.cpp://
Array.cpp://  The above copyright notice and this permission notice shall be included in
Array.cpp://  all copies or substantial portions of the Software.
Array.cpp://
Array.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Array.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Array.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Array.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Array.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Array.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Array.cpp://  DEALINGS IN THE SOFTWARE.
Array.cpp://
Array.cpp://------------------------------------------------------------------------------
Array.cpp:#include "Array.h"
Array.cpp:#include "JavaToQore.h"
Array.cpp:#include "QoreToJava.h"
Array.cpp:namespace jni {
Array.cpp:Array::Array(jclass ecls, int size) {
Array.cpp:    LocalReference<jclass> cls(ecls);
Array.cpp:    if (size < 1) {
Array.cpp:        QoreStringMaker desc("cannot instantiate an array with size %d; must be greater than 0", size);
Array.cpp:        throw BasicException(desc.c_str());
Array.cpp:    }
Array.cpp:    elementClass = cls.makeGlobal();
Array.cpp:    elementType = Globals::getType(elementClass);
Array.cpp:    jobj = GlobalReference<jobject>::fromLocal(Array::getNew(elementType, elementClass, (jsize)size).as<jobject>());
Array.cpp:}
Array.cpp:Array::Array(jarray array) : QoreJniPrivateData(array) {
Array.cpp:    printd(LogLevel, "Array::Array(), this: %p, object: %p\n", this, jobj.cast<jarray>());
Array.cpp:    Env env;
Array.cpp:    LocalReference<jclass> arrayClass = env.getObjectClass(array);
Array.cpp:    elementClass = env.callObjectMethod(arrayClass, Globals::methodClassGetComponentType, nullptr).as<jclass>().makeGlobal();
Array.cpp:    elementType = Globals::getType(elementClass);
Array.cpp:}
Array.cpp:int64 Array::length() const {
Array.cpp:   Env env;
Array.cpp:   return env.getArrayLength(jobj.cast<jarray>());
Array.cpp:}
Array.cpp:LocalReference<jarray> Array::getNew(Type elementType, jclass elementClass, jsize size) {
Array.cpp:    Env env;
Array.cpp:    switch (elementType) {
Array.cpp:        case Type::Boolean: return env.newBooleanArray(size).as<jarray>();
Array.cpp:        case Type::Byte: return env.newByteArray(size).as<jarray>();
Array.cpp:        case Type::Char: return env.newCharArray(size).as<jarray>();
Array.cpp:        case Type::Short: return env.newShortArray(size).as<jarray>();
Array.cpp:        case Type::Int: return env.newIntArray(size).as<jarray>();
Array.cpp:        case Type::Long: return env.newLongArray(size).as<jarray>();
Array.cpp:        case Type::Float: return env.newFloatArray(size).as<jarray>();
Array.cpp:        case Type::Double: return env.newDoubleArray(size).as<jarray>();
Array.cpp:        case Type::Reference:
Array.cpp:        default:
Array.cpp:            assert(elementType == Type::Reference);
Array.cpp:            return env.newObjectArray(size, elementClass).as<jarray>();
Array.cpp:    }
Array.cpp:}
Array.cpp:SimpleRefHolder<BinaryNode> Array::getBinary(Env& env, jarray array) {
Array.cpp:    SimpleRefHolder<BinaryNode> rv(new BinaryNode);
Array.cpp:    jsize size = env.getArrayLength(array);
Array.cpp:    rv->preallocate(size);
Array.cpp:    for (jsize i = 0; i < size; ++i) {
Array.cpp:        jbyte byte = env.getByteArrayElement(static_cast<jbyteArray>(array), i);
Array.cpp:        reinterpret_cast<jbyte*>(const_cast<void*>(rv->getPtr()))[i] = byte;
Array.cpp:    }
Array.cpp:    return rv;
Array.cpp:}
Array.cpp:void Array::getList(ReferenceHolder<>& return_value, Env& env, jarray array, jclass arrayClass, QoreProgram* pgm,
Array.cpp:        bool compat_types, bool varargs) {
Array.cpp:    LocalReference<jclass> elementClass =
Array.cpp:        env.callObjectMethod(arrayClass, Globals::methodClassGetComponentType, nullptr).as<jclass>();
Array.cpp:    Type elementType = Globals::getType(elementClass);
Array.cpp:    // issue #3026: return a binary object for byte[] unless jni_compat_types is set
Array.cpp:    if (elementType == Type::Byte && !compat_types) {
Array.cpp:        return_value = getBinary(env, array).release();
Array.cpp:        return;
Array.cpp:    }
Array.cpp:    ExceptionSink xsink;
Array.cpp:    ReferenceHolder<QoreListNode> l(new QoreListNode(autoTypeInfo), &xsink);
Array.cpp:    jsize e = env.getArrayLength(array);
Array.cpp:    bool fix_varargs = false;
Array.cpp:    if (e > 0 && varargs) {
Array.cpp:        fix_varargs = true;
Array.cpp:    }
Array.cpp:    for (jsize i = 0; i < e; ++i) {
Array.cpp:        QoreValue v = get(env, array, elementType, elementClass, i, pgm, compat_types);
Array.cpp:        if (fix_varargs && i == (e - 1) && v.getType() == NT_LIST) {
Array.cpp:            ListIterator li(v.get<QoreListNode>());
Array.cpp:            while (li.next()) {
Array.cpp:                l->push(li.getReferencedValue(), nullptr);
Array.cpp:            }
Array.cpp:            v.discard(&xsink);
Array.cpp:        } else {
Array.cpp:            l->push(v, nullptr);
Array.cpp:        }
Array.cpp:    }
Array.cpp:    return_value = l.release();
Array.cpp:}
Array.cpp:QoreValue Array::get(Env& env, jarray array, Type elementType, jclass elementClass, int64 index, QoreProgram* pgm,
Array.cpp:        bool compat_types) {
Array.cpp:    switch (elementType) {
Array.cpp:        case Type::Boolean:
Array.cpp:            return JavaToQore::convert(env.getBooleanArrayElement(static_cast<jbooleanArray>(array), index));
Array.cpp:        case Type::Byte:
Array.cpp:            return JavaToQore::convert(env.getByteArrayElement(static_cast<jbyteArray>(array), index));
Array.cpp:        case Type::Char:
Array.cpp:            return JavaToQore::convert(env.getCharArrayElement(static_cast<jcharArray>(array), index));
Array.cpp:        case Type::Short:
Array.cpp:            return JavaToQore::convert(env.getShortArrayElement(static_cast<jshortArray>(array), index));
Array.cpp:        case Type::Int:
Array.cpp:            return JavaToQore::convert(env.getIntArrayElement(static_cast<jintArray>(array), index));
Array.cpp:        case Type::Long:
Array.cpp:            return JavaToQore::convert(env.getLongArrayElement(static_cast<jlongArray>(array), index));
Array.cpp:        case Type::Float:
Array.cpp:            return JavaToQore::convert(env.getFloatArrayElement(static_cast<jfloatArray>(array), index));
Array.cpp:        case Type::Double:
Array.cpp:            return JavaToQore::convert(env.getDoubleArrayElement(static_cast<jdoubleArray>(array), index));
Array.cpp:        case Type::Reference:
Array.cpp:        default:
Array.cpp:            assert(elementType == Type::Reference);
Array.cpp:            return JavaToQore::convertToQore(env.getObjectArrayElement(static_cast<jobjectArray>(array), index), pgm,
Array.cpp:                compat_types);
Array.cpp:    }
Array.cpp:}
Array.cpp:QoreValue Array::get(int64 index, QoreProgram* pgm, bool compat_types) const {
Array.cpp:    Env env;
Array.cpp:    return get(env, jobj.cast<jarray>(), elementType, elementClass, index, pgm, compat_types);
Array.cpp:}
Array.cpp:void Array::set(int64 index, const QoreValue &value, JniExternalProgramData* jpc) {
Array.cpp:    set(jobj.cast<jarray>(), elementType, elementClass, index, value, jpc);
Array.cpp:}
Array.cpp:QoreStringNodeHolder Array::deepToString() const {
Array.cpp:    Env env;
Array.cpp:    return deepToString(env, jobj.cast<jarray>());
Array.cpp:}
Array.cpp:QoreStringNodeHolder Array::deepToString(Env& env, jarray array) {
Array.cpp:    jvalue jarg;
Array.cpp:    jarg.l = array;
Array.cpp:    LocalReference<jstring> str = env.callStaticObjectMethod(Globals::classArrays, Globals::methodArraysDeepToString, &jarg).as<jstring>();
Array.cpp:    Env::GetStringUtfChars chars(env, str);
Array.cpp:    return QoreStringNodeHolder(new QoreStringNode(chars.c_str(), QCS_UTF8));
Array.cpp:}
Array.cpp:void Array::set(jarray array, Type elementType, jclass elementClass, int64 index, const QoreValue &value,
Array.cpp:        JniExternalProgramData* jpc) {
Array.cpp:    Env env;
Array.cpp:    switch (elementType) {
Array.cpp:        case Type::Boolean:
Array.cpp:            env.setBooleanArrayElement((jbooleanArray)array, index, QoreToJava::toBoolean(value));
Array.cpp:            break;
Array.cpp:        case Type::Byte:
Array.cpp:            env.setByteArrayElement((jbyteArray)array, index, QoreToJava::toByte(value));
Array.cpp:            break;
Array.cpp:        case Type::Char:
Array.cpp:            env.setCharArrayElement((jcharArray)array, index, QoreToJava::toChar(value));
Array.cpp:            break;
Array.cpp:        case Type::Short:
Array.cpp:            env.setShortArrayElement((jshortArray)array, index, QoreToJava::toShort(value));
Array.cpp:            break;
Array.cpp:        case Type::Int:
Array.cpp:            env.setIntArrayElement((jintArray)array, index, QoreToJava::toInt(value));
Array.cpp:            break;
Array.cpp:        case Type::Long:
Array.cpp:            env.setLongArrayElement((jlongArray)array, index, QoreToJava::toLong(value));
Array.cpp:            break;
Array.cpp:        case Type::Float:
Array.cpp:            env.setFloatArrayElement((jfloatArray)array, index, QoreToJava::toFloat(value));
Array.cpp:            break;
Array.cpp:        case Type::Double:
Array.cpp:            env.setDoubleArrayElement((jdoubleArray)array, index, QoreToJava::toDouble(value));
Array.cpp:            break;
Array.cpp:        case Type::Reference:
Array.cpp:        default:
Array.cpp:            assert(elementType == Type::Reference);
Array.cpp:            env.setObjectArrayElement((jobjectArray)array, index, QoreToJava::toObject(env, value, elementClass,
Array.cpp:                jpc));
Array.cpp:    }
Array.cpp:}
Array.cpp:LocalReference<jclass> Array::getClassForValue(QoreValue v, JniExternalProgramData* jpc) {
Array.cpp:    switch (v.getType()) {
Array.cpp:        case NT_INT: return Globals::classLong.toLocal();
Array.cpp:        case NT_FLOAT: return Globals::classDouble.toLocal();
Array.cpp:        case NT_BOOLEAN: return Globals::classBoolean.toLocal();
Array.cpp:        case NT_STRING: return Globals::classString.toLocal();
Array.cpp:        case NT_DATE: return Globals::classObject.toLocal();
Array.cpp:        case NT_NUMBER: return Globals::classBigDecimal.toLocal();
Array.cpp:        case NT_HASH: return Globals::classHash.toLocal();
Array.cpp:        case NT_LIST: return Globals::classObject.toLocal();
Array.cpp:        case NT_OBJECT: {
Array.cpp:            Env env;
Array.cpp:            if (jpc) {
Array.cpp:                return jpc->getJavaClassForQoreClass(env, v.get<QoreObject>()->getClass());
Array.cpp:            }
Array.cpp:            QoreObject* o = v.get<QoreObject>();
Array.cpp:            ExceptionSink xsink;
Array.cpp:            SimpleRefHolder<QoreJniPrivateData> obj(static_cast<QoreJniPrivateData*>(o->getReferencedPrivateData(CID_OBJECT, &xsink)));
Array.cpp:            if (!obj) {
Array.cpp:                if (xsink) {
Array.cpp:                    throw XsinkException(xsink);
Array.cpp:                }
Array.cpp:                return Globals::classQoreObject.toLocal();
Array.cpp:            }
Array.cpp:            return env.getObjectClass(obj->getObject());
Array.cpp:        }
Array.cpp:    }
Array.cpp:    QoreStringMaker desc("cannot create a Java array from a list that contains values of type '%s'", v.getTypeName());
Array.cpp:    throw BasicException(desc.c_str());
Array.cpp:}
Array.cpp:LocalReference<jarray> Array::toObjectArray(const QoreListNode* l, jclass elementClass, size_t start,
Array.cpp:        JniExternalProgramData* jpc) {
Array.cpp:    assert(start < l->size());
Array.cpp:    Type elementType = Globals::getType(elementClass);
Array.cpp:    LocalReference<jarray> jarray = getNew(elementType, elementClass, l->size() - start);
Array.cpp:    for (unsigned i = start, e = l->size(); i != e; ++i) {
Array.cpp:        set(jarray, elementType, elementClass, i - start, l->retrieveEntry(i), jpc);
Array.cpp:    }
Array.cpp:    return jarray.release();
Array.cpp:}
Array.cpp:LocalReference<jarray> Array::toJava(const QoreListNode* l, size_t start, JniExternalProgramData* jpc) {
Array.cpp:    if (l->size() <= start)
Array.cpp:        return nullptr;
Array.cpp:    LocalReference<jclass> elementClass = nullptr;
Array.cpp:    // to determine the common type, we need a typeInfo object
Array.cpp:    // because each local reference is a separate ptr
Array.cpp:    const QoreTypeInfo* typeInfo = nullptr;
Array.cpp:    // check list to see if we have a unique type
Array.cpp:    for (unsigned i = start, e = l->size(); i != e; ++i) {
Array.cpp:        // get this element's target Java class
Array.cpp:        QoreValue v = l->retrieveEntry(i);
Array.cpp:        if (v.isNullOrNothing())
Array.cpp:            continue;
Array.cpp:        if (!elementClass) {
Array.cpp:            elementClass = getClassForValue(v, jpc);
Array.cpp:            if (!elementClass) {
Array.cpp:                typeInfo = autoTypeInfo;
Array.cpp:            } else {
Array.cpp:                typeInfo = v.getTypeInfo();
Array.cpp:            }
Array.cpp:        } else {
Array.cpp:            const QoreTypeInfo* newTypeInfo = v.getTypeInfo();
Array.cpp:            if (newTypeInfo != typeInfo) {
Array.cpp:                elementClass = Globals::classObject.toLocal();
Array.cpp:                break;
Array.cpp:            }
Array.cpp:        }
Array.cpp:    }
Array.cpp:    if (!elementClass) {
Array.cpp:        elementClass = Globals::classObject.toLocal();
Array.cpp:    }
Array.cpp:    return toObjectArray(l, elementClass, start, jpc).release();
Array.cpp:}
Array.cpp:void Array::getArgList(ReferenceHolder<QoreListNode>& return_value, Env& env, jarray array, QoreProgram* pgm, bool varargs) {
Array.cpp:    LocalReference<jclass> arrayClass = env.getObjectClass(array);
Array.cpp:    ReferenceHolder<> list(nullptr);
Array.cpp:    getList(list, env, array, arrayClass, pgm, false, varargs);
Array.cpp:    return_value = reinterpret_cast<QoreListNode*>(list.release());
Array.cpp:}
Array.cpp:} // namespace jni
JniQoreClass.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
JniQoreClass.h:/*
JniQoreClass.h:    JniQoreClass.h
JniQoreClass.h:    Qore Programming Language JNI Module
JniQoreClass.h:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
JniQoreClass.h:    This library is free software; you can redistribute it and/or
JniQoreClass.h:    modify it under the terms of the GNU Lesser General Public
JniQoreClass.h:    License as published by the Free Software Foundation; either
JniQoreClass.h:    version 2.1 of the License, or (at your option) any later version.
JniQoreClass.h:    This library is distributed in the hope that it will be useful,
JniQoreClass.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
JniQoreClass.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
JniQoreClass.h:    Lesser General Public License for more details.
JniQoreClass.h:    You should have received a copy of the GNU Lesser General Public
JniQoreClass.h:    License along with this library; if not, write to the Free Software
JniQoreClass.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
JniQoreClass.h:*/
JniQoreClass.h:#ifndef _QORE_JNI_QORECLASS_H
JniQoreClass.h:#define _QORE_JNI_QORECLASS_H
JniQoreClass.h:#include <string>
JniQoreClass.h:namespace jni {
JniQoreClass.h:class QoreJniPrivateData;
JniQoreClass.h:class JniQoreClass : public QoreBuiltinClass {
JniQoreClass.h:public:
JniQoreClass.h:    DLLLOCAL JniQoreClass(QoreProgram* pgm, const char* name, const char* path, const char* jname)
JniQoreClass.h:            : QoreBuiltinClass(pgm, name, path, QDOM_UNCONTROLLED_API), jname(jname) {
JniQoreClass.h:        assert(pgm->getExternalData("jni"));
JniQoreClass.h:        addMethod(nullptr, "memberGate", (q_external_method_t)memberGate, Public, 0, QDOM_UNCONTROLLED_API,
JniQoreClass.h:            autoTypeInfo, paramTypeInfo);
JniQoreClass.h:        setPublicMemberFlag();
JniQoreClass.h:        setGateAccessFlag();
JniQoreClass.h:        setLanguage("Java");
JniQoreClass.h:        setRelaxedAbstractMatch();
JniQoreClass.h:    }
JniQoreClass.h:    DLLLOCAL JniQoreClass(const JniQoreClass& old) : QoreBuiltinClass(old), jname(old.jname) {
JniQoreClass.h:    }
JniQoreClass.h:    DLLLOCAL virtual ~JniQoreClass() {
JniQoreClass.h:    }
JniQoreClass.h:    DLLLOCAL virtual QoreClass* copyImport() {
JniQoreClass.h:        JniQoreClass* rv = new JniQoreClass;
JniQoreClass.h:        rv->jname = jname;
JniQoreClass.h:        return rv;
JniQoreClass.h:    }
JniQoreClass.h:    DLLLOCAL virtual QoreClass* copy() {
JniQoreClass.h:        return new JniQoreClass(*this);
JniQoreClass.h:    }
JniQoreClass.h:    DLLLOCAL const std::string& getJavaName() const {
JniQoreClass.h:        return jname;
JniQoreClass.h:    }
JniQoreClass.h:    static QoreValue memberGate(const QoreMethod& meth, void* m, QoreObject* self, QoreJniPrivateData* jd,
JniQoreClass.h:        const QoreListNode* args, q_rt_flags_t rtflags, ExceptionSink* xsink);
JniQoreClass.h:private:
JniQoreClass.h:    // java dot name for the class; ex: "java.lang.Object"
JniQoreClass.h:    std::string jname;
JniQoreClass.h:    static type_vec_t paramTypeInfo;
JniQoreClass.h:    DLLLOCAL JniQoreClass() {
JniQoreClass.h:    }
JniQoreClass.h:};
JniQoreClass.h:}
JniQoreClass.h:#endif
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:/** Java wrapper for the %Qore SqlStatementOutboundMapper class
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java: *
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java: */
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:package org.qore.lang.tablemapper;
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:// qorus imports
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:import org.qore.lang.tablemapper.AbstractSqlStatementOutboundMapper;
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:// jni module imports
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:import org.qore.jni.QoreObject;
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java://! Java wrapper for the @ref TableMapper::SqlStatementOutboundMapper class in Qore
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:/**
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:    <tt>import qoremod.TableMapper.SqlStatementOutboundMapper;</tt>
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java: */
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:@Deprecated
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:public class SqlStatementOutboundMapper extends AbstractSqlStatementOutboundMapper {
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:    public SqlStatementOutboundMapper(QoreObject ds) {
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:        super(ds);
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/SqlStatementOutboundMapper.java:}
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:/** Java wrapper for the %Qore InboundIdentityTableMapper class
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java: *
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java: */
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:package org.qore.lang.tablemapper;
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:// qorus imports
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:import org.qore.lang.mapper.Mapper;
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:// jni module imports
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:import org.qore.jni.QoreObject;
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java://! Java wrapper for the @ref TableMapper::InboundIdentityTableMapper class in Qore
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:/**
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:    <tt>import qoremod.TableMapper.InboundIdentityTableMapper;</tt>
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:*/
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:@Deprecated
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:public class InboundIdentityTableMapper extends InboundTableMapper {
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:    public InboundIdentityTableMapper(QoreObject obj) {
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:        super(obj);
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundIdentityTableMapper.java:}
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:/** Java wrapper for the %Qore AbstractSqlStatementOutboundMapper class
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java: *
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java: */
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:package org.qore.lang.tablemapper;
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:// qorus imports
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:import org.qore.lang.mapper.Mapper;
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:// java imports
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:import java.util.Map;
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:import java.util.HashMap;
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:// jni module imports
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:import org.qore.jni.QoreObject;
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java://! Java wrapper for the @ref TableMapper::AbstractSqlStatementOutboundMapper class in Qore
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    <tt>import qoremod.TableMapper.AbstractSqlStatementOutboundMapper;</tt>
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:*/
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:@Deprecated
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:public class AbstractSqlStatementOutboundMapper extends Mapper {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    // static initialization
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    static {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c TableMapper module
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        try {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:            QoreJavaApi.initQore();
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:            QoreJavaApi.callFunction("load_module", "TableMapper");
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    public AbstractSqlStatementOutboundMapper(QoreObject obj) {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        super(obj);
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    //! commits the transaction and frees the Qore::SQL::AbstractDatasource transaction thread resource
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    public void commit() throws Throwable {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        obj.callMethod("commit");
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    //! rolls the transaction back and frees the Qore::SQL::AbstractDatasource transaction thread resource
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    public void rollback() throws Throwable {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        obj.callMethod("rollback");
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    //! Retrieve mapped data as a hash of lists.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    /** @return *hash with data or null in case there are no more data available.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        The size of the batch is driven by the \c select_block option passed in the constructor.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        The hash is in Qore::SQL::AbstractDatasource::select() form - meaning it is a hash
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        with column names as keys. Values are lists of column values.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        This data structure is used for Qore::context statement or BulksSqlUtil
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        operations.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    */
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    public HashMap<String, Object> getData() throws Throwable {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        return (HashMap<String, Object>)obj.callMethod("getData");
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    //! Retrieve mapped data as a list of hashes.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    /** @return list with data or null in case there are no more data available.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        Size of the batch is driven by the \c select_block option passed in the constructor.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        List is in Qore::SQL::AbstractDatasource::selectRows() form - meaning it is a list
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        with hashes, where every hash has column names as keys with single values as
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        hash values.
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    */
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    public HashMap<String, Object>[] getDataRows() throws Throwable {
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:        return (HashMap<String, Object>[])obj.callMethod("getDataRows");
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/AbstractSqlStatementOutboundMapper.java:}
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:/** Qorus Java SqlStatementOutboundMapper class
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java: *
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java: */
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:package org.qore.lang.tablemapper;
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:// qorus imports
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:import org.qore.lang.tablemapper.AbstractSqlStatementOutboundMapper;
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:// jni module imports
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:import org.qore.jni.QoreObject;
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java://! Java wrapper for the @ref TableMapper::RawSqlStatementOutboundMapper class in Qore
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    <tt>import qoremod.TableMapper.RawSqlStatementOutboundMapper;</tt>
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:*/
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:@Deprecated
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:public class RawSqlStatementOutboundMapper extends AbstractSqlStatementOutboundMapper {
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    // static initialization
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    static {
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c TableMapper module
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:        try {
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:            QoreJavaApi.initQore();
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:            QoreJavaApi.callFunction("load_module", "TableMapper");
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:        }
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    public RawSqlStatementOutboundMapper(QoreObject ds) {
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:        super(ds);
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:    }
java/org/qore/lang/tablemapper/RawSqlStatementOutboundMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:/** Java wrapper for the %Qore InboundTableMapper class
java/org/qore/lang/tablemapper/InboundTableMapper.java: *
java/org/qore/lang/tablemapper/InboundTableMapper.java: */
java/org/qore/lang/tablemapper/InboundTableMapper.java:package org.qore.lang.tablemapper;
java/org/qore/lang/tablemapper/InboundTableMapper.java:// qorus imports
java/org/qore/lang/tablemapper/InboundTableMapper.java:import org.qore.lang.mapper.Mapper;
java/org/qore/lang/tablemapper/InboundTableMapper.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/tablemapper/InboundTableMapper.java:import org.qore.lang.sqlutil.AbstractTable;
java/org/qore/lang/tablemapper/InboundTableMapper.java:// java imports
java/org/qore/lang/tablemapper/InboundTableMapper.java:import java.util.Map;
java/org/qore/lang/tablemapper/InboundTableMapper.java:import java.util.HashMap;
java/org/qore/lang/tablemapper/InboundTableMapper.java:// jni module imports
java/org/qore/lang/tablemapper/InboundTableMapper.java:import org.qore.jni.QoreObject;
java/org/qore/lang/tablemapper/InboundTableMapper.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/tablemapper/InboundTableMapper.java://! Java wrapper for the @ref TableMapper::InboundTableMapper class in Qore
java/org/qore/lang/tablemapper/InboundTableMapper.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/tablemapper/InboundTableMapper.java:    <tt>import qoremod.TableMapper.InboundTableMapper;</tt>
java/org/qore/lang/tablemapper/InboundTableMapper.java:*/
java/org/qore/lang/tablemapper/InboundTableMapper.java:@Deprecated
java/org/qore/lang/tablemapper/InboundTableMapper.java:public class InboundTableMapper extends Mapper {
java/org/qore/lang/tablemapper/InboundTableMapper.java:    // static initialization
java/org/qore/lang/tablemapper/InboundTableMapper.java:    static {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c TableMapper module
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            QoreJavaApi.initQore();
java/org/qore/lang/tablemapper/InboundTableMapper.java:            QoreJavaApi.callFunction("load_module", "TableMapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public InboundTableMapper(QoreObject obj) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        super(obj);
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! inserts or upserts a row into the target table based on a mapped input record; does not commit the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @param rec the input record
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @return a hash of the row values inserted/upserted (row name: value); note that any sequence values inserted are also returned here
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note on mappers with "insert_block > 1" (i.e. also the underlying DB must allow for bulk operations), it is not allowed to use both single-record insertions (like insertRow()) and bulk operations (queueData()) in one transaction. Mixing insertRow() with queueData() leads to mismatch of Oracle DB types raising corresponding exceptions depending on particular record types (e.g. "ORA-01722: invalid number").
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object> insertRow(Map<String, Object> rec) throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>)obj.callMethod("insertRow", rec);
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! inserts/upserts a row (or a set of rows, in case a Map<String, Object> of lists is passed) into the block buffer based on a mapped input record; the block buffer is flushed to the DB if the buffer size reaches the limit defined by the \c "insert_block" option; does not commit the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @par Example:
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @code{.py}
java/org/qore/lang/tablemapper/InboundTableMapper.java:{
java/org/qore/lang/tablemapper/InboundTableMapper.java:    AbstractTable table = UserApi.get_sql_table("some_table");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        InboundTableMapper table_mapper = UserApi.get_mapper("my_mapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.queueData(recs, crec);
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.flush();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.discard();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @endcode
java/org/qore/lang/tablemapper/InboundTableMapper.java:        Data is only inserted/upserted if the block buffer size reaches the limit defined by the \c "insert_block" option,
java/org/qore/lang/tablemapper/InboundTableMapper.java:        in which case this method returns all the data inserted/upserted.  In case the mapped data is only inserted into
java/org/qore/lang/tablemapper/InboundTableMapper.java:        the cache, no value is returned.
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @param rec the input record or record set in case a Map<String, Object> of lists is passed
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @param crec an optional simple Map<String, Object> (may be null) of data to be added to each input row before mapping
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @return if batch data was inserted then a Map<String, Object> (columns) of lists (row data) of all data inserted
java/org/qore/lang/tablemapper/InboundTableMapper.java:        and potentially returned (in case of sequences) from the database server is returned; if constant mappings
java/org/qore/lang/tablemapper/InboundTableMapper.java:        are used with batch data, then they are returned as single values assigned to the Map<String, Object> keys; always
java/org/qore/lang/tablemapper/InboundTableMapper.java:        returns a batch (Map<String, Object> of lists); in case no insert was made, null is returned
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:          or destroying the object when using this method
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush() or discard() needs to be executed for each mapper used in the block when using multiple mappers
java/org/qore/lang/tablemapper/InboundTableMapper.java:          whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - this method and batched inserts/upserts in general cannot be used when the \c "unstable_input" option is
java/org/qore/lang/tablemapper/InboundTableMapper.java:          given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if the \c "insert_block" option is set to 1, then this method simply calls insertRow(); however please note
java/org/qore/lang/tablemapper/InboundTableMapper.java:          that in this case the return value is a Map<String, Object> of single value lists corresponding to a batch data insert
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if an error occurs flushing data, the count is reset by calling
java/org/qore/lang/tablemapper/InboundTableMapper.java:          @ref Mapper::Mapper::resetCount() "Mapper::resetCount()"
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - using a Map<String, Object> of lists in \a rec; note that this provides very high performance with SQL drivers that
java/org/qore/lang/tablemapper/InboundTableMapper.java:          support Bulk DML
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - in case a Map<String, Object> of empty lists is passed, null is returned
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - 'crec' does not affect the number of output lines; in particular, if 'rec' is a batch with \c N rows of a
java/org/qore/lang/tablemapper/InboundTableMapper.java:          column \c C and 'crec = ("C" : "mystring")' then the output will be as if there was 'N' rows with
java/org/qore/lang/tablemapper/InboundTableMapper.java:          \c C = "mystring" on the input.
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - on mappers with "insert_block > 1" (i.e. also the underlying DB must allow for bulk operations), it is not
java/org/qore/lang/tablemapper/InboundTableMapper.java:          allowed to use both single-record insertions (like insertRow()) and bulk operations (queueData()) in one
java/org/qore/lang/tablemapper/InboundTableMapper.java:          transaction. Mixing insertRow() with queueData() leads to mismatch of Oracle DB types raising corresponding
java/org/qore/lang/tablemapper/InboundTableMapper.java:          exceptions depending on particular record types (e.g. "ORA-01722: invalid number").
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @see
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - discard()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MAPPER-BATCH-ERROR this exception is thrown if this method is called when the \c "unstable_input" option
java/org/qore/lang/tablemapper/InboundTableMapper.java:        was given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object> queueData(Map<String, Object> rec, Map<String, Object> crec) throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>)obj.callMethod("queueData", rec, crec);
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! inserts/upserts a row (or a set of rows, in case a Map<String, Object> of lists is passed) into the block buffer based on a mapped input record; the block buffer is flushed to the DB if the buffer size reaches the limit defined by the \c "insert_block" option; does not commit the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @par Example:
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @code{.java}
java/org/qore/lang/tablemapper/InboundTableMapper.java:{
java/org/qore/lang/tablemapper/InboundTableMapper.java:    AbstractTable table = UserApi.get_sql_table("some_table");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table_mapper = UserApi.get_mapper("my_mapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.queueData(recs);
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.flush();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.discard();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @endcode
java/org/qore/lang/tablemapper/InboundTableMapper.java:        Data is only inserted/upserted if the block buffer size reaches the limit defined by the \c "insert_block" option,
java/org/qore/lang/tablemapper/InboundTableMapper.java:        in which case this method returns all the data inserted/upserted.  In case the mapped data is only inserted into
java/org/qore/lang/tablemapper/InboundTableMapper.java:        the cache, no value is returned.
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @param rec the input record or record set in case a Map<String, Object> of lists is passed
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @return if batch data was inserted then a Map<String, Object> (columns) of lists (row data) of all data inserted
java/org/qore/lang/tablemapper/InboundTableMapper.java:        and potentially returned (in case of sequences) from the database server is returned; if constant mappings
java/org/qore/lang/tablemapper/InboundTableMapper.java:        are used with batch data, then they are returned as single values assigned to the Map<String, Object> keys; always
java/org/qore/lang/tablemapper/InboundTableMapper.java:        returns a batch (Map<String, Object> of lists); in case no insert was made, null is returned
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:          or destroying the object when using this method
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush() or discard() needs to be executed for each mapper used in the block when using multiple mappers
java/org/qore/lang/tablemapper/InboundTableMapper.java:          whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - this method and batched inserts/upserts in general cannot be used when the \c "unstable_input" option is
java/org/qore/lang/tablemapper/InboundTableMapper.java:          given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if the \c "insert_block" option is set to 1, then this method simply calls insertRow(); however please note
java/org/qore/lang/tablemapper/InboundTableMapper.java:          that in this case the return value is a Map<String, Object> of single value lists corresponding to a batch data insert
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if an error occurs flushing data, the count is reset by calling
java/org/qore/lang/tablemapper/InboundTableMapper.java:          @ref Mapper::Mapper::resetCount() "Mapper::resetCount()"
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - using a Map<String, Object> of lists in \a rec; note that this provides very high performance with SQL drivers that
java/org/qore/lang/tablemapper/InboundTableMapper.java:          support Bulk DML
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - in case a Map<String, Object> of empty lists is passed, null is returned
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - 'crec' does not affect the number of output lines; in particular, if 'rec' is a batch with \c N rows of a
java/org/qore/lang/tablemapper/InboundTableMapper.java:          column \c C and 'crec = ("C" : "mystring")' then the output will be as if there was 'N' rows with
java/org/qore/lang/tablemapper/InboundTableMapper.java:          \c C = "mystring" on the input.
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - on mappers with "insert_block > 1" (i.e. also the underlying DB must allow for bulk operations), it is not
java/org/qore/lang/tablemapper/InboundTableMapper.java:          allowed to use both single-record insertions (like insertRow()) and bulk operations (queueData()) in one
java/org/qore/lang/tablemapper/InboundTableMapper.java:          transaction. Mixing insertRow() with queueData() leads to mismatch of Oracle DB types raising corresponding
java/org/qore/lang/tablemapper/InboundTableMapper.java:          exceptions depending on particular record types (e.g. "ORA-01722: invalid number").
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @see
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - discard()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MAPPER-BATCH-ERROR this exception is thrown if this method is called when the \c "unstable_input" option
java/org/qore/lang/tablemapper/InboundTableMapper.java:        was given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object> queueData(Map<String, Object> rec) throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>)obj.callMethod("queueData", rec);
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! inserts/upserts a set of rows (list of hashes representing input records) into the block buffer based on a mapped input record; the block buffer is flushed to the DB if the buffer size reaches the limit defined by the \c "insert_block" option; does not commit the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @par Example:
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @code{.java}
java/org/qore/lang/tablemapper/InboundTableMapper.java:{
java/org/qore/lang/tablemapper/InboundTableMapper.java:    AbstractTable table = UserApi.get_sql_table("some_table");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table_mapper = UserApi.get_mapper("my_mapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.queueData(l, crec);
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.flush();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.discard();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @endcode
java/org/qore/lang/tablemapper/InboundTableMapper.java:        Data is only inserted/upserted if the block buffer size reaches the limit defined by the \c "insert_block" option, in which case this method returns all the data inserted/upserted.  In case the mapped data is only inserted into the cache, no value is returned.
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @param l a list of hashes representing the input records
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @param crec an optional simple Map<String, Object> of data to be added to each row
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @return if batch data was inserted/upserted then a Map<String, Object> (columns) of lists (row data) of all data inserted/upserted and potentially returned (in case of sequences) from the database server is returned
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction or destroying the object when using this method
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush() or discard() needs to be executed for each mapper used in the block when using multiple mappers whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - this method and batched inserts/upserts in general cannot be used when the \c "unstable_input" option is given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if the \c "insert_block" option is set to 1, then this method simply calls insertRow()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if an error occurs flushing data, the count is reset by calling @ref Mapper::Mapper::resetCount() "Mapper::resetCount()"
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @see
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - discard()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MAPPER-BATCH-ERROR this exception is thrown if this method is called when the \c "unstable_input" option was given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object> queueData(Map<String, Object>[] l, Map<String, Object> crec) throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>)obj.callMethod("queueData", (Object)l, crec);
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! inserts/upserts a set of rows (list of hashes representing input records) into the block buffer based on a mapped input record; the block buffer is flushed to the DB if the buffer size reaches the limit defined by the \c "insert_block" option; does not commit the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @par Example:
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @code{.java}
java/org/qore/lang/tablemapper/InboundTableMapper.java:{
java/org/qore/lang/tablemapper/InboundTableMapper.java:    AbstractTable table = UserApi.get_sql_table("some_table");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table_mapper = UserApi.get_mapper("my_mapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.queueData(l);
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.flush();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.discard();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @endcode
java/org/qore/lang/tablemapper/InboundTableMapper.java:        Data is only inserted/upserted if the block buffer size reaches the limit defined by the \c "insert_block" option, in which case this method returns all the data inserted/upserted.  In case the mapped data is only inserted into the cache, no value is returned.
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @param l a list of hashes representing the input records
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @return if batch data was inserted/upserted then a Map<String, Object> (columns) of lists (row data) of all data inserted/upserted and potentially returned (in case of sequences) from the database server is returned; returns null if no data was inserted
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction or destroying the object when using this method
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush() or discard() needs to be executed for each mapper used in the block when using multiple mappers whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - this method and batched inserts/upserts in general cannot be used when the \c "unstable_input" option is given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if the \c "insert_block" option is set to 1, then this method simply calls insertRow()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if an error occurs flushing data, the count is reset by calling @ref Mapper::Mapper::resetCount() "Mapper::resetCount()"
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @see
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - discard()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MAPPER-BATCH-ERROR this exception is thrown if this method is called when the \c "unstable_input" option was given in the constructor
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @throw INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object> queueData(Map<String, Object>[] l) throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>)obj.callMethod("queueData", (Object)l);
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! flushes any remaining batched data to the database; this method should always be called before committing the transaction or destroying the object
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @par Example:
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @code{.java}
java/org/qore/lang/tablemapper/InboundTableMapper.java:{
java/org/qore/lang/tablemapper/InboundTableMapper.java:    AbstractTable table = UserApi.get_sql_table("some_table");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table_mapper = UserApi.get_mapper("my_mapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.queueData(l);
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.flush();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.discard();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @endcode
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @return if batch data was inserted then a hash (columns) of lists (row data) of all data inserted and potentially
java/org/qore/lang/tablemapper/InboundTableMapper.java:        returned (in case of sequences) from the database server is returned; if constant mappings are used with batch
java/org/qore/lang/tablemapper/InboundTableMapper.java:        data, then they are returned as single values assigned to the hash keys; returns null if no data was inserted
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush() or discard() needs to be executed for each mapper used in the block when using multiple mappers whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - also clears any row @ref closure or @ref call_reference set for batch operations
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if an error occurs flushing data, the count is reset by calling @ref Mapper::Mapper::resetCount() "Mapper::resetCount()"
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @see
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - queueData()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - discard()
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object> flush() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>)obj.callMethod("flush");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! discards any buffered batched data; this method should be called after using the batch APIs (queueData()) and an error occurs
java/org/qore/lang/tablemapper/InboundTableMapper.java:    /** @par Example:
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @code{.java}
java/org/qore/lang/tablemapper/InboundTableMapper.java:{
java/org/qore/lang/tablemapper/InboundTableMapper.java:    AbstractTable table = UserApi.get_sql_table("some_table");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table_mapper = UserApi.get_mapper("my_mapper");
java/org/qore/lang/tablemapper/InboundTableMapper.java:        try {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.queueData(l);
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.flush();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } catch (Throwable e) {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.discard();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:            table_mapper.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:        }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    } finally {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        table.release();
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @endcode
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @note
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush() or discard() needs to be executed for each mapper used in the block when using multiple mappers whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - also clears any row @ref closure or @ref call_reference set for batch operations
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - if an error occurs flushing data, the count is reset by calling @ref Mapper::Mapper::resetCount() "Mapper::resetCount()"
java/org/qore/lang/tablemapper/InboundTableMapper.java:        @see
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - queueData()
java/org/qore/lang/tablemapper/InboundTableMapper.java:        - flush()
java/org/qore/lang/tablemapper/InboundTableMapper.java:    */
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public void discard() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        obj.callMethod("discard");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! returns a list argument for the SqlUtil "returning" option, if applicable
java/org/qore/lang/tablemapper/InboundTableMapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public HashMap<String, Object>[] getReturning() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (HashMap<String, Object>[])obj.callMethod("getReturning");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! flushes any queued data and commits the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public void commit() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        obj.callMethod("commit");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! discards any queued data and rolls back the transaction
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public void rollback() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        obj.callMethod("rollback");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! returns the table name
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public String getTableName() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return (String)obj.callMethod("getTableName");
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! returns the underlying @ref org.qore.lang.sqlutil.AbstractTable object
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public AbstractTable getTable() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        // callMethodSave() is not needed here as the strong reference to the
java/org/qore/lang/tablemapper/InboundTableMapper.java:        // Qore object is stored in the current object
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return new AbstractTable((QoreObject)obj.callMethod("getTable"));
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:    //! returns the @ref org.qore.lang.AbstractDatasource object associated with this object
java/org/qore/lang/tablemapper/InboundTableMapper.java:    public AbstractDatasource getDatasource() throws Throwable {
java/org/qore/lang/tablemapper/InboundTableMapper.java:        // callMethodSave() is not needed here as the strong reference to the
java/org/qore/lang/tablemapper/InboundTableMapper.java:        // Qore object is stored in the current object
java/org/qore/lang/tablemapper/InboundTableMapper.java:        return new AbstractDatasource((QoreObject)obj.callMethod("getDatasource"));
java/org/qore/lang/tablemapper/InboundTableMapper.java:    }
java/org/qore/lang/tablemapper/InboundTableMapper.java:}
java/org/qore/lang/LogCallback.java:package org.qore.lang;
java/org/qore/lang/LogCallback.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/lang/LogCallback.java://! This class is used for row code callbacks with bulk SQL classes
java/org/qore/lang/LogCallback.java:public interface LogCallback extends QoreClosureMarker {
java/org/qore/lang/LogCallback.java:    //! This method is called to provide logging information
java/org/qore/lang/LogCallback.java:    void call(String fmt, Object... args);
java/org/qore/lang/LogCallback.java:}
java/org/qore/lang/mailmessage/Part.java:/** Java wrapper for the %Qore Part class
java/org/qore/lang/mailmessage/Part.java: *
java/org/qore/lang/mailmessage/Part.java: */
java/org/qore/lang/mailmessage/Part.java:package org.qore.lang.mailmessage;
java/org/qore/lang/mailmessage/Part.java:// java imports
java/org/qore/lang/mailmessage/Part.java:import java.util.Map;
java/org/qore/lang/mailmessage/Part.java:import java.util.HashMap;
java/org/qore/lang/mailmessage/Part.java:// jni module imports
java/org/qore/lang/mailmessage/Part.java:import org.qore.jni.QoreObject;
java/org/qore/lang/mailmessage/Part.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/mailmessage/Part.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/mailmessage/Part.java:import org.qore.jni.QoreRelativeTime;
java/org/qore/lang/mailmessage/Part.java://! Java wrapper for the @ref MailPart::Part class in %Qore
java/org/qore/lang/mailmessage/Part.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/mailmessage/Part.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/mailmessage/Part.java:    <tt>import qoremod.MailMessage.Part;</tt>
java/org/qore/lang/mailmessage/Part.java:*/
java/org/qore/lang/mailmessage/Part.java:@Deprecated
java/org/qore/lang/mailmessage/Part.java:public class Part extends QoreObjectWrapper {
java/org/qore/lang/mailmessage/Part.java:    // static initialization
java/org/qore/lang/mailmessage/Part.java:    static {
java/org/qore/lang/mailmessage/Part.java:        // initialize the Qore library if necessary
java/org/qore/lang/mailmessage/Part.java:        try {
java/org/qore/lang/mailmessage/Part.java:            QoreJavaApi.initQore();
java/org/qore/lang/mailmessage/Part.java:            QoreJavaApi.callFunction("load_module", "MailMessage");
java/org/qore/lang/mailmessage/Part.java:        } catch (Throwable e) {
java/org/qore/lang/mailmessage/Part.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/mailmessage/Part.java:        }
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:    //! creates the object
java/org/qore/lang/mailmessage/Part.java:    public Part(QoreObject ds) {
java/org/qore/lang/mailmessage/Part.java:        super(ds);
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:    //! returns the name of the Part
java/org/qore/lang/mailmessage/Part.java:    public String getName() throws Throwable {
java/org/qore/lang/mailmessage/Part.java:        return (String)obj.callMethod("getName");
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:    //! returns the mime type of the Part
java/org/qore/lang/mailmessage/Part.java:    public String getMime() throws Throwable {
java/org/qore/lang/mailmessage/Part.java:        return (String)obj.callMethod("getMime");
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:    //! returns the data of the Part
java/org/qore/lang/mailmessage/Part.java:    public Object getData() throws Throwable {
java/org/qore/lang/mailmessage/Part.java:        return obj.callMethod("getData");
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:    //! returns the transfer encoding of the Part
java/org/qore/lang/mailmessage/Part.java:    public String getTransferEncoding() throws Throwable {
java/org/qore/lang/mailmessage/Part.java:        return (String)obj.callMethod("getTransferEncoding");
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:    //! returns any headers for the Part
java/org/qore/lang/mailmessage/Part.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mailmessage/Part.java:    public Map<String, String> getHeaders() throws Throwable {
java/org/qore/lang/mailmessage/Part.java:        return (Map<String, String>)obj.callMethod("getHeaders");
java/org/qore/lang/mailmessage/Part.java:    }
java/org/qore/lang/mailmessage/Part.java:}
java/org/qore/lang/mailmessage/Attachment.java:/** Java wrapper for the %Qore Attachment class
java/org/qore/lang/mailmessage/Attachment.java: *
java/org/qore/lang/mailmessage/Attachment.java: */
java/org/qore/lang/mailmessage/Attachment.java:package org.qore.lang.mailmessage;
java/org/qore/lang/mailmessage/Attachment.java:// java imports
java/org/qore/lang/mailmessage/Attachment.java:import java.util.Map;
java/org/qore/lang/mailmessage/Attachment.java:import java.util.HashMap;
java/org/qore/lang/mailmessage/Attachment.java:// jni module imports
java/org/qore/lang/mailmessage/Attachment.java:import org.qore.jni.QoreObject;
java/org/qore/lang/mailmessage/Attachment.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/mailmessage/Attachment.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/mailmessage/Attachment.java:import org.qore.jni.QoreRelativeTime;
java/org/qore/lang/mailmessage/Attachment.java:// qore imports
java/org/qore/lang/mailmessage/Attachment.java:import org.qore.lang.mailmessage.Part;
java/org/qore/lang/mailmessage/Attachment.java://! Java wrapper for the @ref MailAttachment::Attachment class in %Qore
java/org/qore/lang/mailmessage/Attachment.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/mailmessage/Attachment.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/mailmessage/Attachment.java:    <tt>import qoremod.MailMessage.Attachment;</tt>
java/org/qore/lang/mailmessage/Attachment.java:*/
java/org/qore/lang/mailmessage/Attachment.java:@Deprecated
java/org/qore/lang/mailmessage/Attachment.java:public class Attachment extends Part {
java/org/qore/lang/mailmessage/Attachment.java:    // static initialization
java/org/qore/lang/mailmessage/Attachment.java:    static {
java/org/qore/lang/mailmessage/Attachment.java:        // initialize the Qore library if necessary
java/org/qore/lang/mailmessage/Attachment.java:        try {
java/org/qore/lang/mailmessage/Attachment.java:            QoreJavaApi.initQore();
java/org/qore/lang/mailmessage/Attachment.java:            QoreJavaApi.callFunction("load_module", "MailMessage");
java/org/qore/lang/mailmessage/Attachment.java:        } catch (Throwable e) {
java/org/qore/lang/mailmessage/Attachment.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/mailmessage/Attachment.java:        }
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates the object
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(QoreObject ds) {
java/org/qore/lang/mailmessage/Attachment.java:        super(ds);
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates an Attachment object for a Message object
java/org/qore/lang/mailmessage/Attachment.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Attachment.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Attachment.java:        @param data the attachment data itself
java/org/qore/lang/mailmessage/Attachment.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Attachment.java:        @param hdr optional headers for the MIME part for the attachment
java/org/qore/lang/mailmessage/Attachment.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Attachment.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Attachment.java:     */
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(String name, String mime, String data, String enc, Map<String, String> hdr) throws Throwable {
java/org/qore/lang/mailmessage/Attachment.java:        super(QoreJavaApi.newObjectSave("MailMessage::Attachment", name, mime, data, enc, hdr));
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates an Attachment object for a Message object
java/org/qore/lang/mailmessage/Attachment.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Attachment.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Attachment.java:        @param data the attachment data itself
java/org/qore/lang/mailmessage/Attachment.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Attachment.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Attachment.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Attachment.java:     */
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(String name, String mime, String data, String enc) throws Throwable {
java/org/qore/lang/mailmessage/Attachment.java:        super(QoreJavaApi.newObjectSave("MailMessage::Attachment", name, mime, data, enc));
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates an Attachment object for a Message object
java/org/qore/lang/mailmessage/Attachment.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Attachment.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Attachment.java:        @param data the attachment data itself
java/org/qore/lang/mailmessage/Attachment.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Attachment.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Attachment.java:     */
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(String name, String mime, String data) throws Throwable {
java/org/qore/lang/mailmessage/Attachment.java:        super(QoreJavaApi.newObjectSave("MailMessage::Attachment", name, mime, data));
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates an Attachment object for a Message object
java/org/qore/lang/mailmessage/Attachment.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Attachment.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Attachment.java:        @param data the attachment data itself
java/org/qore/lang/mailmessage/Attachment.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Attachment.java:        @param hdr optional headers for the MIME part for the attachment
java/org/qore/lang/mailmessage/Attachment.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Attachment.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Attachment.java:     */
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(String name, String mime, byte[] data, String enc, Map<String, String> hdr) throws Throwable {
java/org/qore/lang/mailmessage/Attachment.java:        super(QoreJavaApi.newObjectSave("MailMessage::Attachment", name, mime, data, enc, hdr));
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates an Attachment object for a Message object
java/org/qore/lang/mailmessage/Attachment.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Attachment.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Attachment.java:        @param data the attachment data itself
java/org/qore/lang/mailmessage/Attachment.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Attachment.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Attachment.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Attachment.java:     */
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(String name, String mime, byte[] data, String enc) throws Throwable {
java/org/qore/lang/mailmessage/Attachment.java:        super(QoreJavaApi.newObjectSave("MailMessage::Attachment", name, mime, data, enc));
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:    //! creates an Attachment object for a Message object
java/org/qore/lang/mailmessage/Attachment.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Attachment.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Attachment.java:        @param data the attachment data itself
java/org/qore/lang/mailmessage/Attachment.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Attachment.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Attachment.java:     */
java/org/qore/lang/mailmessage/Attachment.java:    public Attachment(String name, String mime, byte[] data) throws Throwable {
java/org/qore/lang/mailmessage/Attachment.java:        super(QoreJavaApi.newObjectSave("MailMessage::Attachment", name, mime, data));
java/org/qore/lang/mailmessage/Attachment.java:    }
java/org/qore/lang/mailmessage/Attachment.java:}
java/org/qore/lang/mailmessage/Message.java:/** Java wrapper for the %Qore Message class
java/org/qore/lang/mailmessage/Message.java: *
java/org/qore/lang/mailmessage/Message.java: */
java/org/qore/lang/mailmessage/Message.java:package org.qore.lang.mailmessage;
java/org/qore/lang/mailmessage/Message.java:// java imports
java/org/qore/lang/mailmessage/Message.java:import java.util.Map;
java/org/qore/lang/mailmessage/Message.java:import java.util.HashMap;
java/org/qore/lang/mailmessage/Message.java:// jni module imports
java/org/qore/lang/mailmessage/Message.java:import org.qore.jni.QoreObject;
java/org/qore/lang/mailmessage/Message.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/mailmessage/Message.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/mailmessage/Message.java:import org.qore.jni.QoreRelativeTime;
java/org/qore/lang/mailmessage/Message.java:// qore imports
java/org/qore/lang/mailmessage/Message.java:import org.qore.lang.mailmessage.Part;
java/org/qore/lang/mailmessage/Message.java:import org.qore.lang.mailmessage.Attachment;
java/org/qore/lang/mailmessage/Message.java://! Java wrapper for the @ref MailMessage::Message class in %Qore
java/org/qore/lang/mailmessage/Message.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/mailmessage/Message.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/mailmessage/Message.java:    <tt>import qoremod.MailMessage.Message;</tt>
java/org/qore/lang/mailmessage/Message.java:*/
java/org/qore/lang/mailmessage/Message.java:@Deprecated
java/org/qore/lang/mailmessage/Message.java:public class Message extends QoreObjectWrapper {
java/org/qore/lang/mailmessage/Message.java:    // static initialization
java/org/qore/lang/mailmessage/Message.java:    static {
java/org/qore/lang/mailmessage/Message.java:        // initialize the Qore library if necessary
java/org/qore/lang/mailmessage/Message.java:        try {
java/org/qore/lang/mailmessage/Message.java:            QoreJavaApi.initQore();
java/org/qore/lang/mailmessage/Message.java:            QoreJavaApi.callFunction("load_module", "MailMessage");
java/org/qore/lang/mailmessage/Message.java:        } catch (Throwable e) {
java/org/qore/lang/mailmessage/Message.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/mailmessage/Message.java:        }
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates the object
java/org/qore/lang/mailmessage/Message.java:    public Message(QoreObject ds) {
java/org/qore/lang/mailmessage/Message.java:        super(ds);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates a Message object from the arguments given; this variant of the constructor is designed to be used to create a Message object for sending with the SmtpClient class
java/org/qore/lang/mailmessage/Message.java:    /** Use the @ref addTo() method to add message recipients
java/org/qore/lang/mailmessage/Message.java:        @param n_sender the sender's email address; can be in the format \c "Full Display Name <name@example.com>"
java/org/qore/lang/mailmessage/Message.java:        @param n_subject the subject line for the email; the subject will be encoded with <a href="http://tools.ietf.org/html/rfc2047">"Q" encoding</a>
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-CONSTRUCTOR-ERROR the sender's email address is not valid; the subject is empty
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public Message(String n_sender, String n_subject) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        super(QoreJavaApi.newObjectSave("MailMessage::Message", n_sender, n_subject));
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates a Message object from raw message text from a received email message
java/org/qore/lang/mailmessage/Message.java:    /** @param msg the raw message text as received
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-PARSE-ERROR invalid message data
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public Message(String msg) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        super(QoreJavaApi.newObjectSave("MailMessage::Message", msg));
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! serializes the message to a string that can be sent to an SMTP server, for example
java/org/qore/lang/mailmessage/Message.java:    /**
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-ERROR the message is incomplete and cannot be sent
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String serialize() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("serialize");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! add a recipient to the Message's recipient list
java/org/qore/lang/mailmessage/Message.java:    /** @param recipient the email address to send the message to
java/org/qore/lang/mailmessage/Message.java:        @return the list of "To:" addresses
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-ADDTO-ERROR the recipient's email address is invalid
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String[] addTO(String recipient) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("addTO", recipient);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! add a recipient to the Message's cc list
java/org/qore/lang/mailmessage/Message.java:    /** @param recipient the email address to send the message to (cc)
java/org/qore/lang/mailmessage/Message.java:        @return the list of "CC:" addresses
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-ADDCC-ERROR the recipient's email address is invalid
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String[] addCC(String recipient) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("addCC", recipient);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! add a recipient to the Message's bcc list
java/org/qore/lang/mailmessage/Message.java:    /** @param recipient the email address to send the message to (bcc)
java/org/qore/lang/mailmessage/Message.java:        @return the list of "BCC:" addresses
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-ADDBCC-ERROR the recipient's email address is invalid
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String[] addBCC(String recipient) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("addBCC", recipient);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the sender's address in display format
java/org/qore/lang/mailmessage/Message.java:    public String getSender() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getSender");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the sender's email address
java/org/qore/lang/mailmessage/Message.java:    public String getFrom() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getFrom");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the list of "To:" addresses
java/org/qore/lang/mailmessage/Message.java:    public String[] getTO() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("getTO");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the list of "CC:" addresses
java/org/qore/lang/mailmessage/Message.java:    public String[] getCC() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("getCC");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the list of "BCC:" addresses
java/org/qore/lang/mailmessage/Message.java:    public String[] getBCC() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("getBCC");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the subject of the Message
java/org/qore/lang/mailmessage/Message.java:    public String getSubject() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getSubject");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! return all the email addresses the message will be sent to, a combination of the "To:", "CC:", and "BCC:" lists
java/org/qore/lang/mailmessage/Message.java:    public String[] getRecipients() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("getRecipients");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns @ref True "True" if the message can be sent, @ref False "False" if not
java/org/qore/lang/mailmessage/Message.java:    /** To be able to send a message, there must be at least one recipient in the "To:" or the "CC:" or the "BCC:" lists
java/org/qore/lang/mailmessage/Message.java:        and there must be a message body
java/org/qore/lang/mailmessage/Message.java:        @return @ref True "True" if the message can be sent, @ref False "False" if not
java/org/qore/lang/mailmessage/Message.java:        @see checkSendPossible()
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public boolean sendPossible() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (boolean)obj.callMethod("sendPossible");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! throws a \c MESSAGE-ERROR exception if the Message cannot be sent
java/org/qore/lang/mailmessage/Message.java:    /** To be able to send a message, there must be at least one recipient in the "To:" or the "CC:" or the "BCC:" lists
java/org/qore/lang/mailmessage/Message.java:        and there must be a message body
java/org/qore/lang/mailmessage/Message.java:        @see sendPossible()
java/org/qore/lang/mailmessage/Message.java:        @throw MESSAGE-ERROR the message is incomplete and cannot be sent
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void checkSendPossible() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("checkSendPossible");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets or replaces the Message body
java/org/qore/lang/mailmessage/Message.java:    /** @param n_body the Message body to set
java/org/qore/lang/mailmessage/Message.java:        @param n_enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @param n_content_type the Content-Type for the message body, if any
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setBody(String n_body, String n_enc, String n_content_type) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setBody", n_body, n_enc, n_content_type);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets or replaces the Message body
java/org/qore/lang/mailmessage/Message.java:    /** @param n_body the Message body to set
java/org/qore/lang/mailmessage/Message.java:        @param n_enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setBody(String n_body, String n_enc) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setBody", n_body, n_enc);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets or replaces the Message body
java/org/qore/lang/mailmessage/Message.java:    /** @param n_body the Message body to set
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setBody(String n_body) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setBody", n_body);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets or replaces the Message body
java/org/qore/lang/mailmessage/Message.java:    /** @param n_body the Message body to set
java/org/qore/lang/mailmessage/Message.java:        @param n_enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @param n_content_type the Content-Type for the message body, if any
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setBody(byte[] n_body, String n_enc, String n_content_type) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setBody", n_body, n_enc, n_content_type);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets or replaces the Message body
java/org/qore/lang/mailmessage/Message.java:    /** @param n_body the Message body to set
java/org/qore/lang/mailmessage/Message.java:        @param n_enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setBody(byte[] n_body, String n_enc) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setBody", n_body, n_enc);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets or replaces the Message body
java/org/qore/lang/mailmessage/Message.java:    /** @param n_body the Message body to set
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setBody(byte[] n_body) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setBody", n_body);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! concatenates a string to the message body
java/org/qore/lang/mailmessage/Message.java:    /** @param str the string to concatenate to the Message body
java/org/qore/lang/mailmessage/Message.java:        @throw BODY-ERROR cannot concatenate a string to a binary body
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void addBody(String str) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("addBody", str);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! concatenates a binary object to the message body
java/org/qore/lang/mailmessage/Message.java:    /** @param bin the binary object to concatenate to the Message body
java/org/qore/lang/mailmessage/Message.java:        @throw BODY-ERROR cannot concatenate a binary object to a string body
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void addBody(byte[] bin) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("addBody", bin);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the Message body
java/org/qore/lang/mailmessage/Message.java:    public Object getBody() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return obj.callMethod("getBody");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the transfer encoding for the mssage body (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:    public String getBodyTransferEncoding() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getBodyTransferEncoding");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets/replaces the Message headers
java/org/qore/lang/mailmessage/Message.java:    /** @param hdr a single string giving a single Message header to set (replaces all message headers with the given string)
java/org/qore/lang/mailmessage/Message.java:        @throw HEADER-ERROR no ':' separator character found in header string
java/org/qore/lang/mailmessage/Message.java:        @note headers for importance, delivery receipt and read receipt will be added automatically and should not be included here
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setHeader(String hdr) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setHeader", hdr);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets/replaces the list of Message headers from a list of header strings
java/org/qore/lang/mailmessage/Message.java:    /** @param hdrs a list of Message header strings to set (replaces all message headers with the given list of strings)
java/org/qore/lang/mailmessage/Message.java:        @throw HEADER-ERROR no ':' separator character found in header string
java/org/qore/lang/mailmessage/Message.java:        @note headers for importance, delivery receipt and read receipt will be added automatically and should not be included here
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setHeader(String[] hdrs) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setHeader", (Object)hdrs);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets/replaces the list of Message headers from a hash of header info
java/org/qore/lang/mailmessage/Message.java:    /** @param hdrs a hash of Message headers to set (replaces all message headers with the given hash)
java/org/qore/lang/mailmessage/Message.java:        @note headers for importance, delivery receipt and read receipt will be added automatically and should not be included here
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void setHeader(Map<String, String> hdrs) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("setHeader", hdrs);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! adds a header to the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param hdr a header to add to the Message
java/org/qore/lang/mailmessage/Message.java:        @note headers for importance, delivery receipt and read receipt will be added automatically and should not be included here
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void addHeader(String hdr) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("addHeader", hdr);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! adds a list of headers to the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param hdrs a list of headers to add to the Message
java/org/qore/lang/mailmessage/Message.java:        @note headers for importance, delivery receipt and read receipt will be added automatically and should not be included here
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void addHeader(String[] hdrs) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("addHeader", (Object)hdrs);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! adds a hash of headers to the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param hdrs a hash of headers to add to the Message
java/org/qore/lang/mailmessage/Message.java:        @note headers for importance, delivery receipt and read receipt will be added automatically and should not be included here
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void addHeader(Map<String, String> hdrs) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("addHeader", hdrs);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the current Message headers as a list of strings
java/org/qore/lang/mailmessage/Message.java:    public String[] getHeader() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String[])obj.callMethod("getHeader");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the current Message headers as a hash
java/org/qore/lang/mailmessage/Message.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mailmessage/Message.java:    public Map<String, String> getHeaders() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (Map<String, String>)obj.callMethod("getHeaders");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the current importance setting
java/org/qore/lang/mailmessage/Message.java:    /** if this is @ref True "True", then the following headers will be sent:
java/org/qore/lang/mailmessage/Message.java:        - \c Importance: high
java/org/qore/lang/mailmessage/Message.java:        - \c X-Priority: 1
java/org/qore/lang/mailmessage/Message.java:        - \c Priority: Urgent
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public boolean important() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (boolean)obj.callMethod("important");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets the importance setting
java/org/qore/lang/mailmessage/Message.java:    /** if this is @ref True "True", then the following headers will be sent:
java/org/qore/lang/mailmessage/Message.java:        - \c Importance: high
java/org/qore/lang/mailmessage/Message.java:        - \c X-Priority: 1
java/org/qore/lang/mailmessage/Message.java:        - \c Priority: Urgent
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void important(boolean i) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("important", i);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the current read delivery receipt setting
java/org/qore/lang/mailmessage/Message.java:    /** if this is @ref True "True", then the following header will be sent:
java/org/qore/lang/mailmessage/Message.java:        - \c Return-Receipt-To: <sender's email address>
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public boolean receiptRead() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (boolean)obj.callMethod("receiptRead");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets the read delivery receipt setting
java/org/qore/lang/mailmessage/Message.java:    /** if this is @ref True "True", then the following header will be sent:
java/org/qore/lang/mailmessage/Message.java:        - \c Return-Receipt-To: <sender's email address>
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void receiptRead(boolean arg) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("receiptRead", arg);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns the delivery receipt setting
java/org/qore/lang/mailmessage/Message.java:    /** if this is @ref True "True", then the following header will be sent:
java/org/qore/lang/mailmessage/Message.java:        - \c Disposition-Notification-To: <sender's email address>
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public boolean receiptDelivery() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (boolean)obj.callMethod("receiptDelivery");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! sets the delivery receipt setting
java/org/qore/lang/mailmessage/Message.java:    /** if this is @ref True "True", then the following header will be sent:
java/org/qore/lang/mailmessage/Message.java:        - \c Disposition-Notification-To: <sender's email address>
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void receiptDelivery(boolean arg) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("receiptDelivery", arg);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates an attachment for the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Message.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Message.java:        @param att the attachment itself
java/org/qore/lang/mailmessage/Message.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @param hdr optional headers for the MIME part for the attachment
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void attach(String name, String mime, String att, String enc, Map<String, String> hdr) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", name, mime, att, enc, hdr);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates an attachment for the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Message.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Message.java:        @param att the attachment itself
java/org/qore/lang/mailmessage/Message.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void attach(String name, String mime, String att, String enc) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", name, mime, att, enc);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates an attachment for the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Message.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Message.java:        @param att the attachment itself
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void attach(String name, String mime, String att) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", name, mime, att);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates an attachment for the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Message.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Message.java:        @param att the attachment itself
java/org/qore/lang/mailmessage/Message.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @param hdr optional headers for the MIME part for the attachment
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void attach(String name, String mime, byte[] att, String enc, Map<String, String> hdr) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", name, mime, att, enc, hdr);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates an attachment for the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Message.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Message.java:        @param att the attachment itself
java/org/qore/lang/mailmessage/Message.java:        @param enc the encoding type for the message (see @ref MessageEncodings for possible values)
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void attach(String name, String mime, byte[] att, String enc) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", name, mime, att, enc);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! creates an attachment for the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param name the name of the attachment to be displayed in the message, normally a file name without any path
java/org/qore/lang/mailmessage/Message.java:        @param mime the mime type for the message
java/org/qore/lang/mailmessage/Message.java:        @param att the attachment itself
java/org/qore/lang/mailmessage/Message.java:        @throw UNKNOWN-ENCODING the message encoding value passed is unknown/unimplemented
java/org/qore/lang/mailmessage/Message.java:        @throw INVALID-ENCODING the encoding given cannot be used with data given
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public void attach(String name, String mime, byte[] att) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", name, mime, att);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! adds an Attachment to the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param att the Attachment to add to the Message
java/org/qore/lang/mailmessage/Message.java:     */
java/org/qore/lang/mailmessage/Message.java:    public void attach(Attachment att) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        obj.callMethod("attach", att);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a list of Attachment objects for the Message
java/org/qore/lang/mailmessage/Message.java:    public Attachment[] getAttachments() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (Attachment[])obj.callMethod("getAttachments");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a list of non-attachment Part objects for the Message
java/org/qore/lang/mailmessage/Message.java:    /** these could represent alternative representations of the message body, for example
java/org/qore/lang/mailmessage/Message.java:     */
java/org/qore/lang/mailmessage/Message.java:    public Part[] getParts() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (Part[])obj.callMethod("getParts");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a string of the message headers
java/org/qore/lang/mailmessage/Message.java:    /** @param eol the End-Of-Line marker for the string
java/org/qore/lang/mailmessage/Message.java:        @param encode encode non-ASCII values with quoted printable encoding (http://tools.ietf.org/html/rfc2047)
java/org/qore/lang/mailmessage/Message.java:        @return a string with all the message headers separated by the EOL marker
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String getHeaderString(String eol, boolean encode) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getHeaderString", eol, encode);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a string of the message headers
java/org/qore/lang/mailmessage/Message.java:    /** @param eol the End-Of-Line marker for the string
java/org/qore/lang/mailmessage/Message.java:        @return a string with all the message headers separated by the EOL marker
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String getHeaderString(String eol) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getHeaderString", eol);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a string of the message headers
java/org/qore/lang/mailmessage/Message.java:    /** @return a string with all the message headers separated by the EOL marker
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String getHeaderString() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("getHeaderString");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a multi-line string representing the Message
java/org/qore/lang/mailmessage/Message.java:    /** @param include_body if @ref True "True" the Message body will be included in the string output
java/org/qore/lang/mailmessage/Message.java:     */
java/org/qore/lang/mailmessage/Message.java:    public String toString(boolean include_body) throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("toString", include_body);
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:    //! returns a single line string summarizing the Message
java/org/qore/lang/mailmessage/Message.java:    /** @return a single line string summarizing the Message
java/org/qore/lang/mailmessage/Message.java:    */
java/org/qore/lang/mailmessage/Message.java:    public String toLine() throws Throwable {
java/org/qore/lang/mailmessage/Message.java:        return (String)obj.callMethod("toLine");
java/org/qore/lang/mailmessage/Message.java:    }
java/org/qore/lang/mailmessage/Message.java:}
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:/** Java wrapper for the %Qore AbstractDataProviderRecordIterator class
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java: *
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java: */
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:// java imports
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:import java.util.HashMap;
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:import org.qore.lang.AbstractIterator;
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:import org.qore.jni.QoreObject;
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java://! Java wrapper for the @ref DataProvider::AbstractDataProviderRecordIterator class in Qore
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    <tt>import qoremod.DataProvider.AbstractDataProviderRecordIterator;</tt>
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:*/
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:public class AbstractDataProviderRecordIterator extends AbstractIterator {
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    // static initialization
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    static {
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c DataProvider
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        // module
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        try {
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:            QoreJavaApi.initQore();
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:            QoreJavaApi.callFunction("load_module", "DataProvider");
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        } catch (Throwable e) {
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        }
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    public AbstractDataProviderRecordIterator(QoreObject obj) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        super(obj);
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    //! returns a single record if the iterator is valid
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    /** @throw INVALID-ITERATOR the iterator is not pointing at a valid element
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    public HashMap<String, Object> getValue() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:        return (HashMap<String, Object>)obj.callMethod("getValue");
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderRecordIterator.java:}
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:/** Java wrapper for the %Qore AbstractDataProviderType class
java/org/qore/lang/dataprovider/AbstractDataProviderType.java: *
java/org/qore/lang/dataprovider/AbstractDataProviderType.java: */
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:// java imports
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:import java.util.HashMap;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:import java.util.Map;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:import org.qore.jni.QoreObject;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:import org.qore.lang.reflection.Type;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java://! Java wrapper for the @ref DataProvider::AbstractDataProviderType class in Qore
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    <tt>import qoremod.DataProvider.AbstractDataProviderType;</tt>
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:*/
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:public class AbstractDataProviderType extends QoreObjectWrapper {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    // static initialization
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    static {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c DataProvider
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        // module
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        try {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            QoreJavaApi.initQore();
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            QoreJavaApi.callFunction("load_module", "DataProvider");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        } catch (Throwable e) {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public AbstractDataProviderType(QoreObject obj) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        super(obj);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns supported options
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, HashMap<String, Object>> getSupportedOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getSupportedOptions");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns a description of the type as an input type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    /** @return a description of the type as an input type; only the following keys are returned
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        - \c name
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        - \c types_returned
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, Object> getInputInfo() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, Object>)obj.callMethod("getInputInfo");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns a description of the type as a hash
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, Object> getInfo() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, Object>)obj.callMethod("getInfo");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! Returns information on fields supported
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, HashMap<String, Object>> getFieldInfo() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getFieldInfo");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns True if this type can be assigned from values of the argument type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public boolean isAssignableFrom(AbstractDataProviderType t) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (boolean)obj.callMethod("isAssignableFrom", t);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns True if this type can be assigned from values of the argument type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public boolean isAssignableFrom(Type t) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (boolean)obj.callMethod("isAssignableFrom", t);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns True if this type is a list
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public boolean isList() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (boolean)obj.callMethod("isList");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns True if the type must have a value
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public boolean isMandatory() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (boolean)obj.callMethod("isMandatory");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the given field, if present, or @ref nothing if not
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public AbstractDataField getField(String field_name) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataField((QoreObject)obj.callMethod("getField", field_name));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns True if the type is not a wildcard type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public boolean hasType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (boolean)obj.callMethod("hasType");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the base type name for the type; must be a standard Qore base type name
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public String getBaseTypeName() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (String)obj.callMethod("getBaseTypeName");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the base type code for the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public int getBaseTypeCode() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return ((Long)obj.callMethod("getBaseTypeCode")).intValue();
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns a hash of native base type code keys where no translations are performed; keys are type codes, not names
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, Boolean> getDirectTypeHash() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, Boolean>)obj.callMethod("getDirectTypeHash");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns True if the type also accepts @ref nothing
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public boolean isOrNothingType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (boolean)obj.callMethod("isOrNothingType");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! get the given field type if it exists, otherwise return @ref nothing
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public AbstractDataProviderType getFieldType(String field_name) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataProviderType((QoreObject)obj.callMethod("getFieldType", field_name));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the value of the given option
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public Object getOptionValue(String opt) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return obj.callMethod("getOptionValue", opt);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns options set on the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, Object> getOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, Object>)obj.callMethod("getOptions");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! sets the given option on the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    /** @param opt the option to set
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        @param value the value to set
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        @throw TYPE-OPTION-ERROR invalid option or invalid option type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public void setOption(String opt, Object value) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        obj.callMethod("setOption", opt, value);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! sets options on the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    /** @param options the options to set; unsupported options are ignored
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        @throw TYPE-OPTION-ERROR invalid option type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public void setOptions(Map<String, Object> options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        obj.callMethod("setOptions", options);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns a "soft" type equivalent to the current type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    /** The base class method returns the same type; this method must be overridden in child classes to return a
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        usable "soft" type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        @return a "soft" type equivalent to the current type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public AbstractDataProviderType getSoftType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataProviderType((QoreObject)obj.callMethod("getSoftType"));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the type name
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public String getName() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (String)obj.callMethod("getName");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the base type for the type, if any
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public Type getValueType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        QoreObject rv = (QoreObject)obj.callMethod("getValueType");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        if (rv != null) {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            return new Type(rv);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return null;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the subtype (for lists or hashes) if there is only one
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public AbstractDataProviderType getElementType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        QoreObject rv = (QoreObject)obj.callMethod("getElementType");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        if (rv != null) {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            return new AbstractDataProviderType(rv);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return null;
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the fields of the data structure; if any
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, AbstractDataField> getFields() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, AbstractDataField>)obj.callMethod("getFields");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns a hash of types accepted by this type; keys are type names
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, Boolean> getAcceptTypeHash() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, Boolean>)obj.callMethod("getAcceptTypeHash");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns a hash of types returned by this type; keys are type names
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public HashMap<String, Boolean> getReturnTypeHash() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return (HashMap<String, Boolean>)obj.callMethod("getReturnTypeHash");
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns the value if the value can be assigned to the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    /** @param value the value to assign to the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        @return the value to be assigned; can be converted by the type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public Object acceptsValue(Object value) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return obj.callMethod("acceptsValue", value);
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns an appropriate object for the given type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public static AbstractDataProviderType get(Type type, Map<String, Object> options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataProviderType((QoreObject)QoreJavaApi.callStaticMethodSave("AbstractDataProviderType",
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            "get", type, options));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns an appropriate object for the given type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public static AbstractDataProviderType get(Type type) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataProviderType((QoreObject)QoreJavaApi.callStaticMethodSave("AbstractDataProviderType",
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            "get", type));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns an appropriate object for the given type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public static AbstractDataProviderType get(String typename, Map<String, Object> options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataProviderType((QoreObject)QoreJavaApi.callStaticMethodSave("AbstractDataProviderType",
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            "get", typename, options));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    //! returns an appropriate object for the given type
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    public static AbstractDataProviderType get(String typename) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:        return new AbstractDataProviderType((QoreObject)QoreJavaApi.callStaticMethodSave("AbstractDataProviderType",
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:            "get", typename));
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderType.java:}
java/org/qore/lang/dataprovider/AbstractDataField.java:/** Java wrapper for the %Qore AbstractDataField class
java/org/qore/lang/dataprovider/AbstractDataField.java: *
java/org/qore/lang/dataprovider/AbstractDataField.java: */
java/org/qore/lang/dataprovider/AbstractDataField.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataField.java:// java imports
java/org/qore/lang/dataprovider/AbstractDataField.java:import java.util.HashMap;
java/org/qore/lang/dataprovider/AbstractDataField.java:import java.util.Map;
java/org/qore/lang/dataprovider/AbstractDataField.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataField.java:import org.qore.jni.QoreObject;
java/org/qore/lang/dataprovider/AbstractDataField.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/dataprovider/AbstractDataField.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/dataprovider/AbstractDataField.java:import org.qore.lang.reflection.Type;
java/org/qore/lang/dataprovider/AbstractDataField.java://! Java wrapper for the @ref DataProvider::AbstractDataField class in Qore
java/org/qore/lang/dataprovider/AbstractDataField.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/dataprovider/AbstractDataField.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataField.java:    <tt>import qoremod.DataProvider.AbstractDataField;</tt>
java/org/qore/lang/dataprovider/AbstractDataField.java:*/
java/org/qore/lang/dataprovider/AbstractDataField.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataField.java:public class AbstractDataField extends QoreObjectWrapper {
java/org/qore/lang/dataprovider/AbstractDataField.java:    // static initialization
java/org/qore/lang/dataprovider/AbstractDataField.java:    static {
java/org/qore/lang/dataprovider/AbstractDataField.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c DataProvider
java/org/qore/lang/dataprovider/AbstractDataField.java:        // module
java/org/qore/lang/dataprovider/AbstractDataField.java:        try {
java/org/qore/lang/dataprovider/AbstractDataField.java:            QoreJavaApi.initQore();
java/org/qore/lang/dataprovider/AbstractDataField.java:            QoreJavaApi.callFunction("load_module", "DataProvider");
java/org/qore/lang/dataprovider/AbstractDataField.java:        } catch (Throwable e) {
java/org/qore/lang/dataprovider/AbstractDataField.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/dataprovider/AbstractDataField.java:        }
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/dataprovider/AbstractDataField.java:    public AbstractDataField(QoreObject obj) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        super(obj);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns True if this field's type can be assigned from values of the argument type
java/org/qore/lang/dataprovider/AbstractDataField.java:    public boolean isAssignableFrom(AbstractDataProviderType t) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (boolean)obj.callMethod("isAssignableFrom", t);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns True if this field's type can be assigned from values of the argument type
java/org/qore/lang/dataprovider/AbstractDataField.java:    public boolean isAssignableFrom(Type t) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (boolean)obj.callMethod("isAssignableFrom", t);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns True if this field's type is a list
java/org/qore/lang/dataprovider/AbstractDataField.java:    public boolean isList() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (boolean)obj.callMethod("isList");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns True if the field's type must have a value
java/org/qore/lang/dataprovider/AbstractDataField.java:    public boolean isMandatory() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (boolean)obj.callMethod("isMandatory");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns the value of the given option on the field's type
java/org/qore/lang/dataprovider/AbstractDataField.java:    public Object getOptionValue(String opt) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return obj.callMethod("getOptionValue", opt);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns options set on the field's type
java/org/qore/lang/dataprovider/AbstractDataField.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataField.java:    public HashMap<String, Object> getOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (HashMap<String, Object>)obj.callMethod("getOptions");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns supported options on the field's type
java/org/qore/lang/dataprovider/AbstractDataField.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataField.java:    public HashMap<String, HashMap<String, Object>> getSupportedOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getSupportedOptions");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! sets the given option on the field's type
java/org/qore/lang/dataprovider/AbstractDataField.java:    /** @param opt the option to set
java/org/qore/lang/dataprovider/AbstractDataField.java:        @param value the value to set
java/org/qore/lang/dataprovider/AbstractDataField.java:        @throw TYPE-OPTION-ERROR invalid option or invalid option type
java/org/qore/lang/dataprovider/AbstractDataField.java:    */
java/org/qore/lang/dataprovider/AbstractDataField.java:    public void setOption(String opt, Object value) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        obj.callMethod("setOption", opt, value);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! sets the given options on the field's type
java/org/qore/lang/dataprovider/AbstractDataField.java:    /** @param options a hash of options, if any options match supported options for this type, they are set
java/org/qore/lang/dataprovider/AbstractDataField.java:        @throw TYPE-OPTION-ERROR option value has an invalid type
java/org/qore/lang/dataprovider/AbstractDataField.java:    */
java/org/qore/lang/dataprovider/AbstractDataField.java:    public void setOptions(Map<String, Object> options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        obj.callMethod("setOptions", options);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns the type name
java/org/qore/lang/dataprovider/AbstractDataField.java:    public String getTypeName() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (String)obj.callMethod("getTypeName");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! sets the default value for the field
java/org/qore/lang/dataprovider/AbstractDataField.java:    public void setDefaultValue(Object default_value) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        obj.callMethod("setDefaultValue", default_value);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! get default value, if any
java/org/qore/lang/dataprovider/AbstractDataField.java:    public Object getDefaultValue() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return obj.callMethod("getDefaultValue");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns True if the field's type is not a wildcard type
java/org/qore/lang/dataprovider/AbstractDataField.java:    public boolean hasType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (boolean)obj.callMethod("hasType");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns the value if the value can be assigned to the type
java/org/qore/lang/dataprovider/AbstractDataField.java:    /** @param value the value to assign to the type
java/org/qore/lang/dataprovider/AbstractDataField.java:        @return the value to be assigned; can be converted by the type
java/org/qore/lang/dataprovider/AbstractDataField.java:    */
java/org/qore/lang/dataprovider/AbstractDataField.java:    public Object acceptsValue(Object value) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return obj.callMethod("acceptsValue", value);
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns information about the field as an input field
java/org/qore/lang/dataprovider/AbstractDataField.java:    /** the \c default_value key is not returned, and the \c type key returns only input information
java/org/qore/lang/dataprovider/AbstractDataField.java:    */
java/org/qore/lang/dataprovider/AbstractDataField.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataField.java:    public HashMap<String, Object> getInputInfo() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (HashMap<String, Object>)obj.callMethod("getInputInfo");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns information about the field
java/org/qore/lang/dataprovider/AbstractDataField.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataField.java:    public HashMap<String, Object> getInfo() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (HashMap<String, Object>)obj.callMethod("getInfo");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns a field with a "soft" type equivalent to the current type
java/org/qore/lang/dataprovider/AbstractDataField.java:    /** The base class method returns the same field; this method must be overridden in child classes to return a
java/org/qore/lang/dataprovider/AbstractDataField.java:        field with a usable "soft" type
java/org/qore/lang/dataprovider/AbstractDataField.java:        @return a field with a "soft" type equivalent to the current type
java/org/qore/lang/dataprovider/AbstractDataField.java:    */
java/org/qore/lang/dataprovider/AbstractDataField.java:    public AbstractDataField getSoftType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return new AbstractDataField((QoreObject)obj.callMethodSave("getSoftType"));
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns the name of the field
java/org/qore/lang/dataprovider/AbstractDataField.java:    public String getName() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (String)obj.callMethod("getName");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns the description, if any
java/org/qore/lang/dataprovider/AbstractDataField.java:    public String getDescription() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return (String)obj.callMethod("getDescription");
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:    //! returns the type of the field
java/org/qore/lang/dataprovider/AbstractDataField.java:    public AbstractDataProviderType getType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataField.java:        return new AbstractDataProviderType((QoreObject)obj.callMethodSave("getType"));
java/org/qore/lang/dataprovider/AbstractDataField.java:    }
java/org/qore/lang/dataprovider/AbstractDataField.java:}
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:/** Java wrapper for the %Qore AbstractDataProviderBulkRecordInterface class
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java: *
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java: */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:// java imports
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:import java.util.HashMap;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:import org.qore.lang.AbstractIterator;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:import org.qore.jni.QoreObject;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java://! Java wrapper for the @ref DataProvider::AbstractDataProviderBulkRecordInterface in Qore
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    <tt>import qoremod.DataProvider.AbstractDataProviderBulkRecordInterface;</tt>
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:*/
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:public class AbstractDataProviderBulkRecordInterface extends AbstractIterator {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    // static initialization
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    static {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c DataProvider
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        // module
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        try {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:            QoreJavaApi.initQore();
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:            QoreJavaApi.callFunction("load_module", "DataProvider");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        } catch (Throwable e) {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    public AbstractDataProviderBulkRecordInterface(QoreObject obj) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        super(obj);
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    //! Returns the block size
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    public int getBlockSize() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        return ((Long)obj.callMethod("getBlockSize")).intValue();
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    //! Returns True if there are more records to return
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    public boolean valid() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        return (boolean)obj.callMethod("valid");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    //! Returns a hash of lists according to the block size or @ref nothing if no more data is available
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    /** @throw INVALID-ITERATOR the iterator is not pointing at a valid element
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        @note This call moves the internal record pointer forward, therefore multiple calls of this methods will
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        return different results as long as data is available
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    public HashMap<String, Object[]> getValue() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:        return (HashMap<String, Object[]>)obj.callMethod("getValue");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkRecordInterface.java:}
java/org/qore/lang/dataprovider/AbstractDataProvider.java:/** Java wrapper for the %Qore AbstractDataProvider class
java/org/qore/lang/dataprovider/AbstractDataProvider.java: *
java/org/qore/lang/dataprovider/AbstractDataProvider.java: */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataProvider.java:// java imports
java/org/qore/lang/dataprovider/AbstractDataProvider.java:import java.util.HashMap;
java/org/qore/lang/dataprovider/AbstractDataProvider.java:import java.util.Map;
java/org/qore/lang/dataprovider/AbstractDataProvider.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataProvider.java:import org.qore.jni.QoreObject;
java/org/qore/lang/dataprovider/AbstractDataProvider.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/dataprovider/AbstractDataProvider.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/dataprovider/AbstractDataProvider.java://! Java wrapper for the @ref DataProvider::AbstractDataProvider class in Qore
java/org/qore/lang/dataprovider/AbstractDataProvider.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    <tt>import qoremod.DataProvider.AbstractDataProvider;</tt>
java/org/qore/lang/dataprovider/AbstractDataProvider.java:*/
java/org/qore/lang/dataprovider/AbstractDataProvider.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataProvider.java:public class AbstractDataProvider extends QoreObjectWrapper {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    // static initialization
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    static {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c DataProvider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        // module
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        try {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            QoreJavaApi.initQore();
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            QoreJavaApi.callFunction("load_module", "DataProvider");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        } catch (Throwable e) {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProvider(QoreObject obj) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        super(obj);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns static provider information as data; no objects are returned
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @note the \c name and \c children attributes are not returned as they are dynamic attributes
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> getInfoAsData() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("getInfoAsData");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns data provider info
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> getInfo() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("getInfo");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Creates the given record in the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param rec a hash representing a single input record
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param create_options the create options; will be processed by validateCreateOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record creation
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> createRecord(Map<String, Object> rec, Map<String, Object> create_options)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("createRecord", rec, create_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Creates the given record in the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param rec a hash representing a single input record
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record creation
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> createRecord(Map<String, Object> rec) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("createRecord", rec);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Upserts the given record in the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param rec a hash representing a single input record
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param upsert_options the upsert options; will be processed by validateUpsertOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return see @ref db_provider_upsert_results for possible values
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support upsert operations
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public String upsertRecord(Map<String, Object> rec, Map<String, Object> upsert_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (String)obj.callMethod("upsertRecord", rec, upsert_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Upserts the given record in the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param rec a hash representing a single input record
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return see @ref db_provider_upsert_results for possible values
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support upsert operations
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public String upsertRecord(Map<String, Object> rec) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (String)obj.callMethod("upsertRecord", rec);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the first record matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> searchFirstRecord(Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("searchFirstRecord", where_cond, search_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the first record matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> searchFirstRecord(Map<String, Object> where_cond) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("searchFirstRecord", where_cond);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns a single record matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw MULTIPLE-RECORDS-ERROR multiple records found
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> searchSingleRecord(Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("searchSingleRecord", where_cond, search_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns a single record matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw MULTIPLE-RECORDS-ERROR multiple records found
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, Object> searchSingleRecord(Map<String, Object> where_cond) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, Object>)obj.callMethod("searchSingleRecord", where_cond);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator iterating all records
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderRecordIterator getRecordIterator(Map<String, Object> search_options)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderRecordIterator((QoreObject)obj.callMethodSave("getRecordIterator",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator iterating all records
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderRecordIterator getRecordIterator()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderRecordIterator((QoreObject)obj.callMethodSave("getRecordIterator"));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator iterating all records with the bulk read API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param block_size the number of records in a read block; must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return a bulk record interface object that will return the records in bulk format
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-BLOCK-SIZE the block size must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkRecordInterface getBulkRecordInterface(int block_size,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkRecordInterface((QoreObject)obj.callMethodSave("getBulkRecordInterface",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            block_size, search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator iterating all records with the bulk read API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return a bulk record interface object that will return the records in bulk format
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-BLOCK-SIZE the block size must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkRecordInterface getBulkRecordInterface(Map<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkRecordInterface((QoreObject)obj.callMethodSave("getBulkRecordInterface",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            1000, search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator iterating all records with the bulk read API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a bulk record interface object that will return the records in bulk format
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-BLOCK-SIZE the block size must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkRecordInterface getBulkRecordInterface() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkRecordInterface((QoreObject)obj.callMethodSave("getBulkRecordInterface",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            1000));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param block_size the number of records in a read block; must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return a bulk record interface object that will return the records in bulk format
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-BLOCK-SIZE the block size must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkRecordInterface searchRecordsBulk(int block_size,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> where_cond, Map<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkRecordInterface((QoreObject)obj.callMethodSave("searchRecordsBulk",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            block_size, where_cond, search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param block_size the number of records in a read block; must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return a bulk record interface object that will return the records in bulk format
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-BLOCK-SIZE the block size must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkRecordInterface searchRecordsBulk(Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkRecordInterface((QoreObject)obj.callMethodSave("searchRecordsBulk",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            1000, where_cond, search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param block_size the number of records in a read block; must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return a bulk record interface object that will return the records in bulk format
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-BLOCK-SIZE the block size must be a positive number
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkRecordInterface searchRecordsBulk(Map<String, Object> where_cond) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkRecordInterface((QoreObject)obj.callMethodSave("searchRecordsBulk",
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            1000, where_cond));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderRecordIterator searchRecords(Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderRecordIterator((QoreObject)obj.callMethodSave("searchRecords", where_cond, search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderRecordIterator searchRecords(Map<String, Object> where_cond) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderRecordIterator((QoreObject)obj.callMethodSave("searchRecords", where_cond));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options according to an API request
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param req the request to serialize and make according to the request type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options after processing by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        This will execute the request and perform a default search on any record(s) returned
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading records or the request / response API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderRecordIterator requestSearchRecords(Object req, Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderRecordIterator((QoreObject)obj.callMethodSave("requestSearchRecords", req,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            where_cond, search_options));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns an iterator for zero or more records matching the search options according to an API request
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param req the request to serialize and make according to the request type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        This will execute the request and perform a default search on any record(s) returned
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support reading records or the request / response API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderRecordIterator requestSearchRecords(Object req, Map<String, Object> where_cond)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderRecordIterator((QoreObject)obj.callMethodSave("requestSearchRecords", req,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:            where_cond));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Updates a single record matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param set the hash of field data to set; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @returns @ref True if the record was updated, @ref False if not (no record found)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record updating
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean updateSingleRecord(Map<String, Object> set, Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("updateSingleRecord", set, where_cond, search_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Updates a single record matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param set the hash of field data to set; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond the search criteria; will be processed by processFieldValues()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @returns @ref True if the record was updated, @ref False if not (no record found)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record updating
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean updateSingleRecord(Map<String, Object> set, Map<String, Object> where_cond) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("updateSingleRecord", set, where_cond);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Updates zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param set the hash of field data to set
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond a hash for identifying the record(s) to be updated
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the number of records updated
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record updating
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public int updateRecords(Map<String, Object> set, Map<String, Object> where_cond,
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        HashMap<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return ((Long)obj.callMethod("updateRecords", set, where_cond, search_options)).intValue();
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Updates zero or more records matching the search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param set the hash of field data to set
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond a hash for identifying the record(s) to be updated
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the number of records updated
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record updating
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public int updateRecords(Map<String, Object> set, Map<String, Object> where_cond) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return ((Long)obj.callMethod("updateRecords", set, where_cond)).intValue();
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Deletes zero or more records
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond a hash for identifying the record(s) to be deleted
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options the search options; will be processed by validateSearchOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the number of records deleted
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record deletion
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public int deleteRecords(Map<String, Object> where_cond, Map<String, Object> search_options)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return ((Long)obj.callMethod("deleteRecords", where_cond, search_options)).intValue();
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Deletes zero or more records
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param where_cond a hash for identifying the record(s) to be deleted
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the number of records deleted
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support record deletion
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public int deleteRecords(Map<String, Object> where_cond)
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return ((Long)obj.callMethod("deleteRecords", where_cond)).intValue();
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Makes a request and returns the response
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param req the request to serialize and make according to the request type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param request_options the request options; will be processed by validateRequestOptions()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the response to the request
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support the request API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public Object doRequest(Object req, Map<String, Object> request_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return obj.callMethod("doRequest", req, request_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Makes a request and returns the response
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param req the request to serialize and make according to the request type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the response to the request
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support the request API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public Object doRequest(Object req) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return obj.callMethod("doRequest", req);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the description of a successful request message, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return the request type for this provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support the request API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderType getRequestType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderType((QoreObject)obj.callMethodSave("getRequestType"));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the description of a response message, if this object represents a response message
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return the response type for this response message
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support the request API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderType getResponseType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderType((QoreObject)obj.callMethodSave("getResponseType"));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns a hash of error responses, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a hash of error responses, if any, keyed by response code or String
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support the request API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, AbstractDataProviderType> getErrorResponseTypes() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, AbstractDataProviderType>)obj.callMethod("getErrorResponseTypes");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the type for the given error code
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param error_code the error code for the response; must be a known error code, or an \c UNKNOWN-ERROR-RESPONSE
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        exception is thrown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the type for the given error code
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support the request API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw UNKNOWN-ERROR-RESPONSE the error response given is not known
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderType getErrorResponseType(String error_code) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderType((QoreObject)obj.callMethodSave("getErrorResponseType", error_code));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns a list of child data provider names, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a list of child data provider names, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public String[] getChildProviderNames() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (String[])obj.callMethod("getChildProviderNames");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the given child provider or @ref nothing if the given child is unknown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return the given child provider or @ref nothing if the given child is unknown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-CHILD-PROVIDER unknown child provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @see getChildProviderEx()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProvider getChildProvider(String name) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (AbstractDataProvider)obj.callMethod("getChildProvider", name);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the given child provider or throws an exception if the given child is unknown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return the given child provider or throws an exception if the given child is unknown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-CHILD-PROVIDER unknown child provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @see getChildProvider()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProvider getChildProviderEx(String name) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (AbstractDataProvider)obj.callMethod("getChildProviderEx", name);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the given child provider from a \c "/" separated path String; throws an exception if any element in the path is unknown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @param path a String giving a path to the target provider where child elements are separated by \c "/" characters
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the target child provider; throws an exception if any element in the path is unknown
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-CHILD-PROVIDER unknown child provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProvider getChildProviderPath(String path) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (AbstractDataProvider)obj.callMethod("getChildProviderPath", path);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports transaction management
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return @ref True if the data provider supports transaction management, in which case commit() or rollback()
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        must be called to flush or discard data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean requiresTransactionManagement() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("requiresTransactionManagement");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Commits data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** Has no effect if the data provider does not support transaction management
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public void commit() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        obj.callMethod("commit");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Rolls back data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** Has no effect if the data provider does not support transaction management
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public void rollback() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        obj.callMethod("rollback");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns a bulk insert operation object for the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a bulk insert operation object for the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support create operations
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkOperation getBulkInserter() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkOperation((QoreObject)obj.callMethodSave("getBulkInserter"));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns a bulk upsert operation object for the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a bulk upsert operation object for the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throw INVALID-OPERATION the data provider does not support upsert operations
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public AbstractDataProviderBulkOperation getBulkUpserter() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return new AbstractDataProviderBulkOperation((QoreObject)obj.callMethodSave("getBulkUpserter"));
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns custom data mapper runtime keys
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return custom data mapper runtime keys
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        This base method returns @ref nothing; reimplment in child classes to return a value
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, HashMap<String, Object>> getMapperRuntimeKeys() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getMapperRuntimeKeys");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the description of the record type, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options to be included and processed by validateSearchOptions() if
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        \a recordRequiresSearchOptions() is true for this provider, otherwise any value provided in this argument
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        is ignored
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the description of the record type, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throws Throwable any exception thrown by the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:     */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, AbstractDataField> getRecordType(Map<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, AbstractDataField>)obj.callMethod("getRecordType", search_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the description of the record type, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, AbstractDataField> getRecordType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, AbstractDataField>)obj.callMethod("getRecordType");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the description of the record type with soft types, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @param search_options to be included and processed by validateSearchOptions() if
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        \a recordRequiresSearchOptions() is true for this provider, otherwise any value provided in this argument
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        is ignored
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @return the description of the record type with soft types, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        @throws Throwable any exception thrown by the data provider
java/org/qore/lang/dataprovider/AbstractDataProvider.java:     */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, AbstractDataField> getSoftRecordType(Map<String, Object> search_options) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, AbstractDataField>)obj.callMethod("getSoftRecordType", search_options);
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns the description of the record type with soft types, if any
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, AbstractDataField> getSoftRecordType() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, AbstractDataField>)obj.callMethod("getSoftRecordType");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns options that can be used for searching
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a hash of options that can be used for searching; keys are search option names, values describe the
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        search option; if @ref nothing is returned, then the provider does not support any search options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, HashMap<String, Object>> getSearchOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getSearchOptions");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns options that can be used for creating records
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a hash of options that can be used for creating records; keys are option names, values describe the
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        option; if @ref nothing is returned, then the provider does not support any creation options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, HashMap<String, Object>> getCreateOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getCreateOptions");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns options that can be used for upserting records
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a hash of options that can be used for upserting records; keys are option names, values describe the
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        option; if @ref nothing is returned, then the provider does not support any upsert options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, HashMap<String, Object>> getUpsertOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getUpsertOptions");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns options that can be used for requests
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return a hash of options that can be used for requests; keys are request option names, values describe the
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        request option; if @ref nothing is returned, then the provider does not support any request options
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public HashMap<String, HashMap<String, Object>> getRequestOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("getRequestOptions");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsRead() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsRead");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports native bulk reading
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsBulkRead() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsBulkRead");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports the record creation API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsCreate() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsCreate");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports the record update API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsUpdate() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsUpdate");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports the record upsert API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsUpsert() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsUpsert");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports the record deletion API
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsDelete() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsDelete");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns @ref True if the data provider supports the record search API natively
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsNativeSearch() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsNativeSearch");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns True if the data provider supports bulk creation output
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsBulkCreate() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsBulkCreate");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns True if the data provider supports bulk upserts
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsBulkUpsert() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsBulkUpsert");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns True if the data provider supports requests
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean supportsRequest() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("supportsRequest");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns true if the data provider requires search options to retrieve the record type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /**
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean recordRequiresSearchOptions() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("recordRequiresSearchOptions");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    //! Returns true if the data provider has a record type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    /** @return true if the data provider has a record type
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    */
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    public boolean hasRecord() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProvider.java:        return (boolean)obj.callMethod("hasRecord");
java/org/qore/lang/dataprovider/AbstractDataProvider.java:    }
java/org/qore/lang/dataprovider/AbstractDataProvider.java:}
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:/** Java wrapper for the %Qore AbstractDataProviderBulkOperation class
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java: *
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java: */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:// java imports
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:import java.util.Map;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:import org.qore.lang.AbstractIterator;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:import org.qore.jni.QoreObject;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java://! Java wrapper for the @ref DataProvider::AbstractDataProviderBulkOperation in Qore
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    <tt>import qoremod.DataProvider.AbstractDataProviderBulkOperation;</tt>
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:*/
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:public class AbstractDataProviderBulkOperation extends AbstractIterator {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    // static initialization
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    static {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c DataProvider
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        // module
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        try {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:            QoreJavaApi.initQore();
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:            QoreJavaApi.callFunction("load_module", "DataProvider");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        } catch (Throwable e) {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public AbstractDataProviderBulkOperation(QoreObject obj) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        super(obj);
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! Commits data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    /** Has no effect if the data provider does not support transaction management
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public void commit() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        obj.callMethod("commit");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! Rolls back data written to the data provider
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    /** Has no effect if the data provider does not support transaction management
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public void rollback() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        obj.callMethod("rollback");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! Queues data in the buffer
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public void queueData(Map<String, Object> record) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        obj.callMethod("queueData", record);
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! Queues data in the buffer
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public void queueData(Map<String, Object> records[]) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        obj.callMethod("queueData", (Object)records);
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! Flushes any remaining data to the data provider
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    /** This method should always be called before committing the transaction (if the data provider supports
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        transaction management) or destroying the object
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public void flush() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        obj.callMethod("flush");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    //! Discards any buffered data
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    /** This method should be called before rolling back the transaction (if the data provider supports transaction
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        management) or destroying the object if an error occurs
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    */
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    public void discard() throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:        obj.callMethod("discard");
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:    }
java/org/qore/lang/dataprovider/AbstractDataProviderBulkOperation.java:}
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:/** Java wrapper for the %Qore AbstractDataProcessor class
java/org/qore/lang/dataprovider/AbstractDataProcessor.java: *
java/org/qore/lang/dataprovider/AbstractDataProcessor.java: */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:package org.qore.lang.dataprovider;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:// jni module imports
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:import org.qore.lang.dataprovider.AbstractDataProviderType;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:import org.qore.jni.QoreException;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:import org.qore.jni.QoreClosure;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java://! Java AbstractDataProcessor class
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:/**
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    @since jni 1.2
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    <tt>import qoremod.DataProvider.AbstractDataProcessor;</tt>
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:*/
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:@Deprecated
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:public abstract class AbstractDataProcessor {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Returns the expected type of data to be submitted, if available
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** @return the expected type of data to be submitted, if available
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @note Calls getExpectedTypeImpl() to provide the return value
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    public AbstractDataProviderType getExpectedType() {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        return getExpectedTypeImpl();
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    }
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Returns the type of data that will be returned, if available
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** @return the type of data that will be returned, if available
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @note Calls getReturnTypeImpl() to provide the return value
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    public AbstractDataProviderType getReturnType() {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        return getReturnTypeImpl();
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    }
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Returns true if the data processor supports bulk operation
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** @return true if the data processor supports bulk operation
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @note Calls @ref supportsBulkApiImpl() to return the answer
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    public boolean supportsBulkApi() {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        return supportsBulkApiImpl();
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    }
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Submits the data for processing
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** @par Example
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @code{.java}
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:void submitImpl(QoreClosure enqueue, Object _data) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    // .. process the data and submit the modified data for onward processing
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    enqueue.call(_data);
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:}
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        enqueue.call(new_rec);
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @endcode
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @param enqueue s closure taking a single arugment that enqueues the processed data for the next step in the
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        pipeline; if no data should be processed onwards, do not call enqueue; if only one record should be processed
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        onwards, then \a enqueue should be called only once; if multiple records are generated from the input data,
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        then call it once for each generated record; prototype: @code{.py} code enqueue = sub (auto qdata) {} @endcode
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @param _data the data to process
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @note
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        - Calls @ref submitImpl() on the data to do the actual processing
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        - Accept and return type information is not enforced in this method; it must be enforced in submitImpl()
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        - Pipeline data can be of any type
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    public void submit(QoreClosure enqueue, Object _data) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        submitImpl(enqueue, _data);
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    }
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Returns the expected type of data to be submitted, if available
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** This base class method returns @ref nothing; reimplement in subclasses to provide a type
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    protected AbstractDataProviderType getExpectedTypeImpl() {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        return null;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    }
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Returns the type of data that will be returned, if available
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** This base class method returns @ref nothing; reimplement in subclasses to provide a type
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    protected AbstractDataProviderType getReturnTypeImpl() {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        return null;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    }
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Submits the data for processing
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** @par Example
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @code{.java}
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:void submitImpl(QoreClosure enqueue, Object _data) throws Throwable {
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    // .. process the data and submit the modified data for onward processing
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    enqueue.call(_data);
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:}
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        enqueue.call(new_rec);
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @endcode
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @param enqueue s closure taking a single arugment that enqueues the processed data for the next step in the
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        pipeline; if no data should be processed onwards, do not call enqueue; if only one record should be processed
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        onwards, then \a enqueue should be called only once; if multiple records are generated from the input data,
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        then call it once for each generated record; prototype: @code{.py} code enqueue = sub (auto qdata) {} @endcode
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @param _data the data to process
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:        @note Pipeline data can be of any type
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    protected abstract void submitImpl(QoreClosure enqueue, Object _data) throws Throwable;
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    //! Returns true if the data processor supports bulk operation
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    /** @return true if the data processor supports bulk operation
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    */
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:    protected abstract boolean supportsBulkApiImpl();
java/org/qore/lang/dataprovider/AbstractDataProcessor.java:}
java/org/qore/lang/HashListIterator.java:/** Java wrapper for the %Qore HashListIterator class
java/org/qore/lang/HashListIterator.java: *
java/org/qore/lang/HashListIterator.java: */
java/org/qore/lang/HashListIterator.java:package org.qore.lang;
java/org/qore/lang/HashListIterator.java:// jni module imports
java/org/qore/lang/HashListIterator.java:import org.qore.jni.QoreObject;
java/org/qore/lang/HashListIterator.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/HashListIterator.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/HashListIterator.java:import org.qore.jni.Hash;
java/org/qore/lang/HashListIterator.java:// qore imports
java/org/qore/lang/HashListIterator.java:import org.qore.lang.AbstractIterator;
java/org/qore/lang/HashListIterator.java://! Java wrapper for the @ref Qore::ContextIterator class in Qore
java/org/qore/lang/HashListIterator.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/HashListIterator.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/HashListIterator.java:    <tt>import qore.Qore.HashListIterator;</tt>
java/org/qore/lang/HashListIterator.java:*/
java/org/qore/lang/HashListIterator.java:@Deprecated
java/org/qore/lang/HashListIterator.java:public class HashListIterator extends AbstractIterator {
java/org/qore/lang/HashListIterator.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/HashListIterator.java:    public HashListIterator(QoreObject obj) throws Throwable {
java/org/qore/lang/HashListIterator.java:        super(obj);
java/org/qore/lang/HashListIterator.java:    }
java/org/qore/lang/HashListIterator.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/HashListIterator.java:    public HashListIterator(Hash h) throws Throwable {
java/org/qore/lang/HashListIterator.java:        super(QoreJavaApi.newObjectSave("HashListIterator", h));
java/org/qore/lang/HashListIterator.java:    }
java/org/qore/lang/HashListIterator.java:    //! Returns the current hash corresponding to the iterator position
java/org/qore/lang/HashListIterator.java:    public Hash getHash() throws Throwable {
java/org/qore/lang/HashListIterator.java:        return (Hash)getValue();
java/org/qore/lang/HashListIterator.java:    }
java/org/qore/lang/HashListIterator.java:}
java/org/qore/lang/AbstractSQLStatement.java:/** Java wrapper for the %Qore AbstractSQLStatement class
java/org/qore/lang/AbstractSQLStatement.java: *
java/org/qore/lang/AbstractSQLStatement.java: */
java/org/qore/lang/AbstractSQLStatement.java:package org.qore.lang;
java/org/qore/lang/AbstractSQLStatement.java:// java imports
java/org/qore/lang/AbstractSQLStatement.java:import java.util.Map;
java/org/qore/lang/AbstractSQLStatement.java:import java.util.HashMap;
java/org/qore/lang/AbstractSQLStatement.java:// jni module imports
java/org/qore/lang/AbstractSQLStatement.java:import org.qore.jni.QoreObject;
java/org/qore/lang/AbstractSQLStatement.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/AbstractSQLStatement.java://! Java wrapper for the @ref Qore::SQL::AbstractSQLStatement class in %Qore
java/org/qore/lang/AbstractSQLStatement.java:/** @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    {
java/org/qore/lang/AbstractSQLStatement.java:        AbstractSQLStatement stmt = ds.getSQLStatement();
java/org/qore/lang/AbstractSQLStatement.java:        try {
java/org/qore/lang/AbstractSQLStatement.java:            stmt.prepare("select * from table");
java/org/qore/lang/AbstractSQLStatement.java:            stmt.exec();
java/org/qore/lang/AbstractSQLStatement.java:            stmt.define();
java/org/qore/lang/AbstractSQLStatement.java:            // note that the next() would implicitly execute exec() and define()
java/org/qore/lang/AbstractSQLStatement.java:            while (stmt.next()) {
java/org/qore/lang/AbstractSQLStatement.java:                Map<String, Object> row = stmt.fetchRow();
java/org/qore/lang/AbstractSQLStatement.java:                process(row);
java/org/qore/lang/AbstractSQLStatement.java:            }
java/org/qore/lang/AbstractSQLStatement.java:            // release transaction lock on exit
java/org/qore/lang/AbstractSQLStatement.java:            stmt.commit();
java/org/qore/lang/AbstractSQLStatement.java:        } catch (Throwable e) {
java/org/qore/lang/AbstractSQLStatement.java:            stmt.rollback();
java/org/qore/lang/AbstractSQLStatement.java:            throw e;
java/org/qore/lang/AbstractSQLStatement.java:        } finally {
java/org/qore/lang/AbstractSQLStatement.java:            stmt.release();
java/org/qore/lang/AbstractSQLStatement.java:        }
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/AbstractSQLStatement.java:    <tt>import qore.Qore.SQL.AbstractSQLStatement;</tt>
java/org/qore/lang/AbstractSQLStatement.java:*/
java/org/qore/lang/AbstractSQLStatement.java:@Deprecated
java/org/qore/lang/AbstractSQLStatement.java:public class AbstractSQLStatement extends QoreObjectWrapper {
java/org/qore/lang/AbstractSQLStatement.java:    //! creates the object
java/org/qore/lang/AbstractSQLStatement.java:    public AbstractSQLStatement(QoreObject ds) {
java/org/qore/lang/AbstractSQLStatement.java:        super(ds);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Saves an SQL statement that will be prepared and executed later, along with optional arguments
java/org/qore/lang/AbstractSQLStatement.java:    /** The statement is actually only prepared when used for the first time, this is so that SQLStatement objects created with DatasourcePool objects use the DatasourcePool more efficiently, as many drivers require the actual DB API prepare call to be made on the same connection as the connection the statement will be executed on as well.
java/org/qore/lang/AbstractSQLStatement.java:        @note This method parses the SQL string for placeholders and bind by value tokens (<tt>%%v</tt>); for a version of this method that does not parse the SQL string for placeholders and bind by value tokens, see prepareRaw().
java/org/qore/lang/AbstractSQLStatement.java:        @param sql The SQL string to prepare for execution on the DB server
java/org/qore/lang/AbstractSQLStatement.java:        @param args The arguments for any bind placeholders
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("select * from table where id = %v");
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void prepare(String sql, Object... args) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        Object[] new_args = new Object[args.length + 1];
java/org/qore/lang/AbstractSQLStatement.java:        new_args[0] = sql;
java/org/qore/lang/AbstractSQLStatement.java:        System.arraycopy(args, 0, new_args, 1, args.length);
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethodArgs("prepare", new_args);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Saves an SQL statement that will be prepared and executed later
java/org/qore/lang/AbstractSQLStatement.java:    /** The statement is actually only prepared when used for the first time, this is so that SQLStatement objects created with DatasourcePool objects use the DatasourcePool more efficiently, as many drivers require the actual DB API prepare call to be made on the same connection as the connection the statement will be executed on as well.
java/org/qore/lang/AbstractSQLStatement.java:        @note This method does not parse the SQL string for placeholders and bind by value tokens (<tt>%%v</tt>); for a version of this method that does parse the SQL string for placeholders and bind by value tokens, see prepare().
java/org/qore/lang/AbstractSQLStatement.java:        @param sql The SQL string to prepare for execution on the DB server
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepareRaw("select * from table");
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void prepareRaw(String sql) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("prepareRaw", sql);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Binds placeholder buffer specifications and values to buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method.
java/org/qore/lang/AbstractSQLStatement.java:        Any arguments previously bound will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        @note You can also bind directly when calling exec() or execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.
java/org/qore/lang/AbstractSQLStatement.java:        @param args Arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("insert into table (id, name) values (%v, %v)");
java/org/qore/lang/AbstractSQLStatement.java:    stmt.bind(h.get("id"), h.get("name"));
java/org/qore/lang/AbstractSQLStatement.java:    stmt.exec();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see bindArgs(), bindPlaceholders(), bindPlaceholdersArgs(), bindValues(), and bindValuesArgs()
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void bind(Object... args) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethodArgs("bind", args);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Binds placeholder buffer specifications and values given as a list in the single argument to the method to buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method.
java/org/qore/lang/AbstractSQLStatement.java:        Any arguments previously bound will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        @note You can also bind directly when calling exec() or execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.
java/org/qore/lang/AbstractSQLStatement.java:        @param vargs Arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("insert into table (id, name) values (%v, %v)");
java/org/qore/lang/AbstractSQLStatement.java:    stmt.bindArgs(args);
java/org/qore/lang/AbstractSQLStatement.java:    stmt.exec();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see bind(), bindPlaceholders(), bindPlaceholdersArgs(), bindValues(), and bindValuesArgs()
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void bindArgs(Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("bindArgs", vargs);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Binds placeholder buffer specifications to buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method. Only placeholder buffer specifications will be processed; value buffer specifications will be skipped by this method.
java/org/qore/lang/AbstractSQLStatement.java:        Any buffer specifications previously defined will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        @note You can also bind buffer specifications directly when calling exec() or execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.\n\n
java/org/qore/lang/AbstractSQLStatement.java:        Not all DBI drivers require binding placeholders specification.
java/org/qore/lang/AbstractSQLStatement.java:        @param args Arguments to placeholder specifications (if required by the underlying DBI driver)
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("begin select sysdate into :sd from dual", "date"); end;
java/org/qore/lang/AbstractSQLStatement.java:    stmt.bindPlaceholders(Type::Date);
java/org/qore/lang/AbstractSQLStatement.java:    ZonedDateTime d = stmt.getOutput().get("sd");
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see bind(), bindArgs(), bindPlaceholdersArgs(), bindValues(), and bindValuesArgs()
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void bindPlaceholders(Object... args) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethodArgs("bindPlaceholders", args);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Binds placeholder buffer specifications given as a list in the single argument to the method to buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method. Only placeholder buffer specifications will be processed; value buffer specifications will be skipped by this method.
java/org/qore/lang/AbstractSQLStatement.java:        Any buffer specifications previously defined will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        @note You can also bind buffer specifications directly when calling exec() or execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.\n\n
java/org/qore/lang/AbstractSQLStatement.java:        Not all DBI drivers require binding placeholders specification.
java/org/qore/lang/AbstractSQLStatement.java:        @param vargs Arguments to placeholder specifications (if required by the underlying DBI driver)
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("begin select sysdate into :sd from dual", "date"); end;
java/org/qore/lang/AbstractSQLStatement.java:    stmt.bindPlaceholdersArgs(args);
java/org/qore/lang/AbstractSQLStatement.java:    ZonedDateTime d = stmt.getOutput().get("sd");
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see bind(), bindArgs(), bindPlaceholders(), bindValues(), and bindValuesArgs()
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void bindPlaceholdersArgs(Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("bindPlaceholdersArgs", vargs);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Binds values to value buffer specifications to buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method.
java/org/qore/lang/AbstractSQLStatement.java:        Any values previously bound will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        @note You can also bind directly when calling exec() or execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.
java/org/qore/lang/AbstractSQLStatement.java:        @param args Arguments to bind by value arguments
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("insert into table (id, name) values (%v, %v)");
java/org/qore/lang/AbstractSQLStatement.java:    stmt.exec(h.get("id"), h.get("name"));
java/org/qore/lang/AbstractSQLStatement.java:    stmt.exec();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see bind(), bindArgs(), bindPlaceholders(), bindPlaceholdersArgs(), and bindValuesArgs().
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void bindValues(Object... args) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethodArgs("bindValues", args);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Binds values to value buffer specifications given as a list in the single argument to the method to value buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method.
java/org/qore/lang/AbstractSQLStatement.java:        Any values previously bound will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        @note You can also bind directly when calling exec() or execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.
java/org/qore/lang/AbstractSQLStatement.java:        @param vargs Arguments to bind by value arguments
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("insert into table (id, name) values (%v, %v)");
java/org/qore/lang/AbstractSQLStatement.java:    stmt.bindValuesArgs(args);
java/org/qore/lang/AbstractSQLStatement.java:    stmt.exec();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void bindValuesArgs(Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("bindValuesArgs", vargs);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Executes the bound statement with any bound buffers, also optionally allows binding placeholder buffer specifications and values to buffers defined in prepare() before executing the statement
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Optional arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method.
java/org/qore/lang/AbstractSQLStatement.java:        If bind arguments are provided, any arguments previously bound will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        After calling this method to execute the statement, to retrieve information about the call or output values bound in the call, call affectedRows(), getOutput(), or getOutputRows() as needed.
java/org/qore/lang/AbstractSQLStatement.java:        To retrieve rows from a select statement call either next() and fetchRow(), or fetchRows() or fetchColumns() as needed.
java/org/qore/lang/AbstractSQLStatement.java:        @param args Optional arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments can be given in the call to the method; if present, arguments are bound before the statement is executed
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("insert into table (id, name) values (%v, %v)");
java/org/qore/lang/AbstractSQLStatement.java:    stmt.exec(h.get("id"), h.get("name"));
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare(); the SQLStatement uses a DatasourcePool an the statement was prepared on another connection
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see execArgs()
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void exec(Object... args) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethodArgs("exec", args);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Executes the bound statement with any bound buffers, also optionally allows binding placeholder buffer specifications and values given as a list in the single argument to the method to buffers defined in prepare()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to constructor.
java/org/qore/lang/AbstractSQLStatement.java:        Optional arguments to buffer specifications must be given in the same order as declared in the string given to the prepare() method.
java/org/qore/lang/AbstractSQLStatement.java:        If bind arguments are provided, any arguments previously bound will be released when this call is made.
java/org/qore/lang/AbstractSQLStatement.java:        After calling this method to execute the statement, to retrieve information about the call or output values bound in the call, call affectedRows(), getOutput(), or getOutputRows() as needed.
java/org/qore/lang/AbstractSQLStatement.java:        To retrieve rows from a select statement call either next() and fetchRow(), or fetchRows() or fetchColumns() as needed.
java/org/qore/lang/AbstractSQLStatement.java:        @param vargs Optional arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments can be given in the call to the method; if present, arguments are bound before the statement is executed
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.prepare("insert into table (id, name) values (%v, %v)");
java/org/qore/lang/AbstractSQLStatement.java:    stmt.execArgs(args);
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw(); the SQLStatement uses a DatasourcePool an the statement was prepared on another connection
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:        @see exec()
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void execArgs(Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("execArgs", vargs);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Returns the number of rows affected by the last call to exec()
java/org/qore/lang/AbstractSQLStatement.java:    /** @return the number of rows affected by the last call to exec()
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    int rc = stmt.affectedRows();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public int affectedRows() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return ((Long)obj.callMethod("affectedRows")).intValue();
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves output buffers as a hash; result sets will be returned as hashes of lists
java/org/qore/lang/AbstractSQLStatement.java:    /** @return Returns a Map<String, Object> of output buffers; result sets will be returned as hashes of lists. Each key in the Map<String, Object> is the same as the name given to the placeholder specification in the call to prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    Map<String, Object> h = stmt.getOutput();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when output values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> getOutput() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("getOutput");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves output buffers as a hash; result sets will be returned as lists of hashes
java/org/qore/lang/AbstractSQLStatement.java:    /** @return Retrieves output buffers as a hash; result sets will be returned as lists of hashes. Each key in the Map<String, Object> is the same as the name given to the placeholder specification in the call to prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    Map<String, Object> h = stmt.getOutputRows();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when output values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> getOutputRows() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("getOutputRows");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Performs an explicit define operation on the SQLStatement
java/org/qore/lang/AbstractSQLStatement.java:    /** It is not encessary to call this method manually; define operations are implicitly executed when needed when retrieving values from a select statement
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    {
java/org/qore/lang/AbstractSQLStatement.java:        AbstractSQLStatement stmt = ds.getSQLStatement();
java/org/qore/lang/AbstractSQLStatement.java:        try {
java/org/qore/lang/AbstractSQLStatement.java:            stmt.prepare("select * from table");
java/org/qore/lang/AbstractSQLStatement.java:            stmt.exec();
java/org/qore/lang/AbstractSQLStatement.java:            stmt.define();
java/org/qore/lang/AbstractSQLStatement.java:            // note that the next() would implicitly execute exec() and define()
java/org/qore/lang/AbstractSQLStatement.java:            while (stmt.next()) {
java/org/qore/lang/AbstractSQLStatement.java:                Map<String, Object> row = stmt.fetchRow();
java/org/qore/lang/AbstractSQLStatement.java:                process(row);
java/org/qore/lang/AbstractSQLStatement.java:            }
java/org/qore/lang/AbstractSQLStatement.java:            // release transaction lock on exit
java/org/qore/lang/AbstractSQLStatement.java:            stmt.commit();
java/org/qore/lang/AbstractSQLStatement.java:        } catch (Throwable e) {
java/org/qore/lang/AbstractSQLStatement.java:            stmt.rollback();
java/org/qore/lang/AbstractSQLStatement.java:            throw e;
java/org/qore/lang/AbstractSQLStatement.java:        } finally {
java/org/qore/lang/AbstractSQLStatement.java:            stmt.release();
java/org/qore/lang/AbstractSQLStatement.java:        }
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void define() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("define");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Closes the statement if it is open, however this method does not release the connection or transaction lock
java/org/qore/lang/AbstractSQLStatement.java:    /**
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.close();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void close() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("close");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Commits the transaction, releases the connection or the transaction lock according to the object used in the constructor and closes the statement
java/org/qore/lang/AbstractSQLStatement.java:    /**
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.commit();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @note For possible exceptions; see DBI driver docs for the commit() method
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void commit() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("commit");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Closes the SQLStatement, performs a transaction rollback, and releases the connection or the transaction lock according to the object used in the constructor, and closes the statement
java/org/qore/lang/AbstractSQLStatement.java:    /**
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.rollback();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @note For possible exceptions; see DBI driver docs for the rollback() method
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void rollback() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("rollback");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Manually starts a transaction and allocates a connection or grabs the transaction lock according to the object used in the constructor
java/org/qore/lang/AbstractSQLStatement.java:    /**
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    stmt.beginTransaction();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public void beginTransaction() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        obj.callMethod("beginTransaction");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Increments the row pointer when retrieving rows from a select statement; returns true if there is a row to retrieve, false if not
java/org/qore/lang/AbstractSQLStatement.java:    /** If this method returns true, then call fetchRow() afterwards to retrieve the row
java/org/qore/lang/AbstractSQLStatement.java:        @return true if there is a row to retrieve, false if not (no more rows to be retrieved)
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    while (stmt.next()) {
java/org/qore/lang/AbstractSQLStatement.java:        Map<String, Object> h = stmt.fetchRow();
java/org/qore/lang/AbstractSQLStatement.java:        process(h);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public boolean next() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (boolean)obj.callMethod("next");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! returns true if the object is currently pointing at a valid element, false if not (use when iterating with next())
java/org/qore/lang/AbstractSQLStatement.java:    /** @return true if the object is currently pointing at a valid element, false if not
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    if (i.valid()) {
java/org/qore/lang/AbstractSQLStatement.java:        process(i.getValue());
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public boolean valid() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (boolean)obj.callMethod("valid");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves the current row as a Map<String, Object> where the keys are the column names and the values are the column values
java/org/qore/lang/AbstractSQLStatement.java:    /** Use with next() to iterate through the results of a select statement one row at a time
java/org/qore/lang/AbstractSQLStatement.java:        @return the current row as a Map<String, Object> where the keys are the column names and the values are the column values
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    while (stmt.next()) {
java/org/qore/lang/AbstractSQLStatement.java:        Map<String, Object> h = stmt.fetchRow();
java/org/qore/lang/AbstractSQLStatement.java:        process(h);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> fetchRow() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("fetchRow");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves the current row as a Map<String, Object> where the keys are the column names and the values are the column values
java/org/qore/lang/AbstractSQLStatement.java:    /** Use with next() to iterate through the results of a select statement one row at a time
java/org/qore/lang/AbstractSQLStatement.java:        @return the current row as a Map<String, Object> where the keys are the column names and the values are the column values
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    while (stmt.next()) {
java/org/qore/lang/AbstractSQLStatement.java:        Map<String, Object> h = stmt.getValue();
java/org/qore/lang/AbstractSQLStatement.java:        process(h);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note
java/org/qore/lang/AbstractSQLStatement.java:        - Equivalent to fetchRow()
java/org/qore/lang/AbstractSQLStatement.java:        - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> getValue() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("getValue");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves a block of rows as a list of hashes with the maximum number of rows determined by the argument passed; automatically advances the row pointer; with this call it is not necessary to call next()
java/org/qore/lang/AbstractSQLStatement.java:    /** If the argument passed is omitted or less than or equal to zero, then all available rows from the current row position are retrieved, also if fewer rows are available than requested then only the rows available are retrieved.
java/org/qore/lang/AbstractSQLStatement.java:        If no more rows are available then an empty list is returned.
java/org/qore/lang/AbstractSQLStatement.java:        @param rows The maximum number of rows to retrieve, if this argument is omitted, negative, or equal to zero, then all available rows from the current row position are retrieved
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    Map<String, Object>[] l = stmt.fetchRows(-1);
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note
java/org/qore/lang/AbstractSQLStatement.java:        - There is no need to call next() when calling this method; the method automatically iterates through the given number of rows
java/org/qore/lang/AbstractSQLStatement.java:        - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object>[] fetchRows(int rows) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>[])obj.callMethod("fetchRows", rows);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves all available rows as a list of hashes; automatically advances the row pointer; with this call it is not necessary to call next()
java/org/qore/lang/AbstractSQLStatement.java:    /** @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    Map<String, Object>[] l = stmt.fetchRows();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        If no more rows are available then an empty list is returned.
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note
java/org/qore/lang/AbstractSQLStatement.java:        - There is no need to call next() when calling this method; the method automatically iterates through the given number of rows
java/org/qore/lang/AbstractSQLStatement.java:        - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object>[] fetchRows() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>[])obj.callMethod("fetchRows");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves a block of rows as a Map<String, Object> of lists with the maximum number of rows determined by the argument passed; automatically advances the row pointer; with this call it is not necessary to call next().
java/org/qore/lang/AbstractSQLStatement.java:    /** If the argument passed is omitted or less than or equal to zero, then all available rows from the current row position are retrieved, also if fewer rows are available than requested then only the rows available are retrieved.
java/org/qore/lang/AbstractSQLStatement.java:        @param rows The maximum number of rows to retrieve, if this argument is omitted, negative, or equal to zero, then all available rows from the current row position are retrieved
java/org/qore/lang/AbstractSQLStatement.java:        @return a Map<String, Object> (giving column names) of lists (giving row values for each column) of data returned; each list will have at most \a rows elements (unless \a rows is negative, in which case all available rows are returned).  If the total number of rows available is less than \a rows (if \a rows is positive), then the last data returned by this method may return short lists.  If no more rows are available, then an empty Map<String, Object> is returned
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    Map<String, Object> h = stmt.fetchColumns(-1);
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note
java/org/qore/lang/AbstractSQLStatement.java:        - There is no need to call next() when calling this method; the method automatically iterates through the given number of rows
java/org/qore/lang/AbstractSQLStatement.java:        - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> fetchColumns(int rows) throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("fetchColumns", rows);
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Retrieves all available rows as a Map<String, Object> of lists; automatically advances the row pointer; with this call it is not necessary to call next().
java/org/qore/lang/AbstractSQLStatement.java:    /** @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    Map<String, Object> h = stmt.fetchColumns();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:        @return a Map<String, Object> (giving column names) of lists (giving row values for each column) of data returned; each list will have at most \a rows elements (unless \a rows is negative, in which case all available rows are returned).  If the total number of rows available is less than \a rows (if \a rows is positive), then the last data returned by this method may return short lists.  If no more rows are available, then an empty Map<String, Object> is returned
java/org/qore/lang/AbstractSQLStatement.java:        @throw SQLSTATEMENT-ERROR No %SQL has been set with prepare() or prepareRaw()
java/org/qore/lang/AbstractSQLStatement.java:        @note
java/org/qore/lang/AbstractSQLStatement.java:        - There is no need to call next() when calling this method; the method automatically iterates through the given number of rows
java/org/qore/lang/AbstractSQLStatement.java:        - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> fetchColumns() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("fetchColumns");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Describes columns in the statement result.
java/org/qore/lang/AbstractSQLStatement.java:    /**
java/org/qore/lang/AbstractSQLStatement.java:        @return a Map<String, Object> with (<i>column_name</i>: <i>description_hash</i>) format, where each <i>description_hash</i> has the following keys:
java/org/qore/lang/AbstractSQLStatement.java:        - \c "name": (string) the column name
java/org/qore/lang/AbstractSQLStatement.java:        - \c "type": (integer) the column type code (%Qore type code)
java/org/qore/lang/AbstractSQLStatement.java:        - \c "maxsize": (integer) the maximum size of the column
java/org/qore/lang/AbstractSQLStatement.java:        - \c "native_type": (string) the database-specific name of the type
java/org/qore/lang/AbstractSQLStatement.java:        - \c "internal_id": (integer) the database-specific type code of the type
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractSQLStatement.java:    public HashMap<String, Object> describe() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (HashMap<String, Object>)obj.callMethod("describe");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Returns the current SQL string set with the call to prepare() or prepareRaw() or void if no SQL has been set
java/org/qore/lang/AbstractSQLStatement.java:    /** @return Returns the current SQL string set with the call to prepare() or prepareRaw() or void if no SQL has been set
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    String sql = stmt.getSQL();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public String getSQL() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (String)obj.callMethod("getSQL");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Returns true if the object is currently active and has a connection or transaction lock allocated to it, or false if not
java/org/qore/lang/AbstractSQLStatement.java:    /** @return true if the object is currently active and has a connection or transaction lock allocated to it, or false if not
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    if (stmt.active()) {
java/org/qore/lang/AbstractSQLStatement.java:        stmt.commit();
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public boolean active() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (boolean)obj.callMethod("active");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:    //! Returns true if the current thread is in a transaction (i.e. holds the transaction lock), false if not
java/org/qore/lang/AbstractSQLStatement.java:    /** @return true if the current thread is in a transaction (i.e. holds the transaction lock), false if not
java/org/qore/lang/AbstractSQLStatement.java:        @par Example:
java/org/qore/lang/AbstractSQLStatement.java:        @code{.java}
java/org/qore/lang/AbstractSQLStatement.java:    boolean b = stmt.currentThreadInTransaction();
java/org/qore/lang/AbstractSQLStatement.java:        @endcode
java/org/qore/lang/AbstractSQLStatement.java:    */
java/org/qore/lang/AbstractSQLStatement.java:    public boolean currentThreadInTransaction() throws Throwable {
java/org/qore/lang/AbstractSQLStatement.java:        return (boolean)obj.callMethod("currentThreadInTransaction");
java/org/qore/lang/AbstractSQLStatement.java:    }
java/org/qore/lang/AbstractSQLStatement.java:}
java/org/qore/lang/AbstractDatasource.java:/** Java wrapper for the %Qore AbstractDatasource class
java/org/qore/lang/AbstractDatasource.java: *
java/org/qore/lang/AbstractDatasource.java: */
java/org/qore/lang/AbstractDatasource.java:package org.qore.lang;
java/org/qore/lang/AbstractDatasource.java:// java imports
java/org/qore/lang/AbstractDatasource.java:import java.util.HashMap;
java/org/qore/lang/AbstractDatasource.java:import java.util.Map;
java/org/qore/lang/AbstractDatasource.java:// jni module imports
java/org/qore/lang/AbstractDatasource.java:import org.qore.jni.QoreObject;
java/org/qore/lang/AbstractDatasource.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/AbstractDatasource.java:import org.qore.lang.AbstractSQLStatement;
java/org/qore/lang/AbstractDatasource.java://! Java wrapper for the @ref Qore::SQL::AbstractDatasource class in %Qore
java/org/qore/lang/AbstractDatasource.java:/** @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/AbstractDatasource.java: *  <tt>import qore.Qore.SQL.AbstractDatasource;</tt>
java/org/qore/lang/AbstractDatasource.java: */
java/org/qore/lang/AbstractDatasource.java:@Deprecated
java/org/qore/lang/AbstractDatasource.java:public class AbstractDatasource extends QoreObjectWrapper {
java/org/qore/lang/AbstractDatasource.java:    //! creates the object
java/org/qore/lang/AbstractDatasource.java:    public AbstractDatasource(QoreObject ds) {
java/org/qore/lang/AbstractDatasource.java:        super(ds);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Commits the current transaction and releases any thread resources associated with the transaction
java/org/qore/lang/AbstractDatasource.java:    /**
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    datasource.commit();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public void commit() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        obj.callMethod("commit");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Rolls the current transaction back and releases any thread resources associated with the transaction
java/org/qore/lang/AbstractDatasource.java:    /**
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    datasource.rollback();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public void rollback() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        obj.callMethod("rollback");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL command on the server and returns either the integer row count (for example, for updates, inserts, and deletes) or the data retrieved (for example, if a stored procedure is executed that returns values)
java/org/qore/lang/AbstractDatasource.java:    /** @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @return The return value depends on the DBI driver; normally, for commands with placeholders, a hash is returned holding the values acquired from executing the %SQL statement. For all other commands, normally an integer row count is returned. However, some DBI drivers also allow select statements to be executed through this interface, which would also return a hash (column names) of lists (values for each column).
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    int rows = datasource.exec("insert into table (varchar_col, timestamp_col, blob_col, numeric_col) values (%v, %v, %v, %d)", string, ZonedDateTime.now(), binary, 100);
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object exec(String sql) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("exec", sql);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL command on the server and returns either the integer row count (for example, for updates, inserts, and deletes) or the data retrieved (for example, if a stored procedure is executed that returns values)
java/org/qore/lang/AbstractDatasource.java:    /** @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param args Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return The return value depends on the DBI driver; normally, for commands with placeholders, a hash is returned holding the values acquired from executing the %SQL statement. For all other commands, normally an integer row count is returned. However, some DBI drivers also allow select statements to be executed through this interface, which would also return a hash (column names) of lists (values for each column).
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    int rows = datasource.exec("insert into table (varchar_col, timestamp_col, blob_col, numeric_col) values (%v, %v, %v, %d)", string, ZonedDateTime.now(), binary, 100);
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object exec(String sql, Object... args) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vexec", sql, args);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL command on the server and returns either the integer row count (for example, for updates, inserts, and deletes) or the data retrieved (for example, if a stored procedure is executed that returns values), taking a list for all bind arguments
java/org/qore/lang/AbstractDatasource.java:    /** Same as exec() except takes an explicit list for bind arguments
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param vargs Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return The return value depends on the DBI driver; normally, for commands with placeholders, a hash is returned holding the values acquired from executing the %SQL statement. For all other commands, normally an integer row count is returned. However, some DBI drivers also allow select statements to be executed through this interface, which would also return a hash (column names) of lists (values for each column).
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    int rows = datasource.vexec("insert into example_table value (%v, %v, %v)", arg_list);
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object vexec(String sql, Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vexec", sql, vargs);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL command on the server and returns either the row count (for example, for updates and inserts) or the data retrieved (for example, if a stored procedure is executed that returns values)
java/org/qore/lang/AbstractDatasource.java:    /** This method does not do any variable binding, so it's useful for example for DDL statements etc
java/org/qore/lang/AbstractDatasource.java:        @par Warning:
java/org/qore/lang/AbstractDatasource.java:        Using this method to execute pure dynamic %SQL many times with different %SQL strings (as opposed to using the same string and binding by value instead of dynamic %SQL) can affect application performance by prohibiting the efficient usage of the DB server's statement cache. See DB server documentation for variable binding and the %SQL statement cache for more information.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server; this string will not be subjected to any transformations for variable binding
java/org/qore/lang/AbstractDatasource.java:        @return The return value depends on the DBI driver; normally, for commands with placeholders, a hash is returned holding the values acquired from executing the %SQL statement. For all other commands, normally an integer row count is returned. However, some DBI drivers also allow select statements to be executed through this interface, which would also return a hash (column names) of lists (values for each column).
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    datasource.execRaw("create table my_tab (id number, some_text varchar2(30))");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object execRaw(String sql) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("execRaw", sql);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL select statement on the server and (normally) returns the result as a hash (column names) of lists (column values per row)
java/org/qore/lang/AbstractDatasource.java:    /** The usual return format of this method is suitable for use with @ref context "context statements", for easy iteration and processing of query results.
java/org/qore/lang/AbstractDatasource.java:        Alternatively, the HashListIterator class can be used to iterate the return value of this method.
java/org/qore/lang/AbstractDatasource.java:        Additionally, this format is a more efficient format than that returned by the selectRows() method, because the column names are not repeated for each row returned. Therefore, for retrieving anything greater than small amounts of data, it is recommended to use this method instead of selectRows().
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param ... Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return This method returns a hash (the keys are the column names) of lists (the column data per row) when executed with an %SQL select statement, however some DBI drivers allow any %SQL to be executed through this method, in which case other data types can be returned (such as an integer for a row count or a hash for output parameters when executing a stored procedure).  If no rows are found, a hash of column names assigned to empty lists is returned.
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> query = (Map<String, Object>)datasource.select("select * from table where varchar_column = 'col'");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @note This method returns all the data available immediately; to process query data piecewise, use the SQLStatement class
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object select(String sql) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("select", sql);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL select statement on the server and (normally) returns the result as a hash (column names) of lists (column values per row)
java/org/qore/lang/AbstractDatasource.java:    /** The usual return format of this method is suitable for use with @ref context "context statements", for easy iteration and processing of query results.
java/org/qore/lang/AbstractDatasource.java:        Alternatively, the HashListIterator class can be used to iterate the return value of this method.
java/org/qore/lang/AbstractDatasource.java:        Additionally, this format is a more efficient format than that returned by the selectRows() method, because the column names are not repeated for each row returned. Therefore, for retrieving anything greater than small amounts of data, it is recommended to use this method instead of selectRows().
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param args Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return This method returns a hash (the keys are the column names) of lists (the column data per row) when executed with an %SQL select statement, however some DBI drivers allow any %SQL to be executed through this method, in which case other data types can be returned (such as an integer for a row count or a hash for output parameters when executing a stored procedure).  If no rows are found, a hash of column names assigned to empty lists is returned.
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    // bind a string and a date/time value by value in a query
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> query = (Map<String, Object>)datasource.select("select * from table where varchar_column = %v and timestamp_column > %v", string, ZonedDateTime::parse("2007-10-11T15:31:26.289+02:00");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @note This method returns all the data available immediately; to process query data piecewise, use the SQLStatement class
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object select(String sql, Object... args) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vselect", sql, args);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL select statement on the server and returns the first row as a hash (the column values)
java/org/qore/lang/AbstractDatasource.java:    /** If more than one row is returned, then it is treated as an error and a \c DBI-SELECT-ROW-ERROR is returned (however the DBI driver should raise its own exception here to avoid retrieving more than one row from the server). For a similar method taking a list for all bind arguments, see vselectRow().
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @return This method normally returns a hash (the keys are the column names) of row data or null if no row is found for the query when executed with an %SQL select statement, however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> h = (Map<String, Object>)datasource.selectRow("select * from example_table where id = 1");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @throw DBI-SELECT-ROW-ERROR more than 1 row retrieved from the server
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object selectRow(String sql) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("selectRow", sql);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL select statement on the server and returns the first row as a hash (the column values)
java/org/qore/lang/AbstractDatasource.java:    /** If more than one row is returned, then it is treated as an error and a \c DBI-SELECT-ROW-ERROR is returned (however the DBI driver should raise its own exception here to avoid retrieving more than one row from the server). For a similar method taking a list for all bind arguments, see vselectRow().
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param args Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return This method normally returns a hash (the keys are the column names) of row data or null if no row is found for the query when executed with an %SQL select statement, however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> h = (Map<String, Object>)datasource.selectRow("select * from example_table where id = 1");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @throw DBI-SELECT-ROW-ERROR more than 1 row retrieved from the server
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object selectRow(String sql, Object... args) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vselectRow", sql, args);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL select statement on the server and returns the result as a list (rows) of hashes (the column values)
java/org/qore/lang/AbstractDatasource.java:    /** The return format of this method is not as memory efficient as that returned by the select() method, therefore for larger amounts of data, it is recommended to use select().
java/org/qore/lang/AbstractDatasource.java:        The usual return value of this method can be iterated with the ListHashIterator class.
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @return Normally returns a list (rows) of hash (where the keys are the column names of each row) or null if no rows are found for the query, however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Objeect[] list = (Object[])datasource.selectRows("select * from example_table");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @see select()
java/org/qore/lang/AbstractDatasource.java:        @note This method returns all the data available immediately; to process query data piecewise, use the SQLStatement class
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object selectRows(String sql) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("selectRows", sql);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes an %SQL select statement on the server and returns the result as a list (rows) of hashes (the column values)
java/org/qore/lang/AbstractDatasource.java:    /** The return format of this method is not as memory efficient as that returned by the select() method, therefore for larger amounts of data, it is recommended to use select().
java/org/qore/lang/AbstractDatasource.java:        The usual return value of this method can be iterated with the ListHashIterator class.
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param args Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return Normally returns a list (rows) of hash (where the keys are the column names of each row) or null if no rows are found for the query, however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Objeect[] list = (Object[])datasource.selectRows("select * from example_table");
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @see select()
java/org/qore/lang/AbstractDatasource.java:        @note This method returns all the data available immediately; to process query data piecewise, use the SQLStatement class
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object selectRows(String sql, Object... args) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vselectRows", sql, args);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes a select statement on the server and returns the results in a hash (column names) of lists (column values per row), taking a list for all bind arguments
java/org/qore/lang/AbstractDatasource.java:    /** The usual return format of this method is suitable for use with @ref context "context statements", for easy iteration and processing of query results.
java/org/qore/lang/AbstractDatasource.java:        Alternatively, the HashListIterator class can be used to iterate the return value of this method.
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param vargs Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return Normally returns a hash (the keys are the column names) of list (each hash key's value is a list giving the row data), however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned.  If no rows are found, a hash of column names assigned to empty lists is returned.
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> query = (Map<String, Object>)datasource.vselect("select * from example_table where id = %v and name = %v", arg_list);
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @see select()
java/org/qore/lang/AbstractDatasource.java:        @note This method returns all the data available immediately; to process query data piecewise, use the SQLStatement class
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object vselect(String sql, Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vselect", sql, vargs);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes a select statement on the server and returns the first row as a hash (column names and values), taking a list for all bind arguments
java/org/qore/lang/AbstractDatasource.java:    /** This method is the same as the selectRow() method, except this method takes a single argument after the %SQL command giving the list of bind value parameters
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute on the server
java/org/qore/lang/AbstractDatasource.java:        @param vargs Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return This method normally returns a hash (the keys are the column names) of row data or null if no row is found for the query when executed with an %SQL select statement, however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> h = (Map<String, Object>)datasource.vselectRow("select * from example_table where id = %v and type = %v", arg_list);
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @see selectRow()
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object vselectRow(String sql, Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vselect", sql, vargs);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Executes a select statement on the server and returns the results in a list (rows) of hashes (column names and values), taking a list for all bind arguments
java/org/qore/lang/AbstractDatasource.java:    /** Same as the selectRows() method, except this method takes a single argument after the %SQL command giving the list of bind value parameters.
java/org/qore/lang/AbstractDatasource.java:        The usual return value of this method can be iterated with the ListHashIterator class.
java/org/qore/lang/AbstractDatasource.java:        The return format of this method is not as memory efficient as that returned by the select() method, therefore for larger amounts of data, it is recommended to use select().
java/org/qore/lang/AbstractDatasource.java:        This method also accepts all bind parameters (<tt>%%d</tt>, <tt>%%v</tt>, etc) as documented in @ref sql_binding "Binding by Value and Placeholder"
java/org/qore/lang/AbstractDatasource.java:        To execute select statements that begin a transaction (such as \c "select for update"), execute beginTransaction() first to signal that a transaction is starting;
java/org/qore/lang/AbstractDatasource.java:        this is particularly important when the object is shared among more than one thread.
java/org/qore/lang/AbstractDatasource.java:        @param sql The %SQL command to execute
java/org/qore/lang/AbstractDatasource.java:        @param vargs Include any values to be bound (using <tt>%v</tt> in the command string) or placeholder specifications (using <tt>:</tt><em>key_name</em> in the command string) in order after the command string
java/org/qore/lang/AbstractDatasource.java:        @return Normally returns a list (rows) of hash (where the keys are the column names of each row) or null if no rows are found for the query, however some DBI drivers allow any %SQL statement to be executed through this method (not only select statements), in this case other data types can be returned
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Object[] list = (Object[])datasource.vselectRows("select * from example_table where id = %v and type = %v", arg_list);
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @see selectRows()
java/org/qore/lang/AbstractDatasource.java:        @note This method returns all the data available immediately; to process query data piecewise, use the SQLStatement class
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object vselectRows(String sql, Object[] vargs) throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("vselectRows", sql, vargs);
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Manually signals the start of transaction management on the AbstractDatasource
java/org/qore/lang/AbstractDatasource.java:    /** This method should be called when the AbstractDatasource object will be shared between more than 1 thread, and a transaction will be started with a select() method or the like.
java/org/qore/lang/AbstractDatasource.java:        This method does not make any communication with the server to start a transaction; it only allocates the transaction lock to the current thread in %Qore.
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    datasource.beginTransaction();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public void beginTransaction() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        obj.callMethod("beginTransaction");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the username parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:    /** @return the username parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String user = datasource.getUserName();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getUserName() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getUserName");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the password parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:    /** @return the password parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String pass = datasource.getPassword();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getPassword() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getPassword");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the database name parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:    /** @return the database name parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String db = datasource.getDBName();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getDBName() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getDBName");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Retrieves the database-specific charset set encoding for the object
java/org/qore/lang/AbstractDatasource.java:    /** @return the database-specific charset set encoding for the object
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String enc = datasource.getDBEncoding();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @see getOSEncoding();
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getDBEncoding() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getDBEncoding");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the %Qore character encoding name for the object as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:    /** @return the %Qore character encoding name for the object as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String enc = datasource.getOSEncoding();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getOSEncoding() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getOSEncoding");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the hostname parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:    /** @return the hostname parameter as a string or null if none is set
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String host = datasource.getHostName();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getHostName() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getHostName");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Gets the port number that will be used for the next connection to the server
java/org/qore/lang/AbstractDatasource.java:    /** Invalid port numbers will cause an exception to be thrown when the connection is opened
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Integer port = datasource.getPort();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Integer getPort() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (Integer)obj.callMethod("getPort");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the name of the driver used for the object
java/org/qore/lang/AbstractDatasource.java:    /** @return the name of the driver used for the object
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String driver = datasource.getDriverName();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getDriverName() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getDriverName");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns the driver-specific server version data for the current connection
java/org/qore/lang/AbstractDatasource.java:    /** @return the driver-specific server version data for the current connection
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Object ver = datasource.getServerVersion();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @note see the documentation for the DBI driver being used for additional possible exceptions
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object getServerVersion() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("getServerVersion");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Retrieves the driver-specific client library version information
java/org/qore/lang/AbstractDatasource.java:    /** @return the driver-specific client library version information
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Object ver = datasource.getClientVersion();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @note see the documentation for the DBI driver being used for possible exceptions
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public Object getClientVersion() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return obj.callMethod("getClientVersion");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns @ref True if a transaction is currently in progress
java/org/qore/lang/AbstractDatasource.java:    /** @return @ref True if a transaction is currently in progress
java/org/qore/lang/AbstractDatasource.java:        @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    boolean b = datasource.inTransaction();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public boolean inTransaction() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (boolean)obj.callMethod("inTransaction");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns a @ref datasource_hash "datasource hash" describing the configuration of the current object
java/org/qore/lang/AbstractDatasource.java:    /** @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    Map<String, Object> h = obj.getConfigHash();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @return a @ref datasource_hash "datasource hash" describing the configuration of the current object
java/org/qore/lang/AbstractDatasource.java:        @since %Qore 0.8.8
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/AbstractDatasource.java:    public HashMap<String, Object> getConfigHash() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (HashMap<String, Object>)obj.callMethod("getConfigHash");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns a string giving the configuration of the current object in a format that can be parsed by parse_datasource()
java/org/qore/lang/AbstractDatasource.java:    /** @par Example:
java/org/qore/lang/AbstractDatasource.java:        @code{.java}
java/org/qore/lang/AbstractDatasource.java:    String str = obj.getConfigString();
java/org/qore/lang/AbstractDatasource.java:        @endcode
java/org/qore/lang/AbstractDatasource.java:        @return a string giving the configuration of the current object in a format that can be parsed by parse_datasource()
java/org/qore/lang/AbstractDatasource.java:        @since %Qore 0.8.8
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public String getConfigString() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (String)obj.callMethod("getConfigString");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Should return @ref true if the current thread is in a transaction with this object, must be re-implemented in subclasses to provide the desired functionality
java/org/qore/lang/AbstractDatasource.java:    /** @note
java/org/qore/lang/AbstractDatasource.java:        - this is reimplemented as @ref Qore::SQL::Datasource::currentThreadInTransaction() "Datasource::currentThreadInTransaction()" and @ref Qore::SQL::DatasourcePool::currentThreadInTransaction() "DatasourcePool::currentThreadInTransaction()"
java/org/qore/lang/AbstractDatasource.java:        - this method was added as a non-abstract method in Qore 0.8.10 to avoid breaking existing subclasses of AbstractDatasource
java/org/qore/lang/AbstractDatasource.java:        @since Qore 0.8.10
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public boolean currentThreadInTransaction() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return (boolean)obj.callMethod("currentThreadInTransaction");
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:    //! Returns an @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object based on the current database connection object
java/org/qore/lang/AbstractDatasource.java:    /** @note
java/org/qore/lang/AbstractDatasource.java:        - this is reimplemented as @ref Qore::SQL::Datasource::getSQLStatement() "Datasource::getSQLStatement()" and @ref Qore::SQL::DatasourcePool::getSQLStatement() "DatasourcePool::getSQLStatement()"
java/org/qore/lang/AbstractDatasource.java:        - this method was added as a non-abstract method in Qore 0.9.0 to avoid breaking existing subclasses of AbstractDatasource
java/org/qore/lang/AbstractDatasource.java:        @since Qore 0.9.0
java/org/qore/lang/AbstractDatasource.java:    */
java/org/qore/lang/AbstractDatasource.java:    public AbstractSQLStatement getSQLStatement() throws Throwable {
java/org/qore/lang/AbstractDatasource.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getSQLStatement"));
java/org/qore/lang/AbstractDatasource.java:    }
java/org/qore/lang/AbstractDatasource.java:}
java/org/qore/lang/restclient/RestClient.java:/** Java wrapper for the %Qore RestClient class
java/org/qore/lang/restclient/RestClient.java: *
java/org/qore/lang/restclient/RestClient.java: */
java/org/qore/lang/restclient/RestClient.java:package org.qore.lang.restclient;
java/org/qore/lang/restclient/RestClient.java:// java imports
java/org/qore/lang/restclient/RestClient.java:import java.util.Map;
java/org/qore/lang/restclient/RestClient.java:import java.util.HashMap;
java/org/qore/lang/restclient/RestClient.java:// jni module imports
java/org/qore/lang/restclient/RestClient.java:import org.qore.jni.QoreObject;
java/org/qore/lang/restclient/RestClient.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/restclient/RestClient.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/restclient/RestClient.java:// Qore imports
java/org/qore/lang/restclient/RestClient.java:import org.qore.lang.HTTPClient;
java/org/qore/lang/restclient/RestClient.java://! Java wrapper for the @ref Qore::RestClient class in %Qore
java/org/qore/lang/restclient/RestClient.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/restclient/RestClient.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/restclient/RestClient.java:    <tt>import qoremod.RestClient.RestClient;</tt>
java/org/qore/lang/restclient/RestClient.java:*/
java/org/qore/lang/restclient/RestClient.java:@Deprecated
java/org/qore/lang/restclient/RestClient.java:public class RestClient extends HTTPClient {
java/org/qore/lang/restclient/RestClient.java:    // static initialization
java/org/qore/lang/restclient/RestClient.java:    static {
java/org/qore/lang/restclient/RestClient.java:        // initialize the Qore library if necessary
java/org/qore/lang/restclient/RestClient.java:        try {
java/org/qore/lang/restclient/RestClient.java:            QoreJavaApi.initQore();
java/org/qore/lang/restclient/RestClient.java:            QoreJavaApi.callFunction("load_module", "RestClient");
java/org/qore/lang/restclient/RestClient.java:        } catch (Throwable e) {
java/org/qore/lang/restclient/RestClient.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/restclient/RestClient.java:        }
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! creates the object
java/org/qore/lang/restclient/RestClient.java:    public RestClient(QoreObject ds) {
java/org/qore/lang/restclient/RestClient.java:        super(ds);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! calls the base class HTTPClient constructor and optionally connects to the REST server
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> opts = new HashMap<String, Object>() {
java/org/qore/lang/restclient/RestClient.java:    {
java/org/qore/lang/restclient/RestClient.java:        put("url", "http://localhost:8001/rest");
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:};
java/org/qore/lang/restclient/RestClient.java:RestClient rest = new RestClient(opts);
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param opts valid options are:
java/org/qore/lang/restclient/RestClient.java:        - \c additional_methods: Optional hash with more but not-HTTP-standardized methods to handle. It allows to create various HTTP extensions like e.g. WebDAV. The hash takes the method name as a key, and the value is a boolean true or false: indicating if the method can accept a message body as well. Example:
java/org/qore/lang/restclient/RestClient.java:            @code{.java}
java/org/qore/lang/restclient/RestClient.java:// add new HTTP methods for WebDAV. Both of them require body posting to the server
java/org/qore/lang/restclient/RestClient.java:{"additional_methods": {"PROPFIND": true, "MKCOL": true}};
java/org/qore/lang/restclient/RestClient.java:            @endcode
java/org/qore/lang/restclient/RestClient.java:        - \c connect_timeout: The timeout value in milliseconds for establishing a new socket connection (also can be a relative date-time value for clarity, ex: \c 20s)
java/org/qore/lang/restclient/RestClient.java:        - \c content_encoding: for possible values, see @ref EncodingSupport; this sets the send encoding (if the \c "send_encoding" option is not set) and the requested response encoding (note that the @ref RestClient::RestClient "RestClient" class will only compress outgoing message bodies over @ref RestClient::RestClient::CompressionThreshold "CompressionThreshold" bytes in size)
java/org/qore/lang/restclient/RestClient.java:        - \c data: a @ref DataSerializationOptions "data serialization option"; if not present defaults to \c "auto"
java/org/qore/lang/restclient/RestClient.java:        - \c default_path: The default path to use for new connections if a path is not otherwise specified in the connection URL
java/org/qore/lang/restclient/RestClient.java:        - \c default_port: The default port number to connect to if none is given in the URL
java/org/qore/lang/restclient/RestClient.java:        - \c error_passthru: if true then HTTP status codes indicating errors will not cause a
java/org/qore/lang/restclient/RestClient.java:          \c REST-RESPONSE-ERROR exception to be raised, rather such responses will be passed through to the caller
java/org/qore/lang/restclient/RestClient.java:          like any other response
java/org/qore/lang/restclient/RestClient.java:        - \c headers: an optional hash of headers to send with every request, these can also be overridden in
java/org/qore/lang/restclient/RestClient.java:          request method calls
java/org/qore/lang/restclient/RestClient.java:        - \c http_version: Either '1.0' or '1.1' for the claimed HTTP protocol version compliancy in outgoing message headers
java/org/qore/lang/restclient/RestClient.java:        - \c max_redirects: The maximum number of redirects before throwing an exception (the default is 5)
java/org/qore/lang/restclient/RestClient.java:        - \c proxy: The proxy URL for connecting through a proxy
java/org/qore/lang/restclient/RestClient.java:        - \c redirect_passthru: if true then redirect responses will be passed to the caller instead of
java/org/qore/lang/restclient/RestClient.java:          processed
java/org/qore/lang/restclient/RestClient.java:        - \c send_encoding: a @ref EncodingSupport "send data encoding option" or the value \c "auto" which means to use automatic encoding; if not present defaults to no content-encoding on sent message bodies (note that the @ref RestClient::RestClient "RestClient" class will only compress outgoing message bodies over @ref RestClient::RestClient::CompressionThreshold "CompressionThreshold" bytes in size)
java/org/qore/lang/restclient/RestClient.java:        - \c swagger: the path to a <a href="https://swagger.io/">Swagger 2.0</a> REST schema file for API validation; only used if \a validator not provided (see the @ref swaggerintro "Swagger" module)
java/org/qore/lang/restclient/RestClient.java:        - \c timeout: The timeout value in milliseconds (also can be a relative date-time value for clarity, ex: \c 30s)
java/org/qore/lang/restclient/RestClient.java:        - \c url: A string giving the URL to connect to; if not given then the target URL will be taken from any \c validator option, if given by calling @ref RestSchemaValidator::AbstractRestSchemaValidator::getTargetUrl() "AbstractRestSchemaValidator::getTargetUrl()"
java/org/qore/lang/restclient/RestClient.java:        - \c validator: an @ref RestSchemaValidator::AbstractRestSchemaValidator "AbstractRestSchemaValidator" object to validate request and response messages; overrides \a swagger
java/org/qore/lang/restclient/RestClient.java:        - \c no_charset: if true no charset will be added to the Content-Type header
java/org/qore/lang/restclient/RestClient.java:        @param do_not_connect if \c False (the default), then a connection will be immediately established to the remote server
java/org/qore/lang/restclient/RestClient.java:        @throw RESTCLIENT-ERROR invalid option passed to constructor, unsupported data serialization, etc
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public RestClient(Map<String, Object> opts, boolean do_not_connect) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        super(QoreJavaApi.newObjectSave("RestClient::RestClient", opts, do_not_connect));
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! calls the base class HTTPClient constructor and optionally connects to the REST server
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> opts = new HashMap<String, Object>() {
java/org/qore/lang/restclient/RestClient.java:    {
java/org/qore/lang/restclient/RestClient.java:        put("url", "http://localhost:8001/rest");
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:};
java/org/qore/lang/restclient/RestClient.java:RestClient rest = new RestClient(opts);
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param opts valid options are:
java/org/qore/lang/restclient/RestClient.java:        - \c additional_methods: Optional hash with more but not-HTTP-standardized methods to handle. It allows to create various HTTP extensions like e.g. WebDAV. The hash takes the method name as a key, and the value is a boolean true or false: indicating if the method can accept a message body as well. Example:
java/org/qore/lang/restclient/RestClient.java:            @code{.java}
java/org/qore/lang/restclient/RestClient.java:// add new HTTP methods for WebDAV. Both of them require body posting to the server
java/org/qore/lang/restclient/RestClient.java:{"additional_methods": {"PROPFIND": true, "MKCOL": true}};
java/org/qore/lang/restclient/RestClient.java:            @endcode
java/org/qore/lang/restclient/RestClient.java:        - \c connect_timeout: The timeout value in milliseconds for establishing a new socket connection (also can be a relative date-time value for clarity, ex: \c 20s)
java/org/qore/lang/restclient/RestClient.java:        - \c content_encoding: for possible values, see @ref EncodingSupport; this sets the send encoding (if the \c "send_encoding" option is not set) and the requested response encoding (note that the @ref RestClient::RestClient "RestClient" class will only compress outgoing message bodies over @ref RestClient::RestClient::CompressionThreshold "CompressionThreshold" bytes in size)
java/org/qore/lang/restclient/RestClient.java:        - \c data: a @ref DataSerializationOptions "data serialization option"; if not present defaults to \c "auto"
java/org/qore/lang/restclient/RestClient.java:        - \c default_path: The default path to use for new connections if a path is not otherwise specified in the connection URL
java/org/qore/lang/restclient/RestClient.java:        - \c default_port: The default port number to connect to if none is given in the URL
java/org/qore/lang/restclient/RestClient.java:        - \c error_passthru: if true then HTTP status codes indicating errors will not cause a
java/org/qore/lang/restclient/RestClient.java:          \c REST-RESPONSE-ERROR exception to be raised, rather such responses will be passed through to the caller
java/org/qore/lang/restclient/RestClient.java:          like any other response
java/org/qore/lang/restclient/RestClient.java:        - \c headers: an optional hash of headers to send with every request, these can also be overridden in
java/org/qore/lang/restclient/RestClient.java:          request method calls
java/org/qore/lang/restclient/RestClient.java:        - \c http_version: Either '1.0' or '1.1' for the claimed HTTP protocol version compliancy in outgoing message headers
java/org/qore/lang/restclient/RestClient.java:        - \c max_redirects: The maximum number of redirects before throwing an exception (the default is 5)
java/org/qore/lang/restclient/RestClient.java:        - \c proxy: The proxy URL for connecting through a proxy
java/org/qore/lang/restclient/RestClient.java:        - \c redirect_passthru: if true then redirect responses will be passed to the caller instead of
java/org/qore/lang/restclient/RestClient.java:          processed
java/org/qore/lang/restclient/RestClient.java:        - \c send_encoding: a @ref EncodingSupport "send data encoding option" or the value \c "auto" which means to use automatic encoding; if not present defaults to no content-encoding on sent message bodies (note that the @ref RestClient::RestClient "RestClient" class will only compress outgoing message bodies over @ref RestClient::RestClient::CompressionThreshold "CompressionThreshold" bytes in size)
java/org/qore/lang/restclient/RestClient.java:        - \c swagger: the path to a <a href="https://swagger.io/">Swagger 2.0</a> REST schema file for API validation; only used if \a validator not provided (see the @ref swaggerintro "Swagger" module)
java/org/qore/lang/restclient/RestClient.java:        - \c timeout: The timeout value in milliseconds (also can be a relative date-time value for clarity, ex: \c 30s)
java/org/qore/lang/restclient/RestClient.java:        - \c url: A string giving the URL to connect to; if not given then the target URL will be taken from any \c validator option, if given by calling @ref RestSchemaValidator::AbstractRestSchemaValidator::getTargetUrl() "AbstractRestSchemaValidator::getTargetUrl()"
java/org/qore/lang/restclient/RestClient.java:        - \c validator: an @ref RestSchemaValidator::AbstractRestSchemaValidator "AbstractRestSchemaValidator" object to validate request and response messages; overrides \a swagger
java/org/qore/lang/restclient/RestClient.java:        - \c no_charset: if true no charset will be added to the Content-Type header
java/org/qore/lang/restclient/RestClient.java:        @throw RESTCLIENT-ERROR invalid option passed to constructor, unsupported data serialization, etc
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public RestClient(Map<String, Object> opts) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        super(QoreJavaApi.newObjectSave("RestClient::RestClient", opts));
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! calls the base class HTTPClient constructor and optionally connects to the REST server
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:RestClient rest = new RestClient();
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public RestClient() throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        super(QoreJavaApi.newObjectSave("RestClient::RestClient"));
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! change the serialization option for the object; see @ref DataSerializationOptions for valid options
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:rest.setSerialization("yaml");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param data the serialization option for the object; see @ref DataSerializationOptions for valid options
java/org/qore/lang/restclient/RestClient.java:        @throw RESTCLIENT-ERROR invalid or unsupported serialization option
java/org/qore/lang/restclient/RestClient.java:        @see @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public void setSerialization(String data) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        obj.callMethod("setSerialization", data);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! change the data content encoding (compression) option for the object; see @ref EncodingSupport for valid options
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:rest.setSendEncoding("gzip");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        The default is to send requests unencoded/uncompressed.
java/org/qore/lang/restclient/RestClient.java:        @param enc the data content encoding (compression) option for the object; see @ref EncodingSupport for valid options; if the value \c "auto" is passed then \c "gzip" encoding is used
java/org/qore/lang/restclient/RestClient.java:        @throw RESTCLIENT-ERROR invalid or unsupported data content encoding / compression option
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref setContentEncoding()
java/org/qore/lang/restclient/RestClient.java:        - @ref getSendEncoding()
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public void setSendEncoding(String enc) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        obj.callMethod("setSendEncoding", enc);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sets the request and desired response encoding for the object; see @ref EncodingSupport for valid options
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:rest.setContentEncoding("gzip");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param enc the data content encoding (compression) option for requests and the desired response content encoding for the object; see @ref EncodingSupport for valid options; if the value \c "auto" is passed then \c "gzip" encoding is used for outgoing requests and requested for responses
java/org/qore/lang/restclient/RestClient.java:        @throw RESTCLIENT-ERROR invalid or unsupported data content encoding / compression option
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSendEncoding()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSendEncoding()
java/org/qore/lang/restclient/RestClient.java:        @since %RestClient 1.3
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public void setContentEncoding(String enc) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        obj.callMethod("setContentEncoding", enc);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! adds default headers to each request; these headers will be sent in all requests but can be overridden in requests as well
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:// disable gzip and bzip encoding in responses
java/org/qore/lang/restclient/RestClient.java:rest.addDefaultHeaders(("Accept-Encoding": "compress"));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param h a hash of headers to add to the default headers to send on each request
java/org/qore/lang/restclient/RestClient.java:        @note default headers can also be set in the constructor
java/org/qore/lang/restclient/RestClient.java:        @see @ref getDefaultHeaders()
java/org/qore/lang/restclient/RestClient.java:        @since %RestClient 1.3
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public void addDefaultHeaders(Map<String, Object> h) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        obj.callMethod("addDefaultHeaders", h);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! returns the hash of default headers to sent in all requests
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> h = rest.getDefaultHeaders();
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @return the hash of default headers to sent in all requests
java/org/qore/lang/restclient/RestClient.java:        @note default headers can be set in the constructor and in addDefaultHeaders()
java/org/qore/lang/restclient/RestClient.java:        @see @ref addDefaultHeaders()
java/org/qore/lang/restclient/RestClient.java:        @since %RestClient 1.3
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> getDefaultHeaders() throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("getDefaultHeaders");
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! returns the current data content encoding (compression) object or null if no encoding option is set; see @ref EncodingSupport for valid options
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:String ce = rest.getSendEncoding();
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @return the current data content encoding (compression) object or null if no encoding option is set; see @ref EncodingSupport for valid options
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref setContentEncoding()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSendEncoding()
java/org/qore/lang/restclient/RestClient.java:        @since %RestClient 1.3
java/org/qore/lang/restclient/RestClient.java:    */
java/org/qore/lang/restclient/RestClient.java:    public String getSendEncoding() throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (String)obj.callMethod("getSendEncoding");
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! returns the current data serialization format currently in effect for the object (see @ref DataSerializationOptions for possible values)
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:String ser = rest.getSerialization();
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @return the current data serialization format currently in effect for the object (see @ref DataSerializationOptions for possible values)
java/org/qore/lang/restclient/RestClient.java:        @see @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    public String getSerialization() throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (String)obj.callMethod("getSerialization");
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c GET request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.get("/orders/1?info=verbose");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref httpclient_get_with_body
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restGet(String path, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("get", path, null, null, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c GET request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.get("/orders/1?info=verbose");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"; note that sending a message body with an HTTP \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information; for maximum compatibility, use null for this argument when calling this method
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref httpclient_get_with_body
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restGet(String path, Object body, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("get", path, body, null, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c GET request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.get("/orders/1?info=verbose");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref httpclient_get_with_body
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restGet(String path) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("get", path);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c PUT request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.put("/orders/1", ("action": "cancel"));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restPut(String path, Object body, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("put", path, body, null, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c PUT request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.put("/orders/1", ("action": "cancel"));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restPut(String path, Object body) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("put", path, body);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c PATCH request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.patch("/orders/1", ("action": "cancel"));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restPatch(String path, Object body, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("patch", path, body, null, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c PATCH request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.patch("/orders/1", ("action": "cancel"));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restPatch(String path, Object body) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("patch", path, body);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c POST request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.post("/orders", ("product": "xyz123", "options": 500));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restPost(String path, Object body, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("post", path, body, null, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c POST request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.post("/orders", ("product": "xyz123", "options": 500));
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restPost(String path, Object body) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("post", path, body);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c DELETE request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.del("/orders/1");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restDel(String path, Object body, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("del", path, body, null, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP \c DELETE request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.del("/orders/1");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> restDel(String path, Object body) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("del", path, body);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.doRequest("DELETE", "/orders/1");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param m the HTTP method to be used; case is ignored (if not a valid method an \c HTTP-CLIENT-METHOD-ERROR exception is raised)
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @param decode_errors decode the message body with HTTP error responses and throw an exception based on the message body
java/org/qore/lang/restclient/RestClient.java:        @param hdr any headers to be sent with the request; headers here will override default headers for the object as well
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid HTTP method argument passed
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        @throw REST-ACCEPT-ERROR if the message has a validator that indicates that the response message only
java/org/qore/lang/restclient/RestClient.java:        supports types not supported by the current options or environment
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref httpclient_get_with_body
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> doRequest(String m, String path, Object body, boolean decode_errors, Map<String, Object> hdr) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("doRequest", m, path, body, null, decode_errors, hdr);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.doRequest("DELETE", "/orders/1");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param m the HTTP method to be used; case is ignored (if not a valid method an \c HTTP-CLIENT-METHOD-ERROR exception is raised)
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @param decode_errors decode the message body with HTTP error responses and throw an exception based on the message body
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid HTTP method argument passed
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        @throw REST-ACCEPT-ERROR if the message has a validator that indicates that the response message only
java/org/qore/lang/restclient/RestClient.java:        supports types not supported by the current options or environment
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref httpclient_get_with_body
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> doRequest(String m, String path, Object body, boolean decode_errors) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("doRequest", m, path, body, null, decode_errors);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:    //! sends an HTTP request to the REST server and returns the response
java/org/qore/lang/restclient/RestClient.java:    /** @par Example:
java/org/qore/lang/restclient/RestClient.java:        @code{.java}
java/org/qore/lang/restclient/RestClient.java:HashMap<String, Object> ans = rest.doRequest("DELETE", "/orders/1");
java/org/qore/lang/restclient/RestClient.java:        @endcode
java/org/qore/lang/restclient/RestClient.java:        @param m the HTTP method to be used; case is ignored (if not a valid method an \c HTTP-CLIENT-METHOD-ERROR exception is raised)
java/org/qore/lang/restclient/RestClient.java:        @param path the URI path to add (will be appended to any root path given in the constructor)
java/org/qore/lang/restclient/RestClient.java:        @param body an optional message body to be included in the request; if a value for this parameter is passed to the method, then the body will be serialized according to the serialization rules set in @ref RestClient::RestClient::constructor() "RestClient::constructor()"
java/org/qore/lang/restclient/RestClient.java:        @return A hash of headers received from the HTTP server with all key names converted to lower-case; if any message body is included in the response, it will be deserialized to %Qore data and assigned to the value of the \c "body" key
java/org/qore/lang/restclient/RestClient.java:        @throw DESERIALIZATION-ERROR the response body could not be deserialized (unknown \c Content-Type or invalid serialization)
java/org/qore/lang/restclient/RestClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid HTTP method argument passed
java/org/qore/lang/restclient/RestClient.java:        @throw REST-RESPONSE-ERROR if this exception is thrown by the @ref Qore::HTTPClient::send() call in case of an HTTP response code < 100 or >= 300, the message body is still deserialized if possible and the response information can be retrieved in the \a info hash output keys as follows:
java/org/qore/lang/restclient/RestClient.java:        - \c "response-code": the HTTP response code given
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers": a hash of processed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-headers-raw": a hash of raw unprocessed response headers
java/org/qore/lang/restclient/RestClient.java:        - \c "response-body": the decoded response body
java/org/qore/lang/restclient/RestClient.java:        .
java/org/qore/lang/restclient/RestClient.java:        Note that this exception is not raised for HTTP status codes indicating an error if the \c error_passthru
java/org/qore/lang/restclient/RestClient.java:        option is set to true
java/org/qore/lang/restclient/RestClient.java:        @throw REST-ACCEPT-ERROR if the message has a validator that indicates that the response message only
java/org/qore/lang/restclient/RestClient.java:        supports types not supported by the current options or environment
java/org/qore/lang/restclient/RestClient.java:        Other exceptions can be thrown by the @ref Qore::HTTPClient::send() call used to make the HTTP request.
java/org/qore/lang/restclient/RestClient.java:        @see
java/org/qore/lang/restclient/RestClient.java:        - @ref getSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref setSerialization()
java/org/qore/lang/restclient/RestClient.java:        - @ref httpclient_get_with_body
java/org/qore/lang/restclient/RestClient.java:     */
java/org/qore/lang/restclient/RestClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/restclient/RestClient.java:    public HashMap<String, Object> doRequest(String m, String path, Object body) throws Throwable {
java/org/qore/lang/restclient/RestClient.java:        return (HashMap<String, Object>)obj.callMethod("doRequest", m, path, body);
java/org/qore/lang/restclient/RestClient.java:    }
java/org/qore/lang/restclient/RestClient.java:}
java/org/qore/lang/reflection/Type.java:/** Java wrapper for the %Qore Type class
java/org/qore/lang/reflection/Type.java: *
java/org/qore/lang/reflection/Type.java: */
java/org/qore/lang/reflection/Type.java:package org.qore.lang.reflection;
java/org/qore/lang/reflection/Type.java:// java imports
java/org/qore/lang/reflection/Type.java:import java.util.HashMap;
java/org/qore/lang/reflection/Type.java:// jni module imports
java/org/qore/lang/reflection/Type.java:import org.qore.jni.QoreObject;
java/org/qore/lang/reflection/Type.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/reflection/Type.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/reflection/Type.java://! Java wrapper for the @ref Qore::Reflection::Type class in Qore
java/org/qore/lang/reflection/Type.java:/** @note Loads and initializes the Qore library, the jni module, and the reflection module in static initialization
java/org/qore/lang/reflection/Type.java:    if necessary
java/org/qore/lang/reflection/Type.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/reflection/Type.java:    <tt>import qoremod.reflection.Type;</tt>
java/org/qore/lang/reflection/Type.java:*/
java/org/qore/lang/reflection/Type.java:@Deprecated
java/org/qore/lang/reflection/Type.java:public class Type extends QoreObjectWrapper {
java/org/qore/lang/reflection/Type.java:    // static initialization
java/org/qore/lang/reflection/Type.java:    static {
java/org/qore/lang/reflection/Type.java:        // loads and initializes the Qore library and the jni module (if necessary)
java/org/qore/lang/reflection/Type.java:        try {
java/org/qore/lang/reflection/Type.java:            QoreJavaApi.initQore();
java/org/qore/lang/reflection/Type.java:            QoreJavaApi.callFunction("load_module", "reflection");
java/org/qore/lang/reflection/Type.java:        } catch (Throwable e) {
java/org/qore/lang/reflection/Type.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/reflection/Type.java:        }
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/reflection/Type.java:    public Type(QoreObject obj) throws Throwable {
java/org/qore/lang/reflection/Type.java:        super(obj);
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Creates the type from the given string
java/org/qore/lang/reflection/Type.java:    /** @param string the type string
java/org/qore/lang/reflection/Type.java:        @throw UNKNOWN-TYPE cannot find the given type
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public Type(String typestr) throws Throwable {
java/org/qore/lang/reflection/Type.java:        super(QoreJavaApi.newObjectSave("Reflection::Type", typestr));
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! returns the type's name
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    String name = t.getName();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the type's name
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public String getName() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (String)obj.callMethod("getName");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if the Type object passed as an argument is equal to the current object; @ref False if not
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = t1.isEqual(t2);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param type the type to check with the current type for equality
java/org/qore/lang/reflection/Type.java:        @return @ref True if the Type object passed as an argument is equal to the current object; @ref False if not
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean isEqual(Type type) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("isEqual", type);
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if the output of the Type object passed as an argument is compatible with the return type if the current Type
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = t1.isOutputCompatible(t2);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param type the type to check output value compatibility with the current type
java/org/qore/lang/reflection/Type.java:        @return @ref True if the output of the Type object passed as an argument is compatible with the return type if the
java/org/qore/lang/reflection/Type.java:        current Type
java/org/qore/lang/reflection/Type.java:        @see isCompatible()
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean isOutputCompatible(Type type) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("isOutputCompatible", type);
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if the argument type is compatible with the current type (inputs and outputs)
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = t1.isCompatible(t2);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param type the type to check compatibility with the current type
java/org/qore/lang/reflection/Type.java:        @return @ref True if the argument type is compatible with the current type (inputs and outputs)
java/org/qore/lang/reflection/Type.java:        @note a more strict check than @ref isOutputCompatible()
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean isCompatible(Type type) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("isCompatible", type);
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if the output of the Type object passed as an argument is compatible with the input type if the current Type
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    int v = t1.isAssignableFrom(t2);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param type the type to check output value compatibility with the current type
java/org/qore/lang/reflection/Type.java:        @return @ref True if the output of the Type object passed as an argument is compatible with the input type if the
java/org/qore/lang/reflection/Type.java:        current Type
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean isAssignableFrom(Type type) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("isAssignableFrom", type);
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the value after any conversions by the type
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    Object v1 = t1.acceptsValue(v0);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param value the value to assign to the type
java/org/qore/lang/reflection/Type.java:        @return the value to be assigned; can be converted by the type
java/org/qore/lang/reflection/Type.java:        @throw RUNTIME-TYPE-ERROR if the value cannot be assigned to the type
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public Object acceptsValue(Object value) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return obj.callMethod("acceptsValue", value);
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if the Type object can be assigned from the value given as an argument
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = t.isAssignableFrom(val);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param value the value to check
java/org/qore/lang/reflection/Type.java:        @return a match code for the assignment; see @ref type_match_constants for possible values
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public int isAssignableFrom(Object value) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return ((Long)obj.callMethod("isAssignableFrom", value)).intValue();
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the base type code for the type or @ref Qore::NT_ALL for those that don't have types
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    int t = t.getBaseTypeCode();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the base type code for the type or @ref Qore::NT_ALL for those that don't have types
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public int getBaseTypeCode() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return ((Long)obj.callMethod("getBaseTypeCode")).intValue();
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns a hash of types accepted by this type
java/org/qore/lang/reflection/Type.java:    /** @return a hash of types accepted by this type
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/reflection/Type.java:    public HashMap<String, Boolean> getAcceptTypeHash() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (HashMap<String, Boolean>)obj.callMethod("getAcceptTypeHash");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns a hash of types returned by this type
java/org/qore/lang/reflection/Type.java:    /** @return a hash of types returned by this type
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/reflection/Type.java:    public HashMap<String, Boolean> getReturnTypeHash() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (HashMap<String, Boolean>)obj.callMethod("getReturnTypeHash");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if values of this type can be converted to a scalar value
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = t.canConvertToScalar();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return @ref True if the output of the Type object passed as an argument is compatible with the return type if the current Type
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean canConvertToScalar() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("canConvertToScalar");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref True if this type has a default value
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = t.canConvertToScalar();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return @ref True if this type has a default value
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean hasDefaultValue() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("hasDefaultValue");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the default value for the type or @ref nothing if the type has no default value
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    Object v = t.getDefaultValue();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the default value for the type or @ref nothing if the type has no default value
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public Object getDefaultValue() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return obj.callMethod("getDefaultValue");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref true if the type accepts and returns @ref nothing in addition to other values
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = type.isOrNothingType();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return @ref true if the type accepts and returns @ref nothing in addition to other values
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean isOrNothingType() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("isOrNothingType");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the base type for the current type; if the type is already a base type (i.e. not an "or nothing" type), then the same type is returned
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    Object v = t.getBaseType();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the base type for the current type; if the type is already a base type (i.e. not an "or nothing" type), then the same type is returned
java/org/qore/lang/reflection/Type.java:        @see getOrNothingType()
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public Type getBaseType() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return new Type((QoreObject)obj.callMethodSave("getBaseType"));
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the "or nothing" type for the current type; if the type is already an "or nothing" type (i.e. it already accepts @ref nothing), then the same type is returned
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    Object v = t.getOrNothingType();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the "or nothing" type for the current type; if the type is already an "or nothing" type (i.e. it already accepts @ref nothing), then the same type is returned
java/org/qore/lang/reflection/Type.java:        @see getBaseType()
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public Type getOrNothingType() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return new Type((QoreObject)obj.callMethodSave("getOrNothingType"));
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the element type for complex list and hash types, if any, otherwise returns @ref nothing
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    *Type element_type = type.getElementType();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the element type for complex list and hash types, if any, otherwise returns @ref nothing
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public Type getElementType() throws Throwable {
java/org/qore/lang/reflection/Type.java:        QoreObject rv = (QoreObject)obj.callMethodSave("getElementType");
java/org/qore/lang/reflection/Type.java:        if (rv != null) {
java/org/qore/lang/reflection/Type.java:            return new Type(rv);
java/org/qore/lang/reflection/Type.java:        }
java/org/qore/lang/reflection/Type.java:        return null;
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref true if the type is a TypedHash type, @ref false if not
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = type.isTypedHash();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return @ref true if the type is a TypedHash type, @ref false if not
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean isTypedHash() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("isTypedHash");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns @ref true if the type is not a wildcard type; i.e. has type restrictions
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    boolean b = type.hasType();
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return @ref true if the type is not a wildcard type; i.e. has type restrictions
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public boolean hasType() throws Throwable {
java/org/qore/lang/reflection/Type.java:        return (boolean)obj.callMethod("hasType");
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the type object for the value
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    Type t = getType(v);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @param v the value to return the type object for
java/org/qore/lang/reflection/Type.java:        @return the type object for the value
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public static Type getType(Object v) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return new Type((QoreObject)QoreJavaApi.callStaticMethodSave("Type", "getType", v));
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:    //! Returns the "or nothing" type object for the value
java/org/qore/lang/reflection/Type.java:    /** @par Example:
java/org/qore/lang/reflection/Type.java:        @code{.java}
java/org/qore/lang/reflection/Type.java:    Type t = Type::getOrNothingType(v);
java/org/qore/lang/reflection/Type.java:        @endcode
java/org/qore/lang/reflection/Type.java:        @return the "or nothing" type object for the value
java/org/qore/lang/reflection/Type.java:    */
java/org/qore/lang/reflection/Type.java:    public static Type getOrNothingType(Object v) throws Throwable {
java/org/qore/lang/reflection/Type.java:        return new Type((QoreObject)QoreJavaApi.callStaticMethodSave("Type", "getOrNothingType", v));
java/org/qore/lang/reflection/Type.java:    }
java/org/qore/lang/reflection/Type.java:}
java/org/qore/lang/soapclient/SoapClient.java:/** Java wrapper for the %Qore SoapClient class
java/org/qore/lang/soapclient/SoapClient.java: *
java/org/qore/lang/soapclient/SoapClient.java: */
java/org/qore/lang/soapclient/SoapClient.java:package org.qore.lang.soapclient;
java/org/qore/lang/soapclient/SoapClient.java:// java imports
java/org/qore/lang/soapclient/SoapClient.java:import java.util.Map;
java/org/qore/lang/soapclient/SoapClient.java:import java.util.HashMap;
java/org/qore/lang/soapclient/SoapClient.java:// jni module imports
java/org/qore/lang/soapclient/SoapClient.java:import org.qore.jni.QoreObject;
java/org/qore/lang/soapclient/SoapClient.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/soapclient/SoapClient.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/soapclient/SoapClient.java:import org.qore.lang.*;
java/org/qore/lang/soapclient/SoapClient.java://! Java wrapper for the @ref SoapClient::SoapClient class in %Qore
java/org/qore/lang/soapclient/SoapClient.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/soapclient/SoapClient.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/soapclient/SoapClient.java:    <tt>import qoremod.SoapClient.SoapClient;</tt>
java/org/qore/lang/soapclient/SoapClient.java:*/
java/org/qore/lang/soapclient/SoapClient.java:@Deprecated
java/org/qore/lang/soapclient/SoapClient.java:public class SoapClient extends HTTPClient {
java/org/qore/lang/soapclient/SoapClient.java:    // static initialization
java/org/qore/lang/soapclient/SoapClient.java:    static {
java/org/qore/lang/soapclient/SoapClient.java:        // load the SoapClient module
java/org/qore/lang/soapclient/SoapClient.java:        try {
java/org/qore/lang/soapclient/SoapClient.java:            QoreJavaApi.initQore();
java/org/qore/lang/soapclient/SoapClient.java:            QoreJavaApi.callFunction("load_module", "SoapClient");
java/org/qore/lang/soapclient/SoapClient.java:        } catch (Throwable e) {
java/org/qore/lang/soapclient/SoapClient.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/soapclient/SoapClient.java:        }
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! creates the object
java/org/qore/lang/soapclient/SoapClient.java:    public SoapClient(QoreObject ds) {
java/org/qore/lang/soapclient/SoapClient.java:        super(ds);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! creates the object based on a %WSDL which is parsed to a @ref WSDL::WebService "WebService" object which provides the basis for all communication with this object
java/org/qore/lang/soapclient/SoapClient.java:    /** one of either the \c wsdl or \c wsdl_file keys is required in the hash given to the constructor or an exception will be thrown
java/org/qore/lang/soapclient/SoapClient.java:        @param h valid option keys:
java/org/qore/lang/soapclient/SoapClient.java:        - \c wsdl: the URL of the web service or a @ref WSDL::WebService "WebService" object itself
java/org/qore/lang/soapclient/SoapClient.java:        - \c wsdl_file: a path to use to load the %WSDL and create the @ref WSDL::WebService "WebService" object
java/org/qore/lang/soapclient/SoapClient.java:        - \c url: override the target URL given in the %WSDL
java/org/qore/lang/soapclient/SoapClient.java:        - \c send_encoding: a @ref EncodingSupport "send data encoding option" or the value \c "auto" which means to use automatic encoding; if not present defaults to no content-encoding on sent message bodies
java/org/qore/lang/soapclient/SoapClient.java:        - \c content_encoding: for possible values, see @ref EncodingSupport; this sets the send encoding (if the \c "send_encoding" option is not set) and the requested response encoding
java/org/qore/lang/soapclient/SoapClient.java:        - [\c service]: in case multiple service entries are found in the WSDL, give the one to be used here
java/org/qore/lang/soapclient/SoapClient.java:        - [\c port]: in case multiple port entries are found in the WSDL, give the one to be used here; note that the SOAP binding is resolved from the \a service and \a port options.
java/org/qore/lang/soapclient/SoapClient.java:        - [\c log]: a log closure or call reference taking a single string giving the log message
java/org/qore/lang/soapclient/SoapClient.java:        - [\c dbglog]: a log closure or call reference taking a single string giving the debug log message
java/org/qore/lang/soapclient/SoapClient.java:        - also all options from @ref SoapClient::SoapClient::HTTPOptions "SoapClient::HTTPOptions", which are passed to @ref Qore::HTTPClient::constructor() "HTTPClient::constructor()"
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    public SoapClient(Map<String, Object> h) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        super(h);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! makes a server call with the given operation, arguments, options, and optional info hash reference and returns the result
java/org/qore/lang/soapclient/SoapClient.java:    /** @param operation the SOAP operation to use to serialize the request; if the operation is not known to the underlying @ref WSDL::WebService "WebService" class, an exception will be thrown
java/org/qore/lang/soapclient/SoapClient.java:        @param args the arguments to the SOAP operation
java/org/qore/lang/soapclient/SoapClient.java:        @param opts an optional hash of options for the call as follows:
java/org/qore/lang/soapclient/SoapClient.java:        - \c soap_header: a hash giving SOAP header information, if required by the message
java/org/qore/lang/soapclient/SoapClient.java:        - \c http_header: a hash giving HTTP header information to include in the message (does not override automatically-generated SOAP message headers)
java/org/qore/lang/soapclient/SoapClient.java:        - \c xml_opts: an integer XML generation option code; see @ref xml_generation_constants for possible values; combine multiple codes with binary or (\c |)
java/org/qore/lang/soapclient/SoapClient.java:        - \c soapaction: an optional string that will override the SOAPAction for the request; en empty string here will prevent the SOAPAction from being sent
java/org/qore/lang/soapclient/SoapClient.java:        - \c binding: the SOAP binding name, if not provided the first binding assigned to the operation will be used
java/org/qore/lang/soapclient/SoapClient.java:        @return a hash with the following keys:
java/org/qore/lang/soapclient/SoapClient.java:        - \c hdr: a hash of message headers
java/org/qore/lang/soapclient/SoapClient.java:        - \c body: the serialized message body
java/org/qore/lang/soapclient/SoapClient.java:        @throw WSDL-OPERATION-ERROR the operation is not defined in the WSDL
java/org/qore/lang/soapclient/SoapClient.java:        @throw WSDL-BINDING-ERROR the binding is not assigned to a SOAP operation in the WSDL
java/org/qore/lang/soapclient/SoapClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR this exception is thrown when the SOAP server returns an HTTP error code; if a SOAP fault is returned, then it is deserialized and returned in the \a arg key of the exception hash
java/org/qore/lang/soapclient/SoapClient.java:        @note this method can throw any exception that @ref Qore::HTTPClient::send() "HTTPClient::send()" can throw as well as any XML parsing errors thrown by @ref Qore::XML::parse_xml() "parse_xml()"
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    public Object callOperation(String operation, Object args, Map<String, Object> opts) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        return obj.callMethod("callOperation", operation, args, opts);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! returns a hash of information about the current WSDL
java/org/qore/lang/soapclient/SoapClient.java:    /** @return a hash with the following keys:
java/org/qore/lang/soapclient/SoapClient.java:        - \c "service": the name of the SOAP service used
java/org/qore/lang/soapclient/SoapClient.java:        - \c "pore": the name of the SOAP port used
java/org/qore/lang/soapclient/SoapClient.java:        - \c "binding": the name of the binding used
java/org/qore/lang/soapclient/SoapClient.java:        - \c "url": the target URL
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/soapclient/SoapClient.java:    public HashMap<String, Object> getInfo() throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        return (HashMap<String, Object>)obj.callMethod("getInfo");
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! change the data content encoding (compression) option for the object; see @ref EncodingSupport for valid options
java/org/qore/lang/soapclient/SoapClient.java:    /** @par Example:
java/org/qore/lang/soapclient/SoapClient.java:        @code{.java}
java/org/qore/lang/soapclient/SoapClient.java:sc.setSendEncoding("gzip");
java/org/qore/lang/soapclient/SoapClient.java:        @endcode
java/org/qore/lang/soapclient/SoapClient.java:        The default is to send requests unencoded/uncompressed.
java/org/qore/lang/soapclient/SoapClient.java:        @param enc the data content encoding (compression) option for the object; see @ref EncodingSupport for valid options; if the value \c "auto" is passed then \c "gzip" encoding is used
java/org/qore/lang/soapclient/SoapClient.java:        @throw SOAPCLIENT-ERROR invalid or unsupported data content encoding / compression option
java/org/qore/lang/soapclient/SoapClient.java:        @see
java/org/qore/lang/soapclient/SoapClient.java:        - @ref setContentEncoding()
java/org/qore/lang/soapclient/SoapClient.java:        - @ref getSendEncoding()
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    public void setSendEncoding(String enc) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        obj.callMethod("setSendEncoding", enc);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! sets the request and desired response encoding for the object; see @ref EncodingSupport for valid options
java/org/qore/lang/soapclient/SoapClient.java:    /** @par Example:
java/org/qore/lang/soapclient/SoapClient.java:        @code{.java}
java/org/qore/lang/soapclient/SoapClient.java:soap.setContentEncoding("gzip");
java/org/qore/lang/soapclient/SoapClient.java:        @endcode
java/org/qore/lang/soapclient/SoapClient.java:        @param enc the data content encoding (compression) option for requests and the desired response content encoding for the object; see @ref EncodingSupport for valid options; if the value \c "auto" is passed then \c "gzip" encoding is used for outgoing requests and requested for responses
java/org/qore/lang/soapclient/SoapClient.java:        @throw SOAPCLIENT-ERROR invalid or unsupported data content encoding / compression option
java/org/qore/lang/soapclient/SoapClient.java:        @see
java/org/qore/lang/soapclient/SoapClient.java:        - @ref getSendEncoding()
java/org/qore/lang/soapclient/SoapClient.java:        - @ref setSendEncoding()
java/org/qore/lang/soapclient/SoapClient.java:        @since %SoapClient 0.2.4
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    public void setContentEncoding(String enc) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        obj.callMethod("setContentEncoding", enc);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! adds default headers to each request; these headers will be sent in all requests but can be overridden in requests as well
java/org/qore/lang/soapclient/SoapClient.java:    /** @par Example:
java/org/qore/lang/soapclient/SoapClient.java:        @code{.java}
java/org/qore/lang/soapclient/SoapClient.java:// disable gzip and bzip encoding in responses
java/org/qore/lang/soapclient/SoapClient.java:soap.addDefaultHeaders(hdrs);
java/org/qore/lang/soapclient/SoapClient.java:        @endcode
java/org/qore/lang/soapclient/SoapClient.java:        @param h a hash of headers to add to the default headers to send on each request
java/org/qore/lang/soapclient/SoapClient.java:        @note default headers can also be set in the constructor
java/org/qore/lang/soapclient/SoapClient.java:        @see @ref getDefaultHeaders()
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    public void addDefaultHeaders(Map<String, Object> h) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        obj.callMethod("addDefaultHeaders", h);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! returns the hash of default headers to sent in all requests
java/org/qore/lang/soapclient/SoapClient.java:    /** @par Example:
java/org/qore/lang/soapclient/SoapClient.java:        @code{.java}
java/org/qore/lang/soapclient/SoapClient.java:HashMap<String, Object> h = soap.getDefaultHeaders();
java/org/qore/lang/soapclient/SoapClient.java:        @endcode
java/org/qore/lang/soapclient/SoapClient.java:        @return the hash of default headers to sent in all requests
java/org/qore/lang/soapclient/SoapClient.java:        @note default headers can be set in the constructor and in addDefaultHeaders()
java/org/qore/lang/soapclient/SoapClient.java:        @see @ref setDefaultHeaders()
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/soapclient/SoapClient.java:    public HashMap<String, Object> getDefaultHeaders() throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        return (HashMap<String, Object>)obj.callMethod("getDefaultHeaders");
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! returns the current data content encoding (compression) object or @ref nothing if no encoding option is set; see @ref EncodingSupport for valid options
java/org/qore/lang/soapclient/SoapClient.java:    /** @par Example:
java/org/qore/lang/soapclient/SoapClient.java:        @code{.java}
java/org/qore/lang/soapclient/SoapClient.java:String ce = soap.getSendEncoding();
java/org/qore/lang/soapclient/SoapClient.java:        @endcode
java/org/qore/lang/soapclient/SoapClient.java:        @return the current data content encoding (compression) object or @ref nothing if no encoding option is set; see @ref EncodingSupport for valid options
java/org/qore/lang/soapclient/SoapClient.java:        @see
java/org/qore/lang/soapclient/SoapClient.java:        - @ref setContentEncoding()
java/org/qore/lang/soapclient/SoapClient.java:        - @ref setSendEncoding()
java/org/qore/lang/soapclient/SoapClient.java:    */
java/org/qore/lang/soapclient/SoapClient.java:    public String getSendEncoding() throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        return (String)obj.callMethod("getSendEncoding");
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! sends a log message to the log closure or call reference, if any
java/org/qore/lang/soapclient/SoapClient.java:    public void log(String msg) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        obj.callMethod("log", msg);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:    //! sends a log message to the debug log closure or call reference, if any
java/org/qore/lang/soapclient/SoapClient.java:    public void dbglog(String msg) throws Throwable {
java/org/qore/lang/soapclient/SoapClient.java:        obj.callMethod("dbglog", msg);
java/org/qore/lang/soapclient/SoapClient.java:    }
java/org/qore/lang/soapclient/SoapClient.java:}
java/org/qore/lang/HTTPClient.java:/** Java wrapper for the %Qore HTTPClient class
java/org/qore/lang/HTTPClient.java: *
java/org/qore/lang/HTTPClient.java: */
java/org/qore/lang/HTTPClient.java:package org.qore.lang;
java/org/qore/lang/HTTPClient.java:// java imports
java/org/qore/lang/HTTPClient.java:import java.util.Map;
java/org/qore/lang/HTTPClient.java:import java.util.HashMap;
java/org/qore/lang/HTTPClient.java:// jni module imports
java/org/qore/lang/HTTPClient.java:import org.qore.jni.QoreObject;
java/org/qore/lang/HTTPClient.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/HTTPClient.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/HTTPClient.java://! Java wrapper for the @ref Qore::HTTPClient class in %Qore
java/org/qore/lang/HTTPClient.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/HTTPClient.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/HTTPClient.java:    <tt>import qore.Qore.HTTPClient;</tt>
java/org/qore/lang/HTTPClient.java:*/
java/org/qore/lang/HTTPClient.java:@Deprecated
java/org/qore/lang/HTTPClient.java:public class HTTPClient extends QoreObjectWrapper {
java/org/qore/lang/HTTPClient.java:    // static initialization
java/org/qore/lang/HTTPClient.java:    static {
java/org/qore/lang/HTTPClient.java:        // initialize the Qore library if necessary
java/org/qore/lang/HTTPClient.java:        try {
java/org/qore/lang/HTTPClient.java:            QoreJavaApi.initQore();
java/org/qore/lang/HTTPClient.java:        } catch (Throwable e) {
java/org/qore/lang/HTTPClient.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/HTTPClient.java:        }
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! creates the object
java/org/qore/lang/HTTPClient.java:    public HTTPClient(QoreObject ds) {
java/org/qore/lang/HTTPClient.java:        super(ds);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Creates the HTTPClient object based on the option parameter passed
java/org/qore/lang/HTTPClient.java:    /** To connect, call any method that requires a connection and an implicit connection is established, or call HTTPClient::connect().
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    HTTPClient httpclient = new HTTPClient(opts);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param opts sets options and changes default behaviour for the object, etc; key names are case-sensitive and therefore must all be in lower-case:
java/org/qore/lang/HTTPClient.java:        - \c additional_methods: An optional hash defining additional HTTP methods to handle.  This allows the HTTPClient class to handle various HTTP extensions like e.g. WebDAV. The hash is defined with new method names as keys; the values are @ref true or @ref false indicating if the method can accept a message body; for example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:        # add two new HTTP methods for WebDAV; both require message bodies
java/org/qore/lang/HTTPClient.java:        HTTPClient httpclient(("url": url, "additional_methods": ("PROPFIND": True, "MKCOL": True )));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        - \c connect_timeout: The timeout value in milliseconds for establishing a new socket connection (also can be a @ref relative_dates "relative date-time value" for clarity, ex: \c 30s)
java/org/qore/lang/HTTPClient.java:        - \c default_path: The default path to use for new connections if a path is not otherwise specified in the connection URL
java/org/qore/lang/HTTPClient.java:        - \c default_port: The default port number to connect to if none is given in the URL
java/org/qore/lang/HTTPClient.java:        - \c http_version: Either \c "1.0" or \c "1.1" for the claimed HTTP protocol version compliancy in outgoing message headers
java/org/qore/lang/HTTPClient.java:        - \c max_redirects: The maximum number of redirects before throwing an exception (the default is 5)
java/org/qore/lang/HTTPClient.java:        - \c protocols: A hash describing new protocols, the key is the protocol name and the value is either an integer giving the default port number or a hash with \c "port" and \c "ssl" keys giving the default port number and a boolean value to indicate that an SSL connection should be established
java/org/qore/lang/HTTPClient.java:        - \c proxy: The proxy URL for connecting through a proxy
java/org/qore/lang/HTTPClient.java:        - \c ssl_cert_path: a path to an X.509 client certificate file in PEM format; if this option is used, then the calling context must not be restricted with sandbox restriction @ref Qore::PO_NO_FILESYSTEM which is checked at runtime
java/org/qore/lang/HTTPClient.java:        - \c ssl_key_path: a path to a private key file in PEM format for the X.509 client certificate; if this option is used, then the calling context must not be restricted with sandbox restriction @ref Qore::PO_NO_FILESYSTEM which is checked at runtime
java/org/qore/lang/HTTPClient.java:        - \c ssl_key_password: the password to the private key given with \c ssl_key_path
java/org/qore/lang/HTTPClient.java:        - \c ssl_verify_cert: if @ref true then the server's certificate will only be accepted if it's verified
java/org/qore/lang/HTTPClient.java:        - \c timeout: The timeout value in milliseconds (also can be a @ref relative_dates "relative date-time value" for clarity, ex: \c 5m)
java/org/qore/lang/HTTPClient.java:        - \c url: A string giving the URL to connect to
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-OPTION-ERROR invalid or unknown option passed in option hash
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-URL-ERROR invalid URL string
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-UNKNOWN-PROTOCOL unknown protocol passed in URL
java/org/qore/lang/HTTPClient.java:        @throw ILLEGAL-FILESYSTEM-ACCESS if the calling context is restricted with the @ref Qore::PO_NO_FILESYSTEM sandboxing restriction and one of the following options is used: \c ssl_cert_path or \c ssl_key_path
java/org/qore/lang/HTTPClient.java:        @note
java/org/qore/lang/HTTPClient.java:        - URLs with UNIX sockets are generally supported in Qore with the following syntax: <tt><b>scheme://socket=</b></tt><i>url_encoded_path</i><tt><b>/path</b></tt>, where <i>url_encoded_path</i> is a path with URL-encoding as performed by @ref encode_url() "encode_url(string, True)"; for example: \c "http://socket=%2ftmp%socket-dir%2fsocket-file-1/url/path"; this allows a filesystem path to be used in the host portion of the URL and for the URL to include a URL path as well.
java/org/qore/lang/HTTPClient.java:        - other I/O errors can be thrown opening and reading the certificate and/or private key files if the \c ssl_cert_path or \c ssl_key_path options are used
java/org/qore/lang/HTTPClient.java:        - the @ref Qore::PO_NO_FILESYSTEM sandbox restriction is checked at runtime if one of the following options is used: \c ssl_cert_path or \c ssl_key_path
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.8.13 added the following options:
java/org/qore/lang/HTTPClient.java:        - \c ssl_cert_path
java/org/qore/lang/HTTPClient.java:        - \c ssl_key_path
java/org/qore/lang/HTTPClient.java:        - \c ssl_key_password
java/org/qore/lang/HTTPClient.java:        - \c ssl_verify_cert
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public HTTPClient(Map<String, Object> opts) throws Throwable {
java/org/qore/lang/HTTPClient.java:        super(QoreJavaApi.newObjectSave("Qore::HTTPClient", opts));
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the HTTP protocol version string for headers in outgoing messages, allowed values are \c "1.0" and \"1.1\".
java/org/qore/lang/HTTPClient.java:    /** @param ver \c "1.0" or \"1.1\" for the HTTP protocol compliance version
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setHTTPVersion("1.1");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @throw HTTP-VERSION-ERROR invalid HTTP version passed (allowed values: \c "1.0" and \"1.1\")
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setHTTPVersion(String ver) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setHTTPVersion", ver);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the HTTP protocol version string used in outgoing messages
java/org/qore/lang/HTTPClient.java:    /** @return the HTTP protocol version string used in outgoing messages
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    string version = httpclient.getHTTPVersion();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getHTTPVersion() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getHTTPVersion");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the object to make a secure SSL/TLS connection on the next connect if the passed argument is true, or an unencrypted cleartext connection if it is false
java/org/qore/lang/HTTPClient.java:    /** This method overrides the default behaviour for the protocol set for the object
java/org/qore/lang/HTTPClient.java:        Note that the behavior of this method when called with no argument changed in version 0.8.0; prior to version 0.8.0 calling this method with no argument would turn off secure mode; the behavior was changed to the current functionality in order to make the usage of this method consistent with other methods of the same name and to make it more logical.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setSecure(True);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param secure if true, a SSL/TLS connection will be attempted on the next connection. If false, an unencrypted cleartext connection will be established
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setSecure(boolean secure) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setSecure", secure);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns true if the current connection is encrypted, false if not
java/org/qore/lang/HTTPClient.java:    /** @return true if the current connection is encrypted, false if not
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    if (httpclient.isSecure())
java/org/qore/lang/HTTPClient.java:        printf("secure connection: %s %s\n", httpclient.getSSLCipherName(), httpclient.getSSLCipherVersion());
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean isSecure() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("isSecure");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Connects to the remote socket; SSL/TLS negotiation is performed if required
java/org/qore/lang/HTTPClient.java:    /** If the protocol indicates that a secure connection should be established (or HTTPClient::setSecure() was called previsouly), SSL/TLS negotiation will be attempted.
java/org/qore/lang/HTTPClient.java:        If the \c TCP_NODELAY flag has been set (see HTTPClient::setNoDelay()), then after a successful connection to the remote socket, this option will be set on the socket. If an error occurs setting the \c TCP_NODELAY option, the internal flag is set to false (use HTTPClient::getNoDelay() to check the flag's state) and the error code can be retrieved with errno().
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.connect();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions, see the Socket::connect() method (or Socket::connectSSL() for secure connections).
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void connect() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("connect");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Disconnects from the remote socket if a connection is established (otherwise does nothing)
java/org/qore/lang/HTTPClient.java:    /**
java/org/qore/lang/HTTPClient.java:         @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.disconnect();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void disconnect() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("disconnect");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; note that sending an HTTP message bosdy with a \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @param path The path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @param getbody If this argument is true, then the object will try to receive a message body even if no \c "Content-Length" header is present in the response. Use this only with broken servers that send message bodies without a \c "Content-Length" header.
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(String body, String method, String path, Map<String, Object> headers, boolean getbody) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method, path, headers, getbody);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; note that sending an HTTP message bosdy with a \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @param path The path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(String body, String method, String path, Map<String, Object> headers) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method, path, headers);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; note that sending an HTTP message bosdy with a \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @param path The path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(String body, String method, String path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method, path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; note that sending an HTTP message bosdy with a \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(String body, String method) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; pass null (no value) to send no body
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @param path The path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @param getbody If this argument is true, then the object will try to receive a message body even if no \c "Content-Length" header is present in the response. Use this only with broken servers that send message bodies without a \c "Content-Length" header.
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(byte[] body, String method, String path, Map<String, Object> headers, boolean getbody) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method, path, headers, getbody);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; pass null (no value) to send no body
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @param path The path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(byte[] body, String method, String path, Map<String, Object> headers) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method, path, headers);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; pass null (no value) to send no body
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @param path The path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(byte[] body, String method, String path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method, path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP request with the specified method and optional message body and returns headers and any body received as a response in a hash format
java/org/qore/lang/HTTPClient.java:    /** If a connection has not already been established, an internal call to HTTPClient::connect() will be made before sending the message
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    hash msg = httpclient.send(body, "POST", "/path", ("Content-Type":"application/x-yaml"));
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param body The message body to send; pass null (no value) to send no body
java/org/qore/lang/HTTPClient.java:        @param method The name of the HTTP method (\c "GET", \c "POST", \c "HEAD", \c "OPTIONS", \c "PUT", \c "DELETE", \c "TRACE", \c "CONNECT", or \c "PATCH"). Additional methods can be added in the constructor with the a \c additional_methods option.
java/org/qore/lang/HTTPClient.java:        @return The headers received from the HTTP server with all key names converted to lower-case. The message body (if any) will be assigned to the value of the \c "body" key and the HTTP status will be assigned to the \c "status_code" key.
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-METHOD-ERROR invalid/unknown HTTP method passed
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the normal return value of this method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> send(byte[] body, String method) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("send", body, method);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c GET request and returns the message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body, use the HTTPClient::send() method instead (although note that sending an HTTP message bosdy with a \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information).
java/org/qore/lang/HTTPClient.java:        If no connection has already been established, an internal call to HTTPClient::connect() will be made before sending the request.
java/org/qore/lang/HTTPClient.java:        If any content encoding is used for the message body in the reply, the content is decoded and returned as a string; if the content encoding uses an unknown method, then an exception is thrown.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    *string html = httpclient.get("/path/file.html");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case of an error or an erroneous reply by the server with no body
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String get(String path, Map<String, Object> headers) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("get", path, headers);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c GET request and returns the message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body, use the HTTPClient::send() method instead (although note that sending an HTTP message bosdy with a \c GET request is not standards compliant; see @ref httpclient_get_with_body for more information).
java/org/qore/lang/HTTPClient.java:        If no connection has already been established, an internal call to HTTPClient::connect() will be made before sending the request.
java/org/qore/lang/HTTPClient.java:        If any content encoding is used for the message body in the reply, the content is decoded and returned as a string; if the content encoding uses an unknown method, then an exception is thrown.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    *string html = httpclient.get("/path/file.html");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case of an error or an erroneous reply by the server with no body
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:        @see @ref httpclient_get_with_body
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String get(String path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("get", path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c HEAD request and returns as hash of the headers received
java/org/qore/lang/HTTPClient.java:    /** If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.hava}
java/org/qore/lang/HTTPClient.java:    String msg = httpclient.head("/path");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @return the headers received from the HTTP server with all key names converted to lower-case
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String head(String path, Map<String, Object> headers) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("head", path, headers);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c HEAD request and returns as hash of the headers received
java/org/qore/lang/HTTPClient.java:    /** If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.hava}
java/org/qore/lang/HTTPClient.java:    String msg = httpclient.head("/path");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @return the headers received from the HTTP server with all key names converted to lower-case
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String head(String path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("head", path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c POST request with a message body and returns the message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body in the response, use the HTTPClient::send() method instead.
java/org/qore/lang/HTTPClient.java:        If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    String str = httpclient.post("/path", body);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param body the string to use as the message body
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case no body was present in the response
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String post(String path, String body, Map<String, Object> headers) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("post", path, body, headers);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c POST request with a message body and returns the message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body in the response, use the HTTPClient::send() method instead.
java/org/qore/lang/HTTPClient.java:        If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    String str = httpclient.post("/path", body);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param body the string to use as the message body
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case no body was present in the response
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String post(String path, String body) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("post", path, body);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c POST request without a message body and returns the response message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body in the response, use the HTTPClient::send() method instead.
java/org/qore/lang/HTTPClient.java:        If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    String str = httpclient.post("/path");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case no body was present in the response
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw ENCODING-CONVERSION-ERROR the given string could not be converted to the socket's character encoding
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String post(String path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("post", path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c POST request with a message body and returns the message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body in the response, use the HTTPClient::send() method instead.
java/org/qore/lang/HTTPClient.java:        If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.post("/path", body);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param body the optional data to use as the message body
java/org/qore/lang/HTTPClient.java:        @param headers An optional hash of headers to include in the message; values are converted to strings; a list is converted to a string of comma-separated values; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case no body was present in the response
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String post(String path, byte[] body, Map<String, Object> headers) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("post", path, body, headers);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sends an HTTP \c POST request with a message body and returns the message body received as a string or null if no message body is received
java/org/qore/lang/HTTPClient.java:    /** In order to get the headers and the body in the response, use the HTTPClient::send() method instead.
java/org/qore/lang/HTTPClient.java:        If no connection is established, an internal call to HTTPClient::connect() will be made before sending the message.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.post("/path", body);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param path the path for the message (i.e. \c "/path/resource?method&param=value")
java/org/qore/lang/HTTPClient.java:        @param body the optional data to use as the message body
java/org/qore/lang/HTTPClient.java:        @return the message body in the reply to this message or null in case no body was present in the response
java/org/qore/lang/HTTPClient.java:        @par Events:
java/org/qore/lang/HTTPClient.java:        @ref EVENT_CONNECTING, @ref EVENT_CONNECTED, @ref EVENT_HOSTNAME_LOOKUP, @ref EVENT_HOSTNAME_RESOLVED, @ref EVENT_START_SSL, @ref EVENT_SSL_ESTABLISHED, @ref EVENT_HTTP_SEND_MESSAGE, @ref EVENT_PACKET_SENT, @ref EVENT_HTTP_MESSAGE_RECEIVED, @ref EVENT_PACKET_READ, @ref EVENT_HTTP_CONTENT_LENGTH, @ref EVENT_HTTP_CHUNKED_START, @ref EVENT_HTTP_CHUNKED_END, @ref EVENT_HTTP_CHUNKED_DATA_RECEIVED, @ref EVENT_HTTP_CHUNK_SIZE, @ref EVENT_HTTP_FOOTERS_RECEIVED, @ref EVENT_HTTP_REDIRECT
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-REDIRECT-ERROR invalid redirect location given by remote
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-MAXIMUM-REDIRECTS-EXCEEDED maximum redirect count exceeded
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-RECEIVE-ERROR unknown content encoding received or status error communicating with HTTP server (status code < 100 or > 299); in case of a status error the \c "arg" key of the exception hash will be set to a hash equal to the return value of the send() method including a \c "status_code" key (giving the status code) and a \c "body" key (giving the message body returned by the server)
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SEND-ERROR There was an error sending the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-CLOSED The remote end closed the connection
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-RECV-ERROR There was an error receiving the data
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-TIMEOUT Data transmission or reception for a single send() or recv() action exceeded the timeout period
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-SSL-ERROR There was an SSL error while reading data from the socket
java/org/qore/lang/HTTPClient.java:        @throw SOCKET-HTTP-ERROR Invalid HTTP data was received
java/org/qore/lang/HTTPClient.java:        @note For possible exceptions when implicitly establishing a connection, see the Socket::connect() method (or Socket::connectSSL() for secure connections)
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String post(String path, byte[] body) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("post", path, body);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the default I/O timeout value in milliseconds
java/org/qore/lang/HTTPClient.java:    /** @param timeout_ms 0 means immediate timeout (when reading will return data only if it is already available), and negative numbers mean never timeout
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setTimeout(120000);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setTimeout(int timeout_ms) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setTimeout", timeout_ms);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the default I/O timeout as an integer in milliseconds
java/org/qore/lang/HTTPClient.java:    /** @return the default I/O timeout as an integer in milliseconds; 0 means immediate timeout (when reading only returns data if it is already available), and negative numbers mean never timeout
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    int timeout = httpclient.getTimeout();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public int getTimeout() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return ((Long)obj.callMethod("getTimeout")).intValue();
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the string encoding for the object; any strings deserialized with this object will be tagged with this character encoding
java/org/qore/lang/HTTPClient.java:    /** @param encoding the string encoding for the object; any strings deserialized with this object will be tagged with this character encoding
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setEncoding("UTF-8");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setEncoding(String encoding) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setEncoding", encoding);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the character encoding used for the object
java/org/qore/lang/HTTPClient.java:    /** @return the character encoding used for the object
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    string encoding = httpclient.getEncoding();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getEncoding() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getEncoding");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets a new URL value for the next connection
java/org/qore/lang/HTTPClient.java:    /** To retrieve the current URL value, use the HTTPClient::getURL() method
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setURL("https://user:password@hostname:8080/path");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param url the new URL for the object
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-URL-ERROR invalid URL string; invalid authorization credentials in  URL (username without password or vice-versa)
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-UNKNOWN-PROTOCOL unknown protocol (scheme) passed in URL
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::getURL()
java/org/qore/lang/HTTPClient.java:        @note URLs with UNIX sockets are generally supported in Qore with the following syntax: <tt><b>scheme://socket=</b></tt><i>url_encoded_path</i><tt><b>/path</b></tt>, where <i>url_encoded_path</i> is a path with URL-encoding as performed by @ref encode_url() "encode_url(string, True)"; for example: \c "http://socket=%2ftmp%socket-dir%2fsocket-file-1/url/path"; this allows a filesystem path to be used in the host portion of the URL and for the URL to include a URL path as well.
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setURL(String url) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setURL", url);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the current URL
java/org/qore/lang/HTTPClient.java:    /** @return the current URL
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    String url = httpclient.getURL();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getURL() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getURL");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears the new proxy URL value for the next connection
java/org/qore/lang/HTTPClient.java:    /** This variant of the method is equivalent to HTTPClient::clearProxyURL()
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setProxyURL();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setProxyURL() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setProxyURL");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets a new proxy URL value for the next connection
java/org/qore/lang/HTTPClient.java:    /** @param url the new proxy URL value for the next connection
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setProxyURL("http://user:password@proxy_host:8080/path");
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-URL-ERROR invalid proxy URL string; invalid authorization credentials in proxy URL (username without password or vice-versa)
java/org/qore/lang/HTTPClient.java:        @throw HTTP-CLIENT-PROXY-PROTOCOL-ERROR unknown protocol passed in URL
java/org/qore/lang/HTTPClient.java:        @note URLs with UNIX sockets are generally supported in Qore with the following syntax: <tt><b>scheme://socket=</b></tt><i>url_encoded_path</i><tt><b>/path</b></tt>, where <i>url_encoded_path</i> is a path with URL-encoding as performed by @ref encode_url() "encode_url(string, True)"; for example: \c "http://socket=%2ftmp%socket-dir%2fsocket-file-1/url/path"; this allows a filesystem path to be used in the host portion of the URL and for the URL to include a URL path as well.
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setProxyURL(String url) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setProxyURL", url);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the current proxy URL as a string or null if no proxy URL is set
java/org/qore/lang/HTTPClient.java:    /** @return the current proxy URL as a string or null if no proxy URL is set
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    String proxy_url = httpclient.getProxyURL();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getProxyURL() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getProxyURL");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears the new proxy URL value for the next connection
java/org/qore/lang/HTTPClient.java:    /**
java/org/qore/lang/HTTPClient.java:         @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setProxyURL();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void clearProxyURL() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("clearProxyURL");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the SSL/TLS flag for the next connection to the proxy
java/org/qore/lang/HTTPClient.java:    /**
java/org/qore/lang/HTTPClient.java:         @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setProxySecure(true);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::isProxySecure() to check the flag
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setProxySecure(boolean b) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setProxySecure", b);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the SSL/TLS flag for the next proxy connection
java/org/qore/lang/HTTPClient.java:    /** @return the SSL/TLS flag for the next proxy connection
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    boolean b = httpclient.isProxySecure();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean isProxySecure() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("isProxySecure");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Updates the setting for the \c max_redirects value for the object (maximum number of HTTP redirects that will be processed before an exception is raised)
java/org/qore/lang/HTTPClient.java:    /** @param mr the setting for the maximum number of HTTP redirects that will be processed before an exception is raised
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setMaxRedirects(5);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::getMaxRedirects() to retrieve this value
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setMaxRedirects(int mr) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setMaxRedirects", mr);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the current \c max_redirects value for the object (the maximum number of HTTP redirects that will be processed before an exception is raised)
java/org/qore/lang/HTTPClient.java:    /** @return the current \c max_redirects value for the object (the maximum number of HTTP redirects that will be processed before an exception is raised)
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    int mr = httpclient.getMaxRedirects();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public int getMaxRedirects() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return ((Long)obj.callMethod("getMaxRedirects")).intValue();
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the connect timeout in milliseconds
java/org/qore/lang/HTTPClient.java:    /** @param timeout_ms the connect timeout in milliseconds; negative numbers mean use the default system connect timeout. Note that like all %Qore functions and methods taking timeout values, a @ref relative_dates "relative date/time value" can be used to make the units clear (i.e. \c 30s = 30 seconds, etc.).
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setConnectTimeout(120000);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setConnectTimeout(int timeout_ms) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setConnectTimeout", timeout_ms);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the connect timeout as an integer in milliseconds
java/org/qore/lang/HTTPClient.java:    /** @return Returns the connect timeout as an integer in milliseconds; negative numbers mean the system default timeout is used
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    int to = httpclient.getConnectTimeout();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public int getConnectTimeout() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return ((Long)obj.callMethod("getConnectTimeout")).intValue();
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the \c TCP_NODELAY setting for the object
java/org/qore/lang/HTTPClient.java:    /** When this setting is True, then data will be immediately sent out over the HTTPClient object's socket, when it is false, then data transmission may be delayed to be packaged with other data for the same target.
java/org/qore/lang/HTTPClient.java:        Delayed data transmissions may cause problems when the sender immediately closes the socket after sending data; in this case the receiver may not get the data even though the send succeeded.
java/org/qore/lang/HTTPClient.java:        Note that if no value is given to the method, the argument will be assumed to be true, and output buffering will be turned off for the HTTPClient object.
java/org/qore/lang/HTTPClient.java:        If the socket is not connected when this call is made, then an internal flag is set and the \c TCP_NODELAY option is enabled when the next connection is established. If the socket is connected, then if an error occurs setting the \c TCP_NODELAY option on the socket, this method will return a non-zero error code; the actual error can be checked with the errno() function.
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setNoDelay(true);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param b the \c TCP_NODELAY setting for the object
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::getNoDelay()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public int setNoDelay(boolean b) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return ((Long)obj.callMethod("setNoDelay", b)).intValue();
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the \c TCP_NODELAY setting for the HTTPClient object
java/org/qore/lang/HTTPClient.java:    /**
java/org/qore/lang/HTTPClient.java:         @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    boolean b = httpclient.getNoDelay();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see also HTTPClient::setNoDelay()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean getNoDelay() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("getNoDelay");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns true or false giving the current connection state
java/org/qore/lang/HTTPClient.java:    /** @return true or false giving the current connection state
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    boolean b = httpclient.isConnected();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean isConnected() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("isConnected");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the username and password for the connection; call after HTTPClient::setURL()
java/org/qore/lang/HTTPClient.java:    /** Call this method after calling HTTPClient::setURL() to set authentication information when not present in the URL used in HTTPClient::setURL()
java/org/qore/lang/HTTPClient.java:        @param user the username to use for authentication in the next HTTP connection
java/org/qore/lang/HTTPClient.java:        @param pass the password to use for authentication in the next HTTP connection
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setUserPassword(user, pass);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setUserPassword(String user, String pass) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setUserPassword", user, pass);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears the username and password for the connection
java/org/qore/lang/HTTPClient.java:    /** Call this method after calling HTTPClient::setURL() to clear any authentication information present in the URL used in HTTPClient::setURL()
java/org/qore/lang/HTTPClient.java:        This variant of the method is equivalent to HTTPClient::clearUserPassword()
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setUserPassword();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::clearUserPassword()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setUserPassword() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setUserPassword");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears the username and password for the connection
java/org/qore/lang/HTTPClient.java:    /** Call this method after calling HTTPClient::setURL() to clear any authentication information present in the URL used in HTTPClient::setURL()
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.clearUserPassword();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void clearUserPassword() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("clearUserPassword");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the username and password for the connection to the proxy; call after HTTPClient::setProxyURL()
java/org/qore/lang/HTTPClient.java:    /** Call this method after calling HTTPClient::setProxyURL() to set proxy authentication information when not present in the URL used in HTTPClient::setProxyURL()
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setProxyUserPassword(user, pass);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param user the username to use for proxy authentication in the next HTTP connection
java/org/qore/lang/HTTPClient.java:        @param pass the password to use for proxy authentication in the next HTTP connection
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setProxyUserPassword(String user, String pass) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setProxyUserPassword", user, pass);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears the username and password for the next proxy connection
java/org/qore/lang/HTTPClient.java:    /** Call this method after calling HTTPClient::setProxyURL() to clear any proxy authentication information present in the URL used in HTTPClient::setProxyURL()
java/org/qore/lang/HTTPClient.java:        This variant of the method is equivalent to HTTPClient::clearProxyUserPassword()
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setProxyUserPassword();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::clearProxyUserPassword()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setProxyUserPassword() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setProxyUserPassword");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears the username and password for the next proxy connection
java/org/qore/lang/HTTPClient.java:    /** Call this method after calling HTTPClient::setProxyURL() to clear any proxy authentication information present in the URL used in HTTPClient::setProxyURL()
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.clearProxyUserPassword();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void clearProxyUserPassword() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("clearProxyUserPassword");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Sets the default path used by the object if no path is set in the URL
java/org/qore/lang/HTTPClient.java:    /** @param path the default path value to set or if null then clears the path
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setDefaultPath(null);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setDefaultPath(String path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setDefaultPath", path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the default path used by the object if no path is set in the URL
java/org/qore/lang/HTTPClient.java:    /** @return the default path used by the object if no path is set in the URL
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    String def_path = httpclient.getDefaultPath();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getDefaultPath() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getDefaultPath");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns the current connection path set in the URL
java/org/qore/lang/HTTPClient.java:    /** @return the current connection path set in the URL
java/org/qore/lang/HTTPClient.java:        @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    *string path = httpclient.getConnectionPath();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getConnectionPath() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getConnectionPath");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Overrides any connection path set in the URL
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setConnectionPath(new_path);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see getConnectionPath()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setConnectionPath(String uri_path) throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setConnectionPath", uri_path);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Overrides any connection path set in the URL
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setConnectionPath();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @see getConnectionPath()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setConnectionPath() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setConnectionPath");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Returns performance statistics for the socket
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:         @code{.java}
java/org/qore/lang/HTTPClient.java:    Map<String, Object> h = httpclient.getUsageInfo();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return a hash with the following keys:
java/org/qore/lang/HTTPClient.java:        - \c "bytes_sent": an integer giving the total amount of bytes sent
java/org/qore/lang/HTTPClient.java:        - \c "bytes_recv": an integer giving the total amount of bytes received
java/org/qore/lang/HTTPClient.java:        - \c "us_sent": an integer giving the total number of microseconds spent sending data
java/org/qore/lang/HTTPClient.java:        - \c "us_recv": an integer giving the total number of microseconds spent receiving data
java/org/qore/lang/HTTPClient.java:        - \c "arg": (only if warning values have been set with @ref Qore::HTTPClient::setWarningQueue() "HTTPClient::setWarningQueue()") the optional argument for warning hashes
java/org/qore/lang/HTTPClient.java:        - \c "timeout": (only if warning values have been set with @ref Qore::HTTPClient::setWarningQueue() "HTTPClient::setWarningQueue()") the warning timeout in microseconds
java/org/qore/lang/HTTPClient.java:        - \c "min_throughput": (only if warning values have been set with @ref Qore::HTTPClient::setWarningQueue() "HTTPClient::setWarningQueue()") the minimum warning throughput in bytes/sec
java/org/qore/lang/HTTPClient.java:        @since Qore 0.8.9
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::clearStats()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/HTTPClient.java:    public HashMap<String, Object> getUsageInfo() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (HashMap<String, Object>)obj.callMethod("getUsageInfo");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! Clears performance statistics
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:         @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.clearStats();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @since Qore 0.8.9
java/org/qore/lang/HTTPClient.java:        @see HTTPClient::getUsageInfo()
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void clearStats() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("clearStats");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! temporarily disables implicit reconnections; must be called when the server is already connected
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:         @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.connect();
java/org/qore/lang/HTTPClient.java:    httpclient.setPersistent();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        The persistent flag is automatically reset to @ref false whenever the connection is closed; it must be called manually for every connection to turn off implicit reconnections.
java/org/qore/lang/HTTPClient.java:        To turn off the persistent flag manually, call @ref HTTPClient::disconnect()
java/org/qore/lang/HTTPClient.java:        @since Qore 0.8.10
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public void setPersistent() throws Throwable {
java/org/qore/lang/HTTPClient.java:        obj.callMethod("setPersistent");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! set the error passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setErrorPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param set if true then HTTP status codes indicating errors will not cause an
java/org/qore/lang/HTTPClient.java:        \c HTTP-CLIENT-RECEIVE-ERROR exception to be raised, rather such responses will be passed through to the caller
java/org/qore/lang/HTTPClient.java:        like any other response
java/org/qore/lang/HTTPClient.java:        @return the old \c error_passthru value
java/org/qore/lang/HTTPClient.java:        If true then HTTP status codes indicating errors will not cause an
java/org/qore/lang/HTTPClient.java:        \c HTTP-CLIENT-RECEIVE-ERROR exception to be raised, rather such responses will be passed through to the caller
java/org/qore/lang/HTTPClient.java:        like any other response.
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean setErrorPassthru(boolean set) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("setErrorPassthru", set);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! set the error passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setErrorPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the old \c error_passthru value
java/org/qore/lang/HTTPClient.java:        If true then HTTP status codes indicating errors will not cause an
java/org/qore/lang/HTTPClient.java:        \c HTTP-CLIENT-RECEIVE-ERROR exception to be raised, rather such responses will be passed through to the caller
java/org/qore/lang/HTTPClient.java:        like any other response.
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean setErrorPassthru() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("setErrorPassthru");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! get the error passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    boolean b = httpclient.getErrorPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the current \c error_passthru value
java/org/qore/lang/HTTPClient.java:        If true then HTTP status codes indicating errors will not cause an
java/org/qore/lang/HTTPClient.java:        \c HTTP-CLIENT-RECEIVE-ERROR exception to be raised, rather such responses will be passed through to the caller
java/org/qore/lang/HTTPClient.java:        like any other response.
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean getErrorPassthru() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("getErrorPassthru");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! set the redirect passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setRedirectPassthru(true);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param set if true then redirect messages will be passed to the caller instead of proceessed
java/org/qore/lang/HTTPClient.java:        @return the old \c reddirect_passthru value
java/org/qore/lang/HTTPClient.java:        If true then redirect messages will be passed to the callers instead of proceessed
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean setRedirectPassthru(boolean set) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("setRedirectPassthru", set);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! set the redirect passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setRedirectPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the old \c reddirect_passthru value
java/org/qore/lang/HTTPClient.java:        If true then redirect messages will be passed to the callers instead of proceessed
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean setRedirectPassthru() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("setRedirectPassthru");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! get the redirect passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    boolean b = httpclient.getRedirectPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the current \c redirect_passthru value
java/org/qore/lang/HTTPClient.java:        If true then redirect messages will be passed to the caller instead of proceessed
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean getRedirectPassthru() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("getRedirectPassthru");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! set the encoding passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setEncodingPassthru(true);
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @param set if true then message bodies received with known content encodings are not decoded but
java/org/qore/lang/HTTPClient.java:        rather passed through as-is
java/org/qore/lang/HTTPClient.java:        @return the old \c encoding_passthru value
java/org/qore/lang/HTTPClient.java:        If true then message bodies received with known content encodings are not decoded but
java/org/qore/lang/HTTPClient.java:        rather passed through as-is
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean setEncodingPassthru(boolean set) throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("setEncodingPassthru", set);
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! set the encoding passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    httpclient.setEncodingPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the old \c encoding_passthru value
java/org/qore/lang/HTTPClient.java:        If true then message bodies received with known content encodings are not decoded but
java/org/qore/lang/HTTPClient.java:        rather passed through as-is
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean setEncodingPassthru() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("setEncodingPassthru");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! get the encoding passthru status
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    bool b = httpclient.getErrorPassthru();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the current \c encoding_passthru value
java/org/qore/lang/HTTPClient.java:        If true then message bodies received with known content encodings are not decoded but
java/org/qore/lang/HTTPClient.java:        rather passed through as-is
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public boolean getEncodingPassthru() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (boolean)obj.callMethod("getEncodingPassthru");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:    //! returns the \c Host header value for this object
java/org/qore/lang/HTTPClient.java:    /** @par Example:
java/org/qore/lang/HTTPClient.java:        @code{.java}
java/org/qore/lang/HTTPClient.java:    string host = httpclient.getHostHeaderValue();
java/org/qore/lang/HTTPClient.java:        @endcode
java/org/qore/lang/HTTPClient.java:        @return the \c Host header value for this object
java/org/qore/lang/HTTPClient.java:        @since %Qore 0.9.3
java/org/qore/lang/HTTPClient.java:    */
java/org/qore/lang/HTTPClient.java:    public String getHostHeaderValue() throws Throwable {
java/org/qore/lang/HTTPClient.java:        return (String)obj.callMethod("getHostHeaderValue");
java/org/qore/lang/HTTPClient.java:    }
java/org/qore/lang/HTTPClient.java:}
java/org/qore/lang/sqlutil/AbstractTable.java:/** Java wrapper for the %Qore AbstractTable class
java/org/qore/lang/sqlutil/AbstractTable.java: *
java/org/qore/lang/sqlutil/AbstractTable.java: */
java/org/qore/lang/sqlutil/AbstractTable.java:package org.qore.lang.sqlutil;
java/org/qore/lang/sqlutil/AbstractTable.java:// java imports
java/org/qore/lang/sqlutil/AbstractTable.java:import java.util.Map;
java/org/qore/lang/sqlutil/AbstractTable.java:import java.util.HashMap;
java/org/qore/lang/sqlutil/AbstractTable.java:import java.util.Collections;
java/org/qore/lang/sqlutil/AbstractTable.java:// jni module imports
java/org/qore/lang/sqlutil/AbstractTable.java:import org.qore.jni.QoreObject;
java/org/qore/lang/sqlutil/AbstractTable.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/sqlutil/AbstractTable.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/sqlutil/AbstractTable.java:// Qore imports
java/org/qore/lang/sqlutil/AbstractTable.java:import org.qore.lang.sqlutil.AbstractSqlUtilBase;
java/org/qore/lang/sqlutil/AbstractTable.java:import org.qore.lang.AbstractSQLStatement;
java/org/qore/lang/sqlutil/AbstractTable.java://! Java wrapper for the @ref AbstractTable class in %Qore
java/org/qore/lang/sqlutil/AbstractTable.java:/**
java/org/qore/lang/sqlutil/AbstractTable.java:    @section CallbackOptions Callback Options
java/org/qore/lang/sqlutil/AbstractTable.java:    The following keys can be set for this option:
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c info_callback: see @ref info_callback
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c sql_callback: see @ref sql_callback
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c sql_callback_executed: see @ref sql_callback_executed
java/org/qore/lang/sqlutil/AbstractTable.java:    @section CreationOptions Creation Options
java/org/qore/lang/sqlutil/AbstractTable.java:    This option is comprised of @ref CallbackOptions plus the following keys:
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c replace: (coolean) if true and supported by the underlying db driver, \c "create or replace" text is used
java/org/qore/lang/sqlutil/AbstractTable.java:      when creating objects
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c table_cache: (@ref SqlUtil::Tables "Tables") an optional table cache for maintaining cached tables and
java/org/qore/lang/sqlutil/AbstractTable.java:      foreign key relationships between tables
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c data_tablespace: (String) a string giving the data tablespace to use for tables
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c index_tablespace: (String) a string giving the index tablespace to use for indexes
java/org/qore/lang/sqlutil/AbstractTable.java:    @section IndexOptions Index Options
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c index_tablespace: (String) a string giving the index tablespace to use for indexes
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c replace: (boolean) if true and supported by the underlying db driver
java/org/qore/lang/sqlutil/AbstractTable.java:      "create or replace" text is used when creating objects
java/org/qore/lang/sqlutil/AbstractTable.java:    @section TableCreationOptions Table Creation Options
java/org/qore/lang/sqlutil/AbstractTable.java:    currently this option is a combination of @ref IndexOptions and @ref CreationOptions plus the following:
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c omit: a list pf attributes to omit; possible values are: \c indexes, \c foreign_constraints, \c triggers
java/org/qore/lang/sqlutil/AbstractTable.java:    @section AlignTableOptions Align Table Options
java/org/qore/lang/sqlutil/AbstractTable.java:    Currently this option is a combination of @ref TableCreationOptions and the following options:
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c column_map: (Map) a hash for automatically renaming columns; if the source name (key) exists and
java/org/qore/lang/sqlutil/AbstractTable.java:      the target name (value) does not exist, then the source column is automatically renamed
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c index_map: (Map) a hash for automatically renaming indexes; if the source name (key) exists and
java/org/qore/lang/sqlutil/AbstractTable.java:      the target name (value) does not exist, then the source index is automatically renamed
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c constraint_map: (Map) a hash for automatically renaming constraints; if the source name (key)
java/org/qore/lang/sqlutil/AbstractTable.java:      exists and the target name (value) does not exist, then the source constraint is automatically renamed
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c trigger_map: (Map) a hash for automatically renaming triggers; if the source name (key) exists and
java/org/qore/lang/sqlutil/AbstractTable.java:      the target name (value) does not exist, then the source trigger is automatically renamed
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c db_table_cache: (@ref SqlUtil::Tables "Tables") an optional table cache for maintaining tables in the
java/org/qore/lang/sqlutil/AbstractTable.java:      database and foreign key relationships between tables
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c force: (boolean) if true and supported by the driver and object, any objects dropped will be
java/org/qore/lang/sqlutil/AbstractTable.java:      dropped with \c FORCE or \c CASCADE options
java/org/qore/lang/sqlutil/AbstractTable.java:    @section InsertOptions Insert Options
java/org/qore/lang/sqlutil/AbstractTable.java:    In addition to any @ref SqlDataCallbackOptions, the following keys can be set for this option:
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c returning: a list having elements of one of the two following types:
java/org/qore/lang/sqlutil/AbstractTable.java:        - String: column names to return the value inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - Map: a hash having the following keys:
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "key": (required) the column name to return
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "type": (optional) the data type for the output placeholder buffer (ex: @ref Qore::Type::Number "number")
java/org/qore/lang/sqlutil/AbstractTable.java:    @note using \c "returning" with a database that does not support this clause will cause an exception to be thrown;
java/org/qore/lang/sqlutil/AbstractTable.java:    see @ref AbstractTable.hasReturning()
java/org/qore/lang/sqlutil/AbstractTable.java:    @section UpsertOptions Upsert Options
java/org/qore/lang/sqlutil/AbstractTable.java:    The following keys can be set for upsert options:
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c commit_block: the number of changes made before an automatic commit is made for upsert methods that perform
java/org/qore/lang/sqlutil/AbstractTable.java:      commits
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c delete_others: if this option is true, then a hash of primary key values in the input data
java/org/qore/lang/sqlutil/AbstractTable.java:      is built as the input data is iterated.  After iterating, if the row count of the table and the input data
java/org/qore/lang/sqlutil/AbstractTable.java:      matches, then nothing more is done, otherwise, every row of the table is iterated and compared to the primary
java/org/qore/lang/sqlutil/AbstractTable.java:      key hash; if a row does not match a primary key value, then it is deleted.  This operation allows tables to be
java/org/qore/lang/sqlutil/AbstractTable.java:      completely synchronized by removing rows in the target table not present in the source table.  This operation is
java/org/qore/lang/sqlutil/AbstractTable.java:      expensive for large data sets.
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c info_callback: see @ref upsert_info_callback
java/org/qore/lang/sqlutil/AbstractTable.java:    - \c omit_update: allows for an asymmetrical upsert where a set of column values is inserted, but a smaller set is
java/org/qore/lang/sqlutil/AbstractTable.java:      updated in case the unique key values are present in the target table; the value of this key should be set to
java/org/qore/lang/sqlutil/AbstractTable.java:      the columns to omit in the update clause
java/org/qore/lang/sqlutil/AbstractTable.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/sqlutil/AbstractTable.java:    <tt>import qoremod.SqlUtil.AbstractTable;</tt>
java/org/qore/lang/sqlutil/AbstractTable.java:*/
java/org/qore/lang/sqlutil/AbstractTable.java:@Deprecated
java/org/qore/lang/sqlutil/AbstractTable.java:public class AbstractTable extends AbstractSqlUtilBase {
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @defgroup upsert_options Upsert Strategy Codes
java/org/qore/lang/sqlutil/AbstractTable.java:        These options are used with:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref upsert()
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref upsertFromSelect()
java/org/qore/lang/sqlutil/AbstractTable.java:        to specify the upsert strategy when synchronizing table data
java/org/qore/lang/sqlutil/AbstractTable.java:        */
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@{
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Upsert option: insert first, if the insert fails, then update
java/org/qore/lang/sqlutil/AbstractTable.java:    /** with this option an insert is attempted, and if it fails due to a duplicate row, then an update is made unconditionally; with
java/org/qore/lang/sqlutil/AbstractTable.java:        this upsert strategy, the following row result codes are possible:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Verified (the only value returned by certain drivers with optimized upsert implementations)
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UpsertInsertFirst = 1;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Upsert option: update first, if the update fails, then insert
java/org/qore/lang/sqlutil/AbstractTable.java:    /** with this option an update is attempted, and if it fails due to a missing row, then an insert is performed; with
java/org/qore/lang/sqlutil/AbstractTable.java:        this upsert strategy, the following row result codes are possible:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Verified (the only value returned by certain drivers with optimized upsert implementations)
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UpsertUpdateFirst = 2;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Upsert option: select first, if the row is unchanged, do nothing, if it doesn't exist, insert, otherwise update
java/org/qore/lang/sqlutil/AbstractTable.java:    /** with this option the row is selected, if it doesn't exist, an insert is made, and an update is made only if the
java/org/qore/lang/sqlutil/AbstractTable.java:        values are different; with this upsert strategy, the following row result codes are possible:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Updated
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Unchanged
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UpsertSelectFirst = 3;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Upsert option: if the target table is empty, use @ref UpsertInsertFirst, otherwise use @ref UpsertUpdateFirst
java/org/qore/lang/sqlutil/AbstractTable.java:    /** With this upsert strategy, the following row result codes are possible:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Verified (the only value returned by certain drivers with optimized upsert implementations)
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UpsertAuto = 4;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Upsert option: insert if the row does not exist, otherwise ignore
java/org/qore/lang/sqlutil/AbstractTable.java:    /** With this upsert strategy, the following row result codes are possible:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Unchanged
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UpsertInsertOnly = 5;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Upsert option: update if the row exists, otherwise ignore
java/org/qore/lang/sqlutil/AbstractTable.java:    /** With this upsert strategy, the following row result codes are possible:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Verified
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref UR_Unchanged
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UpsertUpdateOnly = 6;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! hash mapping upsert strategy codes to a text description
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @see @ref UpsertStrategyDescriptionMap for a reverse mapping
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final Map<Integer, String> UpsertStrategyMap = Collections.unmodifiableMap(new HashMap<Integer, String>() {
java/org/qore/lang/sqlutil/AbstractTable.java:        {
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UpsertInsertFirst, "UpsertInsertFirst");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UpsertUpdateFirst, "UpsertUpdateFirst");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UpsertSelectFirst, "UpsertSelectFirst");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UpsertAuto, "UpsertAuto");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UpsertInsertOnly, "UpsertInsertOnly");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UpsertUpdateOnly, "UpsertUpdateOnly");
java/org/qore/lang/sqlutil/AbstractTable.java:        }
java/org/qore/lang/sqlutil/AbstractTable.java:    });
java/org/qore/lang/sqlutil/AbstractTable.java:    //! hash mapping upsert strategy descriptions to upsert strategy codes
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @see @ref UpsertStrategyMap for a reverse mapping
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final Map<String, Integer> UpsertStrategyDescriptionMap = Collections.unmodifiableMap(new HashMap<String, Integer>() {
java/org/qore/lang/sqlutil/AbstractTable.java:        {
java/org/qore/lang/sqlutil/AbstractTable.java:            put("UpsertInsertFirst", UpsertInsertFirst);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("UpsertUpdateFirst", UpsertUpdateFirst);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("UpsertSelectFirst", UpsertSelectFirst);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("UpsertAuto", UpsertAuto);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("UpsertInsertOnly", UpsertInsertOnly);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("UpsertUpdateOnly", UpsertUpdateOnly);
java/org/qore/lang/sqlutil/AbstractTable.java:        }
java/org/qore/lang/sqlutil/AbstractTable.java:    });
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@}
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @defgroup java_sql_cop_trunc_date_enum cop_trunc_date() formats
java/org/qore/lang/sqlutil/AbstractTable.java:    These are formatting constant which can be used as @ref cop_trunc_date() formatting arguments.
java/org/qore/lang/sqlutil/AbstractTable.java:    Input date used in the table below: 2017-04-20 14:27:34
java/org/qore/lang/sqlutil/AbstractTable.java:    |!Constant|!Meaning|!Example
java/org/qore/lang/sqlutil/AbstractTable.java:    |@ref DT_YEAR|Truncate date up to year|2017-01-01 00:00:00
java/org/qore/lang/sqlutil/AbstractTable.java:    |@ref DT_MONTH|Truncate date up to month|2017-04-01 00:00:00
java/org/qore/lang/sqlutil/AbstractTable.java:    |@ref DT_DAY|Truncate date up to day|2017-01-20 00:00:00
java/org/qore/lang/sqlutil/AbstractTable.java:    |@ref DT_HOUR|Truncate date up to hour|2017-01-20 14:00:00
java/org/qore/lang/sqlutil/AbstractTable.java:    |@ref DT_MINUTE|Truncate date up to minute|2017-01-20 14:27:00
java/org/qore/lang/sqlutil/AbstractTable.java:    |@ref DT_SECOND|Truncate date up to second|2017-01-20 14:27:34
java/org/qore/lang/sqlutil/AbstractTable.java:    @note Oracle: using \c DT_SECOND for \c DATE type does not make sense as the \c DATE resolution
java/org/qore/lang/sqlutil/AbstractTable.java:          is up to seconds out of the box. On the other side \c TINESTAMP is truncated up to seconds
java/org/qore/lang/sqlutil/AbstractTable.java:          with this operator.
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@{
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Format unit: year
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final String DT_YEAR = "Y";
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Format unit: month
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final String DT_MONTH = "M";
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Format unit: day
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final String DT_DAY = "D";
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Format unit: hour
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final String DT_HOUR = "H";
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Format unit: minute
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final String DT_MINUTE = "m";
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Format unit: hour
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final String DT_SECOND = "S";
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@}
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @defgroup sql_cop_funcs SQL Column Operator Functions
java/org/qore/lang/sqlutil/AbstractTable.java:        These are static methods that can be used in the \c "columns" argument for select statements:
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_append(): append a string to the output of a column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_as(): rename columns
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_avg(): return the averge value for the given column when grouping
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_cast(): convert column value into another datatype
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_coalesce(): returns the first non-NULL value in the given columns
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_distinct(): add \c DISTINCT to the column name
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_length(): return the length of the given text column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_lower(): return a column in lower case
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_max(): return the maximum value for the given column when grouping
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_min(): return the minimum value for the given column when grouping
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_over(): return a hash for the \c "over" operator for windowing methods
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_prepend(): prepend a string to the output of a column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_seq(): increments the sequence and returns the next value
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_seq_currval(): returns the current value of the given sequence without changing the sequence
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_substr(): returns a substring of a text column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_sum(): return the sum of all values for the given column when grouping
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_upper(): return a column in upper case
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_value(): return a constant value (SQL literal) in a column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_year(): return the year of the given date column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_year_day(): return the year to day value of the given date column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_year_hour(): return the year to hour value of the given date column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_year_month(): return the year and month value of the given date column
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_trunc_date(): return truncated date regarding the mask
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_cume_dist(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_dense_rank(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_first_value(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_last_value(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_ntile(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_percent_rank(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_rank(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        - @ref cop_row_number(): analytic/window method
java/org/qore/lang/sqlutil/AbstractTable.java:        Column operator methods can be nested as in the following example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("permission_type", "USER");
java/org/qore/lang/sqlutil/AbstractTable.java:    put("limit", 100);
java/org/qore/lang/sqlutil/AbstractTable.java:    put("offset", 200);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(AbstractTable.cop_lower("permission_type"), "perm"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@{
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @param cop the column operator (one of @ref sql_cops)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column name
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the argument to the operator
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Normally this method is not called directly, but rather by the other column operator methods
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> make_cop(String cop, Object column, Object arg) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("make_cop", cop, column, arg);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @param cop the column operator (one of @ref sql_cops)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column name
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Normally this method is not called directly, but rather by the other column operator methods
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> make_cop(String cop, Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("make_cop", cop, column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "as" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("permission_type", "USER");
java/org/qore/lang/sqlutil/AbstractTable.java:    put("limit", 100);
java/org/qore/lang/sqlutil/AbstractTable.java:    put("offset", 200);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(AbstractTable.cop_lower("permission_type"), "perm"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins) or any other column "cop_..." method
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the new name of the output column
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see cop_value for SQL literals handling
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_as(Object column, String arg) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_as", column, arg);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "cast" operator with the given argument(s)
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> ch = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("id", AbstractTable.cop_cast("id", "string"));
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", ch);
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins) or any other column "cop_..." method
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the new datatype to cast the column value(s) to
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg1 optional, type dependent, specification (e.g. size or precision)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg2 optional, type dependent, specification (e.g. scale)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see cop_value for SQL literals handling
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_cast(Object column, String arg, Object arg1, Object arg2) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_cast", column, arg, arg1, arg2);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "cast" operator with the given argument(s)
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> ch = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("id", AbstractTable.cop_cast("id", "string"));
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", ch);
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins) or any other column "cop_..." method
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the new datatype to cast the column value(s) to
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg1 optional, type dependent, specification (e.g. size or precision)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see cop_value for SQL literals handling
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_cast(Object column, String arg, Object arg1) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_cast", column, arg, arg1);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "cast" operator with the given argument(s)
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> ch = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("id", AbstractTable.cop_cast("id", "string"));
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", ch);
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins) or any other column "cop_..." method
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the new datatype to cast the column value(s) to
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see cop_value for SQL literals handling
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_cast(Object column, String arg) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_cast", column, arg);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "prepend" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_prepend("name", "migrated-"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the text to prepend to the row values in the output column
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_prepend(Object column, String arg) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_prepend", column, arg);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "append" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_append("name", "-migrated"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the text to append (ie concatenate) to the row values in the output column
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_append(Object column, String arg) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_append", column, arg);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "value" (literal) operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_value(100));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param arg the value to be returned in the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        SQL literals can be useful in some cases - as dummy values for select
java/org/qore/lang/sqlutil/AbstractTable.java:        statements where there is exact columns required, unions, expected values
java/org/qore/lang/sqlutil/AbstractTable.java:        for \c arc.insertFromIterator(src.getStatement(sh))
java/org/qore/lang/sqlutil/AbstractTable.java:        "insert as select", etc.
java/org/qore/lang/sqlutil/AbstractTable.java:        The term literal refers to a fixed data value. For example, 123, 'foobar' etc.
java/org/qore/lang/sqlutil/AbstractTable.java:        Mapping of Qore values to literals:
java/org/qore/lang/sqlutil/AbstractTable.java:        |!Java Type|!SQL Type|!Qore Example|!SQL interpretation
java/org/qore/lang/sqlutil/AbstractTable.java:        |int|NUMBER as it is|\c 123|\c 123
java/org/qore/lang/sqlutil/AbstractTable.java:        |float|NUMBER as it is|\c 12.3|\c 12.3
java/org/qore/lang/sqlutil/AbstractTable.java:        |\c java.math.BigDecimal|NUMBER as it is|\c 1.2n|\c 1.2
java/org/qore/lang/sqlutil/AbstractTable.java:        |\c java.time.ZonedDateTime|String representation of the date using DB native implementation like TO_TIMESTAMP for Oracle.|\c now()|\c to_timestamp('20150421104825000000', 'YYYYMMDDHH24MISSFF6')
java/org/qore/lang/sqlutil/AbstractTable.java:        |boolean|Internal representation of the bool value using DB native implementation|\c True|\c 1
java/org/qore/lang/sqlutil/AbstractTable.java:        |String|Standard and escaped string literal. No additional literal methods like Oracle's <tt>nq{foobar}</tt> are supported now|\c "foo bar"|\c 'foo bar'
java/org/qore/lang/sqlutil/AbstractTable.java:        |\c null|Direct null literal|\c NULL|\c null
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Passing an existing SQL method name as a value to the cop_value() method
java/org/qore/lang/sqlutil/AbstractTable.java:                does not result in method call. The string value is escaped as it is.
java/org/qore/lang/sqlutil/AbstractTable.java:                Example: sysdate becomes 'sysdate'. See example below.
java/org/qore/lang/sqlutil/AbstractTable.java:        The most useful cop_value() usage is with cooperation of cop_as() which allows
java/org/qore/lang/sqlutil/AbstractTable.java:        human readable column name aliases.
java/org/qore/lang/sqlutil/AbstractTable.java:        @warning Using cop_value() without cop_as() can result in errors
java/org/qore/lang/sqlutil/AbstractTable.java:                    depending on the DB backend. For example Oracle's use of <tt>cop_value(1), cop_value(True)</tt>
java/org/qore/lang/sqlutil/AbstractTable.java:                    ends with <tt>ORA-00918: column ambiguously defined</tt>
java/org/qore/lang/sqlutil/AbstractTable.java:                    because both values are interpreted as 1 in the resulting SQL.
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_value(Object arg) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_value", arg);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "upper" operator with the given argument; returns a column value in upper case
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_upper("name"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_upper(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_upper", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "lower" operator with the given argument; returns a column value in lower case
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_lower("name"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_lower(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_lower", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "distinct" operator with the given argument; returns distinct column values
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_distinct("name"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_distinct(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_distinct", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "min" operator; returns minimum column values
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_min("id"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_min(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_min", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "max" operator; returns maximum column values
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_max("id"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_max(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_max", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "avg" operator; returns average column values
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_avg("quantity"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_avg(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_avg", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "sum" operator; returns the total sum of a numeric column.
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_sum("quantity"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_sum(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_sum", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "count" operator; returns row counts
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_count());
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_count(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_count", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "count" operator; returns row counts
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_count());
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_count() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_count");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "over" clause
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(AbstractTable.cop_over(AbstractTable.cop_max("qty"), "account_id"), "max_qty_per_account")));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_over(Object column, String partitionby, String orderby) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_over", column, partitionby, orderby);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "over" clause
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(AbstractTable.cop_over(AbstractTable.cop_max("qty"), "account_id"), "max_qty_per_account")));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_over(Object column, String partitionby) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_over", column, partitionby);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "over" clause
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(AbstractTable.cop_over(AbstractTable.cop_max("qty"), "account_id"), "max_qty_per_account")));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_over(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_over", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "-" operator with the given arguments
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_minus("complete_count", "error_count"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column1 the column specification for the first argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column2 the column specification for the second argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_minus(Object column1, Object column2) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_minus", column1, column2);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "+" operator with the given arguments
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_plus("complete_count", "error_count"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column1 the column specification for the first argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column2 the column specification for the second argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_plus(Object column1, Object column2) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_plus", column1, column2);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "/" operator with the given arguments
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_divide("complete_count", "error_count"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column1 the column specification for the first argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column2 the column specification for the second argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_divide(Object column1, Object column2) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_divide", column1, column2);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "*" operator with the given arguments
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_multiply("complete_count", "error_count"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column1 the column specification for the first argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column2 the column specification for the second argument (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_multiply(Object column1, Object column2) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_multiply", column1, column2);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "year" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_year("error_time"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_year(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_year", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "year_month" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_year_month("error_time"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_year_month(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_year_month", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "year_day" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_year_day("error_time"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_year_day(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_year_day", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "year_hour" operator with the given argument
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_year_hour("error_time"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_year_hour(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_year_hour", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "seq" operator with the given argument giving the sequence name whose value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_seq("xid", "xis"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param seq the name of the sequence whose value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @param as an optional column name that should be returned for the sequence value (so that @ref cop_as() need not be used)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_seq(String seq, String as) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_seq", seq, as);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "seq" operator with the given argument giving the sequence name whose value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_seq("xid", "xis"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param seq the name of the sequence whose value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_seq(String seq) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_seq", seq);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "seq_currval" operator with the given argument giving the sequence name whose current value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_seq_currval("xid", "xis"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param seq the name of the sequence whose current value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @param as an optional column name that should be returned for the sequence value (so that @ref cop_as() need not be used)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_seq_currval(String seq, String as) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_seq_currval", seq, as);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "seq_currval" operator with the given argument giving the sequence name whose current value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_seq_currval("xid", "xis"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param seq the name of the sequence whose current value should be returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_seq_currval(String seq) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_seq_currval", seq);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "coalesce" operator with the given column arguments; the first non-NULL column value will be returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_colesce("first_name", "last_name"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param col1 the name or column operator hash for the first value
java/org/qore/lang/sqlutil/AbstractTable.java:        @param col2 the name or column operator hash for the second value, additional values should follow this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COALESCE-ERROR the arguments must be either string column designators or column operator hashes
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_coalesce(Object col1, Object col2) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_coalesce", col1, col2);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "coalesce" operator with the given column arguments; the first non-NULL column value will be returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_colesce("first_name", "last_name"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param col1 the name or column operator hash for the first value
java/org/qore/lang/sqlutil/AbstractTable.java:        @param col2 the name or column operator hash for the second value, additional values should follow this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param args other column names or column operator hashes for subsequent values
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COALESCE-ERROR the arguments must be either string column designators or column operator hashes
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_coalesce(Object col1, Object col2, Object... args) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        Object[] new_args = new Object[args.length + 2];
java/org/qore/lang/sqlutil/AbstractTable.java:        new_args[0] = col1;
java/org/qore/lang/sqlutil/AbstractTable.java:        new_args[1] = col2;
java/org/qore/lang/sqlutil/AbstractTable.java:        System.arraycopy(args, 0, new_args, 2, args.length);
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunctionArgs("cop_coalesce", new_args);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "substr" operator with the given arguments; returns a substring of a column value
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_substr("name", 1, 1));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param start position where the substring starts
java/org/qore/lang/sqlutil/AbstractTable.java:        @param count length of the substring in characters
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_substr(Object column, int start, int count) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_substr", column, start, count);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "substr" operator with the given arguments; returns a substring of a column value
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_substr("name", 1, 1));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param start position where the substring starts
java/org/qore/lang/sqlutil/AbstractTable.java:        @param count length of the substring in characters
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_substr(Object column, long start, long count) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_substr", column, start, count);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "substr" operator with the given arguments; returns a substring of a column value
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_substr("name", 1));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param start position where the substring starts
java/org/qore/lang/sqlutil/AbstractTable.java:        @param count length of the substring in characters
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_substr(Object column, int start) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_substr", column, start);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "substr" operator with the given arguments; returns a substring of a column value
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_substr("name", 1));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param start position where the substring starts
java/org/qore/lang/sqlutil/AbstractTable.java:        @param count length of the substring in characters
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_substr(Object column, long start) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_substr", column, start);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a @ref ColumnOperatorInfo hash for the \c "len" operator with the given argument; returns the length of the given text field
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_length("product_code"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a @ref ColumnOperatorInfo hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.3.1
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_length(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_length", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Truncates a date column or value regarding the given mask. The resulting value remains Qore::date (no conversion to eg. string)
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_trunc_date("mydate", AbstractTable.DT_MINUTE));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// input: 2017-02-01 14:22:37
java/org/qore/lang/sqlutil/AbstractTable.java:// output 2017-02-01 14:22:00
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param column the column specification for the column (String name or dot notation for use in joins)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param mask the string with one of specified values rederenced in @ref sql_cop_trunc_date_enum
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a column operator description hash corresponding to the arguments for use in the @ref select_option_columns "columns" argument of a @ref select_option_hash "select option hash"
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_trunc_date(Object column, String mask) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_trunc_date", column, mask);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: relative rank of the current row
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_cume_dist(), "row_type", "id"), "cume_dist"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:// select cume_dist() over (partition by row_type order by id) as "cume_dist" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return relative rank of the current row: (number of rows preceding or peer with current row) / (total rows)
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_cume_dist() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_cume_dist");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: rank of the current row without gaps
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_dense_rank(), "row_type", "id"), "dense_rank"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select dense_rank() over (partition by row_type order by id) as "dense_rank" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return rank of the current row without gaps; this method counts peer groups
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_dense_rank() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_dense_rank");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: value evaluated at the row that is the first row of the window frame
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_first_value("row_value"), "row_type", "id"), "first_value"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select first_value(row_value) over (partition by row_type order by id) as "first_value" from test_analytic_methods where test = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return returns value evaluated at the row that is the first row of the window frame
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_first_value(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_first_value", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: value evaluated at the row that is the last row of the window frame
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_last_value("row_value"), "row_type", "id"), "last_value"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select last_value(row_value) over (partition by row_type order by id) as "last_value" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return returns value evaluated at the row that is the last row of the window frame
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_last_value(Object column) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_last_value", column);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: integer ranging from 1 to the argument value, dividing the partition as equally as possible
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_ntile(10), "row_type", "id"), "ntile"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select ntile(10) over (partition by row_type order by id) as "ntile" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param value an integer value used as count of sp;it buckets
java/org/qore/lang/sqlutil/AbstractTable.java:        @return integer ranging from 1 to the argument value, dividing the partition as equally as possible
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_ntile(int value) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_ntile", value);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: integer ranging from 1 to the argument value, dividing the partition as equally as possible
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_ntile(10), "row_type", "id"), "ntile"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select ntile(10) over (partition by row_type order by id) as "ntile" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param value an integer value used as count of sp;it buckets
java/org/qore/lang/sqlutil/AbstractTable.java:        @return integer ranging from 1 to the argument value, dividing the partition as equally as possible
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_ntile(long value) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_ntile", value);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: relative rank of the current row
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_percent_rank(), "row_type", "id"), "percent_rank"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select percent_rank() over (partition by row_type order by id) as "percent_rank" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return relative rank of the current row: (rank - 1) / (total rows - 1)
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_percent_rank() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_percent_rank");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: rank of the current row with gaps
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_rank(), "row_type", "id"), "rank"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select rank() over (partition by row_type order by id) as "rank" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return rank of the current row with gaps; same as row_number of its first peer
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_rank() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_rank");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! Analytic/window method: number of the current row within its partition, counting from 1
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> wh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("type", "user");
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> sh = new HashMap<String, Object>() {
java/org/qore/lang/sqlutil/AbstractTable.java:    put("columns", AbstractTable.cop_as(cop_over(cop_row_number(), "row_type", "id"), "row_number"));
java/org/qore/lang/sqlutil/AbstractTable.java:    put("where", wh);
java/org/qore/lang/sqlutil/AbstractTable.java:};
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> rows = t.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:// rendered SQL statement
java/org/qore/lang/sqlutil/AbstractTable.java:select row_number() over (partition by row_type order by id) as "row_number" from test_analytic_methods where type = 'user';
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Analytic/window method. Must be used with @ref cop_over() with \c partitionby and \c orderby arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @note MySQL DB family: This analytic method is available only in MariaDB 10.2 and later only.
java/org/qore/lang/sqlutil/AbstractTable.java:        @return number of the current row within its partition, counting from 1
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.4.0
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public static HashMap<String, Object> cop_row_number() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)QoreJavaApi.callFunction("cop_row_number");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@}
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @defgroup upsert_results Upsert Result Codes
java/org/qore/lang/sqlutil/AbstractTable.java:        @see @ref UpsertResultMap and @ref UpsertResultDescriptionMap
java/org/qore/lang/sqlutil/AbstractTable.java:        */
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@{
java/org/qore/lang/sqlutil/AbstractTable.java:    //! row was inserted
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UR_Inserted = 1;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! row was updated unconditionally (not returned with @ref UpsertSelectFirst)
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UR_Verified = 2;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! row was updated because it was different (only possible with @ref UpsertSelectFirst)
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UR_Updated = 3;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! row was unchanged (only possible with @ref UpsertSelectFirst, @ref UpsertInsertOnly, and @ref UpsertUpdateOnly)
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UR_Unchanged = 4;
java/org/qore/lang/sqlutil/AbstractTable.java:    //! row was deleted (only possible with batch upsert methods such as @ref upsertFromIterator() where @ref UpsertOptions "upsert option" \c delete_others is true)
java/org/qore/lang/sqlutil/AbstractTable.java:    public static int UR_Deleted = 5;
java/org/qore/lang/sqlutil/AbstractTable.java:    ///@}
java/org/qore/lang/sqlutil/AbstractTable.java:    //! hash mapping upsert results to a description
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @see @ref UpsertResultDescriptionMap for a reverse mapping
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final Map<Integer, String> UpsertResultMap = Collections.unmodifiableMap(new HashMap<Integer, String>() {
java/org/qore/lang/sqlutil/AbstractTable.java:        {
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Inserted, "inserted");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Verified, "verified");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Updated, "updated");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Unchanged, "unchanged");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Deleted, "deleted");
java/org/qore/lang/sqlutil/AbstractTable.java:        }
java/org/qore/lang/sqlutil/AbstractTable.java:    });
java/org/qore/lang/sqlutil/AbstractTable.java:    //! hash mapping upsert descriptions to codes
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @see @ref UpsertResultMap for a reverse mapping
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final Map<String, Integer> UpsertResultDescriptionMap = Collections.unmodifiableMap(new HashMap<String, Integer>() {
java/org/qore/lang/sqlutil/AbstractTable.java:        {
java/org/qore/lang/sqlutil/AbstractTable.java:            put("inserted", UR_Inserted);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("verified", UR_Verified);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("updated", UR_Updated);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("unchanged", UR_Unchanged);
java/org/qore/lang/sqlutil/AbstractTable.java:            put("deleted", UR_Deleted);
java/org/qore/lang/sqlutil/AbstractTable.java:        }
java/org/qore/lang/sqlutil/AbstractTable.java:    });
java/org/qore/lang/sqlutil/AbstractTable.java:    //! maps upsert result codes to single letter symbols
java/org/qore/lang/sqlutil/AbstractTable.java:    public static final Map<Integer, String> UpsertResultLetterMap = Collections.unmodifiableMap(new HashMap<Integer, String>() {
java/org/qore/lang/sqlutil/AbstractTable.java:        {
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Inserted, "I");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Verified, "V");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Updated, "U");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Unchanged, ".");
java/org/qore/lang/sqlutil/AbstractTable.java:            put(UR_Deleted, "X");
java/org/qore/lang/sqlutil/AbstractTable.java:        }
java/org/qore/lang/sqlutil/AbstractTable.java:    });
java/org/qore/lang/sqlutil/AbstractTable.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractTable(QoreObject obj) {
java/org/qore/lang/sqlutil/AbstractTable.java:        super(obj);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the name of the table
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getName() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getName");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! finds a row in the table with the given primary key value; if no row matches the primary key value passed then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> row = table.find(id);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table has no primary key or the primary key has more than one column
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object> find(Object id) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("find", id);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! finds rows in the table with the given primary key values; if no row matches any primary key value passed then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object>[] rows = table.find(list);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param ids the list of primary key IDs to find; if the list is empty then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of hashes of rows matching the primary key IDs passed or null if no row matches any primary key value passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table has no primary key or the primary key has more than one column
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object>[] find(Object[] ids) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>[])obj.callMethod("find", (Object)ids);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! finds a row in the table with the given primary key value given as a hash; if no row matches the primary key value passed then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> row = table.find(row);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param row a hash giving the primary key value to find; other columns may also appear in the hash, however at least all columns of the primary key must be present
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash of the row value matching the primary key value passed or null if no row matches the primary key value passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table has no primary key or the the hash passed does not contain all columns of the primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @note a table with a primary key with a single column can also be used with this method; just pass a hash with one key
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object> find(Map<String, Object> row) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("find", row);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! finds a single row in the table that match the row condition passed; multiple rows may match, but only one row will be returned from the database; if no row matches the condition hash passed then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> row = table.findSingle(h);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cond a hash giving the column values to find; see @ref where_clauses for the format of this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash representing a single row in the table with the given column values; multiple rows may match, but only one row will be returned from the database; if no row matches the condition hash passed then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw WHERE-ERROR unknown operator or invalid arguments given in the cond hash for the where clause
java/org/qore/lang/sqlutil/AbstractTable.java:        @note this is equivalent to calling selectRow() with \c where = \c cond and \c limit = 1
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object> findSingle(Map<String, Object> cond) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("findSingle", cond);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! reeturns the first row in the table immediately; one and only one row will be returned from the database; if the table is empty, then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object> row = table.findSingle();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the first row in the table; if the table is empty, then null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @note this is equivalent to calling selectRow() with \c limit = 1
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object> findSingle() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("findSingle");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! finds all rows in the table with the given column values; a list of hashes is returned representing the rows returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object>[] rows = table.findAll(h);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cond a hash giving the column values to find; see @ref where_clauses for the format of this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of hashes is returned representing the rows returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw WHERE-ERROR unknown operator or invalid arguments given in the cond hash for the where clause
java/org/qore/lang/sqlutil/AbstractTable.java:        @note this is equivalent to calling selectRows() with \c where = \c cond
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object>[] findAll(Map<String, Object> cond) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>[])obj.callMethod("findAll", cond);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! finds all rows in the table with the given column values; a list of hashes is returned representing the rows returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:HashMap<String, Object>[] rows = table.findAll();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cond a hash giving the column values to find; see @ref where_clauses for the format of this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of hashes is returned representing the rows returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw WHERE-ERROR unknown operator or invalid arguments given in the cond hash for the where clause
java/org/qore/lang/sqlutil/AbstractTable.java:        @note this is equivalent to calling selectRows() with \c where = \c cond
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    HashMap<String, Object>[] findAll() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>[])obj.callMethod("findAll");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a descriptive string of the datasource (without the password) and the table name (with a possible qualifier for schema, etc)
java/org/qore/lang/sqlutil/AbstractTable.java:    /** Used in exception descriptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @since SqlUtil 1.3
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDesc() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDesc");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the base type of the underlying object (normally \"table\", some DB-specific implementations may support others like \c "view")
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getBaseType() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getBaseType");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the name of the table to be used in SQL (with a possible qualifier for schema, etc)
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getSqlName() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getSqlName");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the column name for use in SQL strings; subclasses can return a special string in case the column name is a reserved word
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getColumnSqlName(String col) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getColumnSqlName", col);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of column names for use in SQL strings; subclasses can process the argument list in case a column name is a reserved word
java/org/qore/lang/sqlutil/AbstractTable.java:    String[] getColumnSqlNames(String[] cols) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getColumnSqlNames", (Object)cols);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! commits the current transaction on the underlying @ref org.qore.lang.AbstractDatasource
java/org/qore/lang/sqlutil/AbstractTable.java:    public void commit() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("commit");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! rolls back the current transaction on the underlying @ref org.qore.lang.AbstractDatasource
java/org/qore/lang/sqlutil/AbstractTable.java:    public void rollback() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("rollback");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns true if the table has been read from or created in the database, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:boolean b = table.inDb();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return true if the table has been read from or created in the database, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note this method only returns a flag if the object contains configuration already retrieved from the database, @see checkExistence() for a method that will check the database if the table exists in case the table is not already known to exist in the database
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public boolean inDb() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (boolean)obj.callMethod("inDb");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! drops the table from the database without any transaction management
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.drop();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional callback options; see @ref CallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unknown callback option
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Transaction management is normally not performed when dropping tables, however this method uses the org.qore.lang.AbstractDatasource.exec() method, which normally participates in acquiring a transaction lock for the underlying datasource object; therefore after this method executes normally the transaction lock will be dedicated to the calling thread.
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void drop(HashMap<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("drop", opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:        //! drops the table from the database without any transaction management
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.drop();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unknown callback option
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Transaction management is normally not performed when dropping tables, however this method uses the org.qore.lang.AbstractDatasource.exec() method, which normally participates in acquiring a transaction lock for the underlying datasource object; therefore after this method executes normally the transaction lock will be dedicated to the calling thread.
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void drop() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("drop");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! executes some SQL with optional arguments so that if an error occurs the current transaction state is not lost
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:t.tryExec("drop table tmp_table");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Include any arguments in the parameter list after the \a sql argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sql the SQL to execute
java/org/qore/lang/sqlutil/AbstractTable.java:        @return any return value from the SQL command executed
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public Object tryExec(String sql) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return obj.callMethod("tryExec", sql);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! executes some SQL with optional arguments so that if an error occurs the current transaction state is not lost
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:t.tryExec("delete from tmp_table where id = %v and name = %v", arglist);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sql the SQL to execute
java/org/qore/lang/sqlutil/AbstractTable.java:        @param args the bind / placeholder or other arguments corresponding to the SQL string
java/org/qore/lang/sqlutil/AbstractTable.java:        @return any return value from the SQL command executed
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public Object tryExecArgs(String sql, Object[] args) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return obj.callMethod("tryExecArgs", sql, (Object)args);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! executes some SQL so that if an error occurs the current transaction state is not lost
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:t.tryExecRaw("drop table tmp_table");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        Include any arguments in the parameter list after the \a sql argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sql the SQL to execute
java/org/qore/lang/sqlutil/AbstractTable.java:        @return any return value from the SQL command executed
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public Object tryExecRaw(String sql) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return obj.callMethod("tryExecRaw", sql);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the sql required to drop the table; reimplement in subclasses if necessary
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:list l = table.getDropSql();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional callback options; see @ref CallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of strings that can be used to drop the table and any other objects assocatied with the table (for example: PostgreSQL table trigger method(s))
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unknown callback option
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropSql(Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropSql", opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the sql required to drop the table; reimplement in subclasses if necessary
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getDropSql();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of strings that can be used to drop the table and any other objects assocatied with the table (for example: PostgreSQL table trigger method(s))
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unknown callback option
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropSql() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropSql");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! truncates all the table data without any transaction management
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.truncate();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Transaction management may not be applied when truncating tables depending on the database driver (for example truncating tables in Oracle does not participate in transaction management), however this method uses the org.qore.lang.AbstractDatasource.exec() method, which normally participates in acquiring a transaction lock for the underlying datasource object; therefore after this method executes normally the transaction lock will be dedicated to the calling thread.
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void truncate() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("truncate");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to truncate the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getTruncateSql();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AbstractTable.AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to truncate the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getTruncateSql(Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getTruncateSql", opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to truncate the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getTruncateSql();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to truncate the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getTruncateSql() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getTruncateSql");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! creates the table with all associated properties (indexes, constraints, etc) without any transaction management
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.create();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL creation strings
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Transaction management is normally not performed when creating tables, however this method uses the org.qore.lang.AbstractDatasource.exec() method, which normally participates in acquiring a transaction lock for the underlying datasource object; therefore after this method executes normally the transaction lock will be dedicated to the calling thread.
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CREATE-TABLE-ERROR table has already been read from or created in the database
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void create(Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("create", opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! creates the table with all associated properties (indexes, constraints, etc) without any transaction management
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.create();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @note Transaction management is normally not performed when creating tables, however this method uses the org.qore.lang.AbstractDatasource.exec() method, which normally participates in acquiring a transaction lock for the underlying datasource object; therefore after this method executes normally the transaction lock will be dedicated to the calling thread.
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CREATE-TABLE-ERROR table has already been read from or created in the database
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void create() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("create");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns true if the table has no data rows, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:boolean b = table.emptyData();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return true if the table has no data rows, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:        @see
java/org/qore/lang/sqlutil/AbstractTable.java:        - empty()
java/org/qore/lang/sqlutil/AbstractTable.java:        - rowCount()
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public boolean emptyData() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (boolean)obj.callMethod("emptyData");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns true if the table has no definitions, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:boolean b = table.empty();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return true if the table has no definitions, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:        @see emptyData()
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public boolean empty() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (boolean)obj.callMethod("empty");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! creates the object from a table description hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @param desc a @ref table_desc_hash "table description hash" describing the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt an optional hash of options for the table creation string; see @ref sqlutil.AbstractTableTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw DESCRIPTION-ERROR invalid or unsupported description hash value passed
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void setupTable(Map<String, Object> desc, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("setupTable", desc, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! creates the object from a table description hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @param desc a @ref table_desc_hash "table description hash" describing the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw DESCRIPTION-ERROR invalid or unsupported description hash value passed
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void setupTable(Map<String, Object> desc) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("setupTable", desc);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds a column to the table; if the table is already known to be in the database, then it is added in the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addColumn("name", column_hash, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type string that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (False) or used as it is (True) to allow to use DBMS native methods or features. Defaults to False. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @param nullable if true then the column can hold NULL values; note that primary key columns cannot be nullable
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column already exists, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note make sure and add a \c default_value value when adding a column with a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addColumn(String cname, Map<String, Object> opt, boolean nullable) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addColumn", cname, opt, nullable);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds a nullable column to the table; if the table is already known to be in the database, then it is added in the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addColumn("name", column_hash, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type string that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (False) or used as it is (True) to allow to use DBMS native methods or features. Defaults to False. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column already exists, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note make sure and add a \c default_value value when adding a column with a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addColumn(String cname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addColumn", cname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of SQL strings that can be use to add a column to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getAddColumnSql("name", copt, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type String that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (false) or used as it is (true) to allow to use DBMS native methods or features. Defaults to false. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @param nullable if true then the column can hold NULL values; note that primary key columns cannot be nullable
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be use to add a column to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column already exists, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - make sure and add a \c default_value value when adding a column with a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getAddColumnSql(String cname, Map<String, Object> copt, boolean nullable, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getAddColumnSql", cname, copt, nullable, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of SQL strings that can be use to add a column to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getAddColumnSql("name", copt, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type String that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (false) or used as it is (true) to allow to use DBMS native methods or features. Defaults to false. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @param nullable if true then the column can hold NULL values; note that primary key columns cannot be nullable
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be use to add a column to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column already exists, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - make sure and add a \c default_value value when adding a column with a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getAddColumnSql(String cname, Map<String, Object> copt, boolean nullable) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getAddColumnSql", cname, copt, nullable);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of SQL strings that can be use to add a nullable column to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getAddColumnSql("name", copt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type String that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (false) or used as it is (true) to allow to use DBMS native methods or features. Defaults to false. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be use to add a column to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column already exists, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - make sure and add a \c default_value value when adding a column with a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getAddColumnSql(String cname, Map<String, Object> copt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getAddColumnSql", cname, copt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings that can be used to modify an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getModifyColumnSql("name", copt, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type String that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (false) or used as it is (true) to allow to use DBMS native methods or features. Defaults to false. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @param nullable if true then the column can hold NULL values; note that primary key columns cannot be nullable
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to modify an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column does not exist, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - make sure and add a \c default_value value when modifying a column to have a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getModifyColumnSql(String cname, Map<String, Object> copt, boolean nullable, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getModifyColumnSql", cname, copt, nullable, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings that can be used to modify an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getModifyColumnSql("name", copt, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type String that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (false) or used as it is (true) to allow to use DBMS native methods or features. Defaults to false. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @param nullable if true then the column can hold NULL values; note that primary key columns cannot be nullable
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to modify an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column does not exist, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - make sure and add a \c default_value value when modifying a column to have a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getModifyColumnSql(String cname, Map<String, Object> copt, boolean nullable) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getModifyColumnSql", cname, copt, nullable);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings that can be used to modify an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getModifyColumnSql("name", copt, false);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash describing the column; the following keys are permitted (other column options may be supported depending on the underlying AbstractTable implementation):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c qore_type: a qore type String that will be converted to a native DB type with some default conversion;
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c native_type: the native database column type; if both \c native_type and \c qore_type are given then \c native_type is used
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c size: for data types requiring a size component, the size; for numeric columns this represents the precision for example
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c scale: for numeric data types, this value gives the scale
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value: the default value for the column
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c default_value_native: a boolean flag to say if a \c default_value should be validated against table column type (false) or used as it is (true) to allow to use DBMS native methods or features. Defaults to false. It is strongly recommended to use \c default_value_native for \c default_value in \c driver specific sub-hash to avoid non-portable schema hashes
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to modify an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR no \c native_type or \c qore_type keys in column option hash, column does not exist, invalid column data
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - make sure and add a \c default_value value when modifying a column to have a \c "not null" constraint with existing data
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getModifyColumnSql(String cname, Map<String, Object> copt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getModifyColumnSql", cname, copt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets an SQL String that can be used to rename an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getRenameColumnSql("name", "family_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param old_name the current name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param new_name the new name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to rename an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR if the old column does not exist in the table or the new column already does
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getModifyColumnSql() for a method that allows the column definition to be updated
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getRenameColumnSql(String old_name, String new_name, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getRenameColumnSql", old_name, new_name, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets an SQL String that can be used to rename an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getRenameColumnSql("name", "family_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param old_name the current name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param new_name the new name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to rename an existing column in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR if the old column does not exist in the table or the new column already does
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getModifyColumnSql() for a method that allows the column definition to be updated
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getRenameColumnSql(String old_name, String new_name) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getRenameColumnSql", old_name, new_name);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds a primary key to the table; if the table is already known to be in the database, then it is added in the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addPrimaryKey("pk_mytable", "id");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkname the name of the new primary key constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param columns a single column name or a list of columns that make up the primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the new primary key; each driver may implement its own options; for common options, see @ref AbstractTable::ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table already has a primary key or invalid columns or options passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addPrimaryKey(String pkname, String[] columns, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addPrimaryKey", pkname, columns, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds a primary key to the table; if the table is already known to be in the database, then it is added in the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addPrimaryKey("pk_mytable", "id");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkname the name of the new primary key constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param columns a single column name or a list of columns that make up the primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table already has a primary key or invalid columns or options passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addPrimaryKey(String pkname, String[] columns) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addPrimaryKey", pkname, columns);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the SQL that can be used to add a primary key to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddPrimaryKeySql("pk_mytable", "id", pkopt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkname the name of the new primary key constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkopt a hash of options for the new primary key; each driver may implement its own options; for common options, see @ref org.qore.sqlutil.AbstractTableConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to add a primary key to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table already has a primary key or invalid columns or options passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddPrimaryKeySql(String pkname, String[] cols, Map<String, Object> pkopt, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddPrimaryKeySql", pkname, cols, pkopt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the SQL that can be used to add a primary key to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddPrimaryKeySql("pk_mytable", "id", pkopt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkname the name of the new primary key constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkopt a hash of options for the new primary key; each driver may implement its own options; for common options, see @ref ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to add a primary key to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table already has a primary key or invalid columns or options passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddPrimaryKeySql(String pkname, String[] cols, Map<String, Object> pkopt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddPrimaryKeySql", pkname, cols, pkopt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the SQL that can be used to add a primary key to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddPrimaryKeySql("pk_mytable", "id");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param pkname the name of the new primary key constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to add a primary key to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table already has a primary key or invalid columns or options passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddPrimaryKeySql(String pkname, String[] cols) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddPrimaryKeySql", pkname, cols);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings to drop all constraints and indexes with the given column name; if the column does not exist then an empty list is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] strlist = table.getDropAllConstraintsAndIndexesOnColumnSql("status");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current primary key definition from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropAllConstraintsAndIndexesOnColumnSql(String cname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropAllConstraintsAndIndexesOnColumnSql", cname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings to drop all constraints and indexes with the given column name; if the column does not exist then an empty list is returned
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] strlist = table.getDropAllConstraintsAndIndexesOnColumnSql("status");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current primary key definition from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropAllConstraintsAndIndexesOnColumnSql(String cname) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropAllConstraintsAndIndexesOnColumnSql", cname);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings that can be used to drop the primary key from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getDropPrimaryKeySql();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to drop the primary key from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table has no primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current primary key definition from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if there are known foreign contraints on the primary key, SQL for dropping those constraints is also returned
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropPrimaryKeySql(Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropPrimaryKeySql", opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets a list of SQL strings that can be used to drop the primary key from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String[] l = table.getDropPrimaryKeySql();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to drop the primary key from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw PRIMARY-KEY-ERROR the table has no primary key
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current primary key definition from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if there are known foreign contraints on the primary key, SQL for dropping those constraints is also returned
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropPrimaryKeySql() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropPrimaryKeySql");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds a unique constraint to the table; if the table is known to be in the database already, then the constraint is added to the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addUniqueConstraint("uk_mytable", "name", opt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the new unique constraint; each driver may implement its own options; for common options, see @ref AbstractTable::ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an AbstractUniqueConstraint object corresponding to the unique constraint created
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UNIQUE-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addUniqueConstraint(String cname, String[] cols, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addUniqueConstraint", cname, cols, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a unique constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddUniqueConstraintSql("uk_mytable", "name", ukopt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param ukopt a hash of options for the new unique constraint; each driver may implement its own options; for common options, see @ref ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a unique constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UNIQUE-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddUniqueConstraintSql(String cname, String[] cols, Map<String, Object> ukopt, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddUniqueConstraintSql", cname, cols, ukopt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a unique constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddUniqueConstraintSql("name", ukopt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param ukopt a hash of options for the new unique constraint; each driver may implement its own options; for common options, see @ref ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a unique constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UNIQUE-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddUniqueConstraintSql(String cname, String[] cols, Map<String, Object> ukopt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddUniqueConstraintSql", cname, cols, ukopt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a unique constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddUniqueConstraintSql("name", cols);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a unique constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UNIQUE-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddUniqueConstraintSql(String cname, String[] cols) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddUniqueConstraintSql", cname, cols);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds an index to the table; if the table is already known to be in the database, then it is added in the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addIndex("uk_mytable_name", true, new String[]{"name"}, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the new index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param unique a flag to tell if the new index should be unique or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the new index; each driver may implement its own options; for common options, see @ref AbstractTable::IndexOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the table already has an index with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addIndex(String iname, boolean unique, String[] cols, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addIndex", iname, unique, cols, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! adds an index to the table; if the table is already known to be in the database, then it is added in the database also immediately; otherwise it is only added internally and can be created when create() is called for example
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.addIndex("uk_mytable_name", true, new String[]{"name"});
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the new index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param unique a flag to tell if the new index should be unique or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the index
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the table already has an index with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public void addIndex(String iname, boolean unique, String[] cols) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        obj.callMethod("addIndex", iname, unique, cols);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add an index to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddIndexSql("uk_mytable_name", true, "name", ixopt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the new index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param unique a flag to tell if the new index should be unique or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param ixopt a hash of options for the new index; each driver may implement its own options; for common options, see @ref IndexOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add an index to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the table already has an index with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddIndexSql(String iname, boolean unique, String[] cols, Map<String, Object> ixopt, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddIndexSql", iname, unique, cols, ixopt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add an index to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddIndexSql("uk_mytable_name", true, "name", ixopt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the new index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param unique a flag to tell if the new index should be unique or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param ixopt a hash of options for the new index; each driver may implement its own options; for common options, see @ref IndexOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add an index to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the table already has an index with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddIndexSql(String iname, boolean unique, String[] cols, Map<String, Object> ixopt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddIndexSql", iname, unique, cols, ixopt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add an index to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddIndexSql("uk_mytable_name", true, "name", ixopt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the new index
java/org/qore/lang/sqlutil/AbstractTable.java:        @param unique a flag to tell if the new index should be unique or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns that make up the index
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add an index to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the table already has an index with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddIndexSql(String iname, boolean unique, String[] cols) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddIndexSql", iname, unique, cols);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to drop an index from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropIndexSql("uk_mytable_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the index to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop an index from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the given index does not exist in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current index definitions from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDropIndexSql(String iname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDropIndexSql", iname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to drop an index from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropIndexSql("uk_mytable_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param iname the name of the index to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop an index from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw INDEX-ERROR the given index does not exist in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current index definitions from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDropIndexSql(String iname) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDropIndexSql", iname);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddForeignConstraintSql("fk_mytable_other_table", ("name", "version"), "other_table");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns in the local table that make up the foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param table the name of the other table that the constraint targets
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tcols a single column name or a list of columns in the foreign table or null meaning that the column names are the same as in the local table; if column names are given the same number of columns must be given in the local and foreign tables
java/org/qore/lang/sqlutil/AbstractTable.java:        @param fkopt a hash of options for the new foreign constraint; each driver may implement its own options; for common options, see @ref ForeignConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw FOREIGN-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddForeignConstraintSql(String cname, String[] cols, String table, String[] tcols, Map<String, Object> fkopt, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddForeignConstraintSql", cname, cols, table, tcols, fkopt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddForeignConstraintSql("fk_mytable_other_table", cols, "other_table");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns in the local table that make up the foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param table the name of the other table that the constraint targets
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tcols a single column name or a list of columns in the foreign table or null meaning that the column names are the same as in the local table; if column names are given the same number of columns must be given in the local and foreign tables
java/org/qore/lang/sqlutil/AbstractTable.java:        @param fkopt a hash of options for the new foreign constraint; each driver may implement its own options; for common options, see @ref ForeignConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw FOREIGN-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddForeignConstraintSql(String cname, String[] cols, String table, String[] tcols, Map<String, Object> fkopt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddForeignConstraintSql", cname, cols, table, tcols, fkopt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddForeignConstraintSql("fk_mytable_other_table", cols, "other_table");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns in the local table that make up the foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param table the name of the other table that the constraint targets
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tcols a single column name or a list of columns in the foreign table or null meaning that the column names are the same as in the local table; if column names are given the same number of columns must be given in the local and foreign tables
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw FOREIGN-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddForeignConstraintSql(String cname, String[] cols, String table, String[] tcols) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddForeignConstraintSql", cname, cols, table, tcols);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddForeignConstraintSql("fk_mytable_other_table", cols, "other_table");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols a single column name or a list of columns in the local table that make up the foreign constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param table the name of the other table that the constraint targets
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a foreign constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw FOREIGN-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddForeignConstraintSql(String cname, String[] cols, String table) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddForeignConstraintSql", cname, cols, table);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a check constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddCheckConstraintSql("check_mytable_id", "id > 10");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param src the source of the constraint clause
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash of options for the new constraint; each driver may implement its own options; for common options, see @ref ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a check constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CHECK-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddCheckConstraintSql(String cname, String src, Map<String, Object> copt, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddForeignConstraintSql", cname, src, copt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a check constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddCheckConstraintSql("check_mytable_id", "id > 10");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param src the source of the constraint clause
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash of options for the new constraint; each driver may implement its own options; for common options, see @ref ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a check constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CHECK-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddCheckConstraintSql(String cname, String src, Map<String, Object> copt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddCheckConstraintSql", cname, src, copt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an SQL String that can be used to add a check constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddCheckConstraintSql("check_mytable_id", "id > 10");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the new constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @param src the source of the constraint clause
java/org/qore/lang/sqlutil/AbstractTable.java:        @param copt a hash of options for the new constraint; each driver may implement its own options; for common options, see @ref ConstraintOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an SQL String that can be used to add a check constraint to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CHECK-CONSTRAINT-ERROR the table already has a constraint with the given name or invalid columns or options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getAddCheckConstraintSql(String cname, String src) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getAddCheckConstraintSql", cname, src);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to drop a constraint from the table; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropConstraintSql("uk_mytable_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the constraint to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop a constraint from the table; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CONSTRAINT-ERROR the given constraint does not exist in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current constraint definitions from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDropConstraintSql(String cname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDropConstraintSql", cname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to drop a constraint from the table; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropConstraintSql("uk_mytable_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the constraint to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop a constraint from the table; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw CONSTRAINT-ERROR the given constraint does not exist in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current constraint definitions from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDropConstraintSql(String cname) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDropConstraintSql", cname);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to drop a constraint from the table if it exists, otherwise returns null; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropConstraintIfExistsSql("uk_mytable_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the constraint to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop a constraint from the table if it exists, otherwise returns null; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current constraint definitions from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDropConstraintIfExistsSql(String cname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDropConstraintIfExistsSql", cname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! gets the SQL that can be used to drop a constraint from the table if it exists, otherwise returns null; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropConstraintIfExistsSql("uk_mytable_name");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the constraint to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop a constraint from the table if it exists, otherwise returns null; this can be any constraint on the table, a primary key, a foreign key constraint, or a generic constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves current constraint definitions from the database if not already loaded or defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String getDropConstraintIfExistsSql(String cname) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String)obj.callMethod("getDropConstraintIfExistsSql", cname);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of SQL strings that can be used to add a trigger to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddTriggerSql("trig_mytable", trigger_src);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tname the name of the new trigger
java/org/qore/lang/sqlutil/AbstractTable.java:        @param src the source of the trigger
java/org/qore/lang/sqlutil/AbstractTable.java:        @param topt a hash of options for the new trigger; each driver may implement its own options; for common options, see @ref TriggerOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to add a trigger to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw TRIGGER-ERROR the table already has a trigger with the given name or invalid options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getAddTriggerSql(String tname, String src, Map<String, Object> topt, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getAddTriggerSql", tname, src, topt, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of SQL strings that can be used to add a trigger to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddTriggerSql("trig_mytable", trigger_src);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tname the name of the new trigger
java/org/qore/lang/sqlutil/AbstractTable.java:        @param src the source of the trigger
java/org/qore/lang/sqlutil/AbstractTable.java:        @param topt a hash of options for the new trigger; each driver may implement its own options; for common options, see @ref TriggerOptions
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to add a trigger to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw TRIGGER-ERROR the table already has a trigger with the given name or invalid options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getAddTriggerSql(String tname, String src, Map<String, Object> topt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getAddTriggerSql", tname, src, topt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of SQL strings that can be used to add a trigger to the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getAddTriggerSql("trig_mytable", trigger_src);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        In case the table is already in the database, this method commits the transaction on success and rolls back the transaction if there's an error.
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tname the name of the new trigger
java/org/qore/lang/sqlutil/AbstractTable.java:        @param src the source of the trigger
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of SQL strings that can be used to add a trigger to the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw TRIGGER-ERROR the table already has a trigger with the given name or invalid options were passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getAddTriggerSql(String tname, String src) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getAddTriggerSql", tname, src);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns SQL that can be used to drop the given trigger from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropTriggerSql("trig_mytable");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tname the name of the trigger to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop the given trigger from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw TRIGGER-ERROR the given trigger does not exist
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves all current trigger definitions from the database if none have already been defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropTriggerSql(String tname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropTriggerSql", tname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns SQL that can be used to drop the given trigger from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropTriggerSql("trig_mytable");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param tname the name of the trigger to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop the given trigger from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw TRIGGER-ERROR the given trigger does not exist
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves all current trigger definitions from the database if none have already been defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropTriggerSql(String tname) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropTriggerSql", tname);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the SQL that can be used to drop a column from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropColumnSql("notes_2");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the SQL string; see @ref AlignTableOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop a column from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR the named column is not present in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves the column definitions from the database if none have already been defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropColumnSql(String cname, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropColumnSql", cname, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the SQL that can be used to drop a column from the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:String sql = table.getDropColumnSql("notes_2");
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cname the name of the column to drop
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the SQL that can be used to drop a column from the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option passed
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR the named column is not present in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - this method retrieves the column definitions from the database if none have already been defined
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the @ref sql_callback_executed "sql_callback_executed option" is true in \a opt, then the changes are also effected in the current object, if not, then they are not (see @ref sql_callback_executed for more information)
java/org/qore/lang/sqlutil/AbstractTable.java:        @see inDb() for a method that tells if the table is already in the database or not
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public String[] getDropColumnSql(String cname) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (String[])obj.callMethod("getDropColumnSql", cname);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! inserts a row into the table without any transaction management; a transaction will be in progress after this method is successfully executed
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @ingroup inserts
java/org/qore/lang/sqlutil/AbstractTable.java:        @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.insert(row);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param row a hash representing the row to insert; hash values can also be set with @ref sql_iop_funcs to insert values based on SQL operations to be used directly in the insert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @return in case the \c "returning" @ref InsertOptions "insert option" is used, a hash of return values is returned, otherwise null is returned
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR an unknown column was referenced in the hash to be inserted
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> insert(Map<String, Object> row) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("insert", row);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! @ref insert() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    /**
java/org/qore/lang/sqlutil/AbstractTable.java:        @param row a hash representing the row to insert; hash values can also be set with @ref sql_iop_funcs to insert values based on SQL operations to be used directly in the insert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional insert options; see @ref InsertOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> insert(Map<String, Object> row, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("insert", row, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns true if the current database driver supports the \c "returning" clause in insert statements, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @return true if the current database driver supports the \c "returning" clause in insert statements, false if not
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.3
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public boolean hasReturning() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (boolean)obj.callMethod("hasReturning");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! inserts rows into a table based on a select statement from another table (which must be using the same datasource as the current table); a transaction will be in progress after this method is successfully executed
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:int rows = table.insertFromSelect(new String[]{"id", "name", "created"}, source_table, sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cols the list of column names to use to insert in the current table
java/org/qore/lang/sqlutil/AbstractTable.java:        @param source the source table for the select statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref SqlDataCallbackOptions for more inf
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the number of rows inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR unknown or invalid column in insert list
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note this method does not take insert options because it is executed entirely in the database server; use insertFromIterator() or insertFromIteratorCommit() to insert arbitrary data with insert options
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public int insertFromSelect(String[] cols, AbstractTable source, Map<String, Object> sh, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("insertFromSelect", cols, source, sh, opt)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! @ref insertFromSelect() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    public int insertFromSelect(String[] cols, AbstractTable source, Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("insertFromSelect", cols, source, sh)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! @ref insertFromSelect() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    public int insertFromSelect(String[] cols, AbstractTable source) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("insertFromSelect", cols, source)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! update or insert the data in the table according to the hash argument; the table must have a unique key to do this
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.upsert(row);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param row a hash representing the row to insert or update
java/org/qore/lang/sqlutil/AbstractTable.java:        @param upsert_strategy see @ref upsert_options for possible values for the upsert strategy
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the upsert operation; see @ref UpsertOptions for common options; each driver can support additional driver-specific options
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an integer code giving the result of the update; see @ref upsert_results for more information
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR an unknown column was referenced in the hash to be inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UPSERT-ERROR no primary key, unique constraint, or unique index for upsert; not all columns of the unique constraint/index are used in the upsert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if upserting multiple rows; it's better to use getBulkUpsertClosure(), getUpsertClosure(), or getUpsertClosureWithValidation() and execute the closure on each row; when using this method, the overhead for setting up the upsert is made for each row which is very inefficient
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public int upsert(Map<String, Object> row, int upsert_strategy, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("upsert", row, upsert_strategy, opt)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! update or insert the data in the table according to the hash argument; the table must have a unique key to do this
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:table.upsert(row);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param row a hash representing the row to insert or update
java/org/qore/lang/sqlutil/AbstractTable.java:        @param upsert_strategy see @ref upsert_options for possible values for the upsert strategy
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an integer code giving the result of the update; see @ref upsert_results for more information
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR an unknown column was referenced in the hash to be inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UPSERT-ERROR no primary key, unique constraint, or unique index for upsert; not all columns of the unique constraint/index are used in the upsert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @note if upserting multiple rows; it's better to use getBulkUpsertClosure(), getUpsertClosure(), or getUpsertClosureWithValidation() and execute the closure on each row; when using this method, the overhead for setting up the upsert is made for each row which is very inefficient
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public int upsert(Map<String, Object> row, int upsert_strategy) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("upsert", row, upsert_strategy)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! this method upserts or merges data from the given foreign table and @ref select_option_hash "select option hash" into the current table; no transaction management is performed with this method
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h;
java/org/qore/lang/sqlutil/AbstractTable.java:try {
java/org/qore/lang/sqlutil/AbstractTable.java:    h = table.upsertFromSelect(table2, sh, AbstractTable.UpsertUpdateFirst);
java/org/qore/lang/sqlutil/AbstractTable.java:    ds.commit();
java/org/qore/lang/sqlutil/AbstractTable.java:} catch (Throwable e) {
java/org/qore/lang/sqlutil/AbstractTable.java:    ds.collback();
java/org/qore/lang/sqlutil/AbstractTable.java:    throw e;
java/org/qore/lang/sqlutil/AbstractTable.java:}
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        The table argument does not need to be in the same database as the current table; it can also
java/org/qore/lang/sqlutil/AbstractTable.java:        be in a different database server or a database server of a different type (you can use this method to upsert or
java/org/qore/lang/sqlutil/AbstractTable.java:        merge data to or from any database supported by SqlUtil).
java/org/qore/lang/sqlutil/AbstractTable.java:        @param t the table for the source data; this does not need to be in the same database as the target (the current table), nor does it need to be the same database type
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param upsert_strategy see @ref upsert_options for possible values for the upsert strategy
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt a hash of options for the upsert operation; see @ref UpsertOptions for common options; each driver can support additional driver-specific options; note that this method ignores any \c "commit_block" option
java/org/qore/lang/sqlutil/AbstractTable.java:        @return null if no actions were taken or a hash with the following keys assigned to numeric values indicating the number of rows processed (keys correspond to @ref UpsertResultDescriptionMap keys):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "inserted": the number of rows inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "verified": the number of rows updated unconditionally; note that this key is returned with all upsert strategy codes other than @ref UpsertSelectFirst instead of \c "updated"
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "updated": the number of rows updated; note that this key is only returned if \a upsert_strategy is @ref UpsertSelectFirst, otherwise updated rows are reported as \c "verified" since rows are updated unconditionally with other the upsert strategy codes
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "unchanged": the number of rows unchanged; this key can only be returned if \a upsert_strategy is @ref UpsertSelectFirst, @ref UpsertInsertOnly, or @ref UpsertUpdateOnly
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "deleted": the number of rows deleted; this can only be returned if @ref UpsertOptions "upsert option" \c delete_others is true
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR an unknown column was referenced in the hash to be inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UPSERT-ERROR no primary key, unique constraint, or unique index for upsert; not all columns of the unique constraint/index are used in the upsert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if @ref UpsertOptions "upsert option" \c delete_others is true, then a hash of primary key values in the input data is built as the input data is iterated.  After iterating, if the row count of the table and the input data matches, then nothing more is done, otherwise, every row of the table is iterated and compared to the primary key hash; if a row does not match a primary key value, then it is deleted.  This operation is only executed if \c delete_others is true and is expensive for large data sets.
java/org/qore/lang/sqlutil/AbstractTable.java:       - this method uses an @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object to pipeline the select data to the upsert code; to release the transaction lock acquired by the @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object, a commit() or rollback() action must be executed on the underlying datasource object as in the example above
java/org/qore/lang/sqlutil/AbstractTable.java:        - unlike insertFromSelect(), this method processes arbitrary input data and accepts @ref UpsertOptions "upsert options"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see
java/org/qore/lang/sqlutil/AbstractTable.java:        - upsertFromSelect()
java/org/qore/lang/sqlutil/AbstractTable.java:        - upsert()
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> upsertFromSelect(AbstractTable t, Map<String, Object> sh, int upsert_strategy, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("upsertFromSelect", t, sh, upsert_strategy, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! this method upserts or merges data from the given foreign table and @ref select_option_hash "select option hash" into the current table; no transaction management is performed with this method
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h;
java/org/qore/lang/sqlutil/AbstractTable.java:try {
java/org/qore/lang/sqlutil/AbstractTable.java:    h = table.upsertFromSelect(table2, sh, AbstractTable.UpsertUpdateFirst);
java/org/qore/lang/sqlutil/AbstractTable.java:    ds.commit();
java/org/qore/lang/sqlutil/AbstractTable.java:} catch (Throwable e) {
java/org/qore/lang/sqlutil/AbstractTable.java:    ds.collback();
java/org/qore/lang/sqlutil/AbstractTable.java:    throw e;
java/org/qore/lang/sqlutil/AbstractTable.java:}
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        The table argument does not need to be in the same database as the current table; it can also
java/org/qore/lang/sqlutil/AbstractTable.java:        be in a different database server or a database server of a different type (you can use this method to upsert or
java/org/qore/lang/sqlutil/AbstractTable.java:        merge data to or from any database supported by SqlUtil).
java/org/qore/lang/sqlutil/AbstractTable.java:        @param t the table for the source data; this does not need to be in the same database as the target (the current table), nor does it need to be the same database type
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param upsert_strategy see @ref upsert_options for possible values for the upsert strategy
java/org/qore/lang/sqlutil/AbstractTable.java:        @return null if no actions were taken or a hash with the following keys assigned to numeric values indicating the number of rows processed (keys correspond to @ref UpsertResultDescriptionMap keys):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "inserted": the number of rows inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "verified": the number of rows updated unconditionally; note that this key is returned with all upsert strategy codes other than @ref UpsertSelectFirst instead of \c "updated"
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "updated": the number of rows updated; note that this key is only returned if \a upsert_strategy is @ref UpsertSelectFirst, otherwise updated rows are reported as \c "verified" since rows are updated unconditionally with other the upsert strategy codes
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "unchanged": the number of rows unchanged; this key can only be returned if \a upsert_strategy is @ref UpsertSelectFirst, @ref UpsertInsertOnly, or @ref UpsertUpdateOnly
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "deleted": the number of rows deleted; this can only be returned if @ref UpsertOptions "upsert option" \c delete_others is true
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR an unknown column was referenced in the hash to be inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UPSERT-ERROR no primary key, unique constraint, or unique index for upsert; not all columns of the unique constraint/index are used in the upsert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if @ref UpsertOptions "upsert option" \c delete_others is true, then a hash of primary key values in the input data is built as the input data is iterated.  After iterating, if the row count of the table and the input data matches, then nothing more is done, otherwise, every row of the table is iterated and compared to the primary key hash; if a row does not match a primary key value, then it is deleted.  This operation is only executed if \c delete_others is true and is expensive for large data sets.
java/org/qore/lang/sqlutil/AbstractTable.java:       - this method uses an @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object to pipeline the select data to the upsert code; to release the transaction lock acquired by the @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object, a commit() or rollback() action must be executed on the underlying datasource object as in the example above
java/org/qore/lang/sqlutil/AbstractTable.java:        - unlike insertFromSelect(), this method processes arbitrary input data and accepts @ref UpsertOptions "upsert options"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see
java/org/qore/lang/sqlutil/AbstractTable.java:        - upsertFromSelect()
java/org/qore/lang/sqlutil/AbstractTable.java:        - upsert()
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> upsertFromSelect(AbstractTable t, Map<String, Object> sh, int upsert_strategy) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("upsertFromSelect", t, sh, upsert_strategy);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! deletes rows in the table matching the condition and returns the count of rows deleted; no transaction management is performed with this method
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:int dcnt = table.del(cond_hash);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cond a hash of conditions for the where clause; see @ref where_clauses for more information
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sql an optional reference to a string to return the SQL generated for the select statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref AbstractTable::SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the count of rows deleted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw WHERE-ERROR unknown operator or invalid arguments given in the cond hash for the where clause
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public int del(HashMap<String, Object> cond, HashMap<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("del", cond, opt)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! @ref del() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    public int del(HashMap<String, Object> cond) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("del", cond)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! @ref del() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    public int del() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("del")).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! updates rows in the table matching an optional condition and returns the count of rows updated; no transaction management is performed with this method
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:int ucnt = table.update(set_hash, cond_hash);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param set the hash of values to set, key values are column names, hash values are the values to assign to those columns or update operators (see @ref sql_uop_funcs)
java/org/qore/lang/sqlutil/AbstractTable.java:        @param cond a hash of conditions for the where clause; see @ref where_clauses for more information
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sql an optional reference to a string to return the SQL generated for the select statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref AbstractTable::SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the count of rows updated
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UPDATE-ERROR the set hash is empty
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw WHERE-ERROR unknown operator or invalid arguments given in the cond hash for the where clause
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    public int update(HashMap<String, Object> set, HashMap<String, Object> cond, HashMap<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("update", set, cond, opt)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! A @ref update() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    public int update(HashMap<String, Object> set, HashMap<String, Object> cond) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("update", set, cond)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! A @ref update() variant
java/org/qore/lang/sqlutil/AbstractTable.java:    public int update(HashMap<String, Object> set) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("update", set)).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! this method upserts or merges data from the given foreign table and @ref select_option_hash "select option hash" into the current table; no transaction management is performed with this method
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h;
java/org/qore/lang/sqlutil/AbstractTable.java:try {
java/org/qore/lang/sqlutil/AbstractTable.java:    h = table.upsertFromSelect(table2, sh, AbstractTable.UpsertUpdateFirst);
java/org/qore/lang/sqlutil/AbstractTable.java:    ds.commit();
java/org/qore/lang/sqlutil/AbstractTable.java:} catch (Throwable e) {
java/org/qore/lang/sqlutil/AbstractTable.java:    ds.collback();
java/org/qore/lang/sqlutil/AbstractTable.java:    throw e;
java/org/qore/lang/sqlutil/AbstractTable.java:}
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        The table argument does not need to be in the same database as the current table; it can also
java/org/qore/lang/sqlutil/AbstractTable.java:        be in a different database server or a database server of a different type (you can use this method to upsert or
java/org/qore/lang/sqlutil/AbstractTable.java:        merge data to or from any database supported by SqlUtil).
java/org/qore/lang/sqlutil/AbstractTable.java:        @param t the table for the source data; this does not need to be in the same database as the target (the current table), nor does it need to be the same database type
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return null if no actions were taken or a hash with the following keys assigned to numeric values indicating the number of rows processed (keys correspond to @ref UpsertResultDescriptionMap keys):
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "inserted": the number of rows inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "verified": the number of rows updated unconditionally; note that this key is returned with all upsert strategy codes other than @ref UpsertSelectFirst instead of \c "updated"
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "updated": the number of rows updated; note that this key is only returned if \a upsert_strategy is @ref UpsertSelectFirst, otherwise updated rows are reported as \c "verified" since rows are updated unconditionally with other the upsert strategy codes
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "unchanged": the number of rows unchanged; this key can only be returned if \a upsert_strategy is @ref UpsertSelectFirst, @ref UpsertInsertOnly, or @ref UpsertUpdateOnly
java/org/qore/lang/sqlutil/AbstractTable.java:        - \c "deleted": the number of rows deleted; this can only be returned if @ref UpsertOptions "upsert option" \c delete_others is true
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw COLUMN-ERROR an unknown column was referenced in the hash to be inserted
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw UPSERT-ERROR no primary key, unique constraint, or unique index for upsert; not all columns of the unique constraint/index are used in the upsert statement
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if @ref UpsertOptions "upsert option" \c delete_others is true, then a hash of primary key values in the input data is built as the input data is iterated.  After iterating, if the row count of the table and the input data matches, then nothing more is done, otherwise, every row of the table is iterated and compared to the primary key hash; if a row does not match a primary key value, then it is deleted.  This operation is only executed if \c delete_others is true and is expensive for large data sets.
java/org/qore/lang/sqlutil/AbstractTable.java:       - this method uses an @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object to pipeline the select data to the upsert code; to release the transaction lock acquired by the @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" object, a commit() or rollback() action must be executed on the underlying datasource object as in the example above
java/org/qore/lang/sqlutil/AbstractTable.java:        - unlike insertFromSelect(), this method processes arbitrary input data and accepts @ref UpsertOptions "upsert options"
java/org/qore/lang/sqlutil/AbstractTable.java:        @see
java/org/qore/lang/sqlutil/AbstractTable.java:        - upsertFromSelect()
java/org/qore/lang/sqlutil/AbstractTable.java:        - upsert()
java/org/qore/lang/sqlutil/AbstractTable.java:    */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> upsertFromSelect(AbstractTable t, Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("upsertFromSelect", t, sh);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns the number of rows in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:int cnt = table.rowCount();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return the number of rows in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note to see if the table is empty or not, use emptyData() as this is much faster than rowCount()
java/org/qore/lang/sqlutil/AbstractTable.java:        @see emptyData()
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public int rowCount() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return ((Long)obj.callMethod("rowCount")).intValue();
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:AbstractSQLStatement i = table.getStatement(sh, opts);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - the @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object created by a successful call to this method acquires a thread resource for the underlying @ref org.qore.lang.AbstractDatasource "AbstractDatasource" object that must be released by calling @ref org.qore.lang.AbstractDatasource.commit() "commit()" or @ref org.qore.lang.AbstractDatasource.rollback() "rollback()", even if the statement does not acquire any database locks
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getStatementNoExec()
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.5
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractSQLStatement getStatement(Map<String, Object> sh, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getStatement", sh, opt));
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:AbstractSQLStatement i = table.getStatement(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - the @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object created by a successful call to this method acquires a thread resource for the underlying @ref org.qore.lang.AbstractDatasource "AbstractDatasource" object that must be released by calling @ref org.qore.lang.AbstractDatasource.commit() "commit()" or @ref org.qore.lang.AbstractDatasource.rollback() "rollback()", even if the statement does not acquire any database locks
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getStatementNoExec()
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.5
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractSQLStatement getStatement(Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getStatement", sh));
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate all the rows in the table
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:AbstractSQLStatement i = table.getStatement();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate all the rows in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - the @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object created by a successful call to this method acquires a thread resource for the underlying @ref org.qore.lang.AbstractDatasource "AbstractDatasource" object that must be released by calling @ref org.qore.lang.AbstractDatasource.commit() "commit()" or @ref org.qore.lang.AbstractDatasource.rollback() "rollback()", even if the statement does not acquire any database locks
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getStatementNoExec()
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.5
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractSQLStatement getStatement() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getStatement"));
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments; the statement is only prepared and not executed
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:AbstractSQLStatement i = table.getStatementNoExec(sh, opts);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - the @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object created by a successful call to this method acquires a thread resource for the underlying @ref org.qore.lang.AbstractDatasource "AbstractDatasource" object that must be released by calling @ref org.qore.lang.AbstractDatasource.commit() "commit()" or @ref org.qore.lang.AbstractDatasource.rollback() "rollback()", even if the statement does not acquire any database locks
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getStatement()
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.5
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractSQLStatement getStatementNoExec(Map<String, Object> sh, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getStatementNoExec", sh, opt));
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments; the statement is only prepared and not executed
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:AbstractSQLStatement i = table.getStatementNoExec(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate the results of a select statement matching the arguments
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - the @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object created by a successful call to this method acquires a thread resource for the underlying @ref org.qore.lang.AbstractDatasource "AbstractDatasource" object that must be released by calling @ref org.qore.lang.AbstractDatasource.commit() "commit()" or @ref org.qore.lang.AbstractDatasource.rollback() "rollback()", even if the statement does not acquire any database locks
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getStatement()
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.5
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractSQLStatement getStatementNoExec(Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getStatementNoExec", sh));
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate all the rows in the table; the statement is only prepared and not executed
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:AbstractSQLStatement i = table.getStatementNoExec();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return an @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object that will iterate all the rows in the table
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - the @ref org.qore.lang.AbstractSQLStatement "AbstractSQLStatement" object created by a successful call to this method acquires a thread resource for the underlying @ref org.qore.lang.AbstractDatasource "AbstractDatasource" object that must be released by calling @ref org.qore.lang.AbstractDatasource.commit() "commit()" or @ref org.qore.lang.AbstractDatasource.rollback() "rollback()", even if the statement does not acquire any database locks
java/org/qore/lang/sqlutil/AbstractTable.java:        @see getStatement()
java/org/qore/lang/sqlutil/AbstractTable.java:        @since %SqlUtil 1.5
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    public AbstractSQLStatement getStatementNoExec() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return new AbstractSQLStatement((QoreObject)obj.callMethodSave("getStatementNoExec"));
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a hash representing the row in the table that matches the argument hash; if more than one row would be returned an exception is raised
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h = table.selectRow(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash representing the row in the table that matches the argument hash; if more than one row would be returned an exception is raised
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw DBI-SELECT-ROW-ERROR more than 1 row retrieved from the server
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> selectRow(Map<String, Object> sh, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("selectRow", sh, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a hash representing the row in the table that matches the argument hash; if more than one row would be returned an exception is raised
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h = table.selectRow(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash representing the row in the table that matches the argument hash; if more than one row would be returned an exception is raised
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw DBI-SELECT-ROW-ERROR more than 1 row retrieved from the server
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> selectRow(Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("selectRow", sh);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of hashes representing the rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object>[] l = table.selectRows(sh, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of hashes representing the rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object>[] selectRows(Map<String, Object> sh, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>[])obj.callMethod("selectRows", sh, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of hashes representing the rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object>[] l = table.selectRows(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of hashes representing the rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object>[] selectRows(Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>[])obj.callMethod("selectRows", sh);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a list of hashes representing the rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object>[] l = table.selectRows();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a list of hashes representing the rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object>[] selectRows() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>[])obj.callMethod("selectRows");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a hash of lists representing the columns and rows in the table that match the argument hahs
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h = table.select(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @param opt optional SQL data operation callback options; see @ref SqlDataCallbackOptions for more info
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash of lists representing the columns and rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> select(Map<String, Object> sh, Map<String, Object> opt) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("select", sh, opt);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a hash of lists representing the columns and rows in the table that match the argument hahs
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h = table.select(sh);
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @param sh a hash of conditions for the select statement; see @ref select_option_hash "select option hash" for information about this argument
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash of lists representing the columns and rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> select(Map<String, Object> sh) throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("select", sh);
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:    //! returns a hash of lists representing the columns and rows in the table that match the argument hahs
java/org/qore/lang/sqlutil/AbstractTable.java:    /** @par Example:
java/org/qore/lang/sqlutil/AbstractTable.java:        @code{.java}
java/org/qore/lang/sqlutil/AbstractTable.java:Map<String, Object> h = table.select();
java/org/qore/lang/sqlutil/AbstractTable.java:        @endcode
java/org/qore/lang/sqlutil/AbstractTable.java:        @return a hash of lists representing the columns and rows in the table that match the argument hash
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw OPTION-ERROR invalid or unsupported select option
java/org/qore/lang/sqlutil/AbstractTable.java:        @throw SELECT-ERROR \c 'offset' supplied without \c 'orderby' or \c 'limit', \c 'orderby' with \c 'limit' and \c 'offset' does not match any unique constraint
java/org/qore/lang/sqlutil/AbstractTable.java:        @note
java/org/qore/lang/sqlutil/AbstractTable.java:        - if \c "offset" is supplied and no \c "orderby" is supplied, then if any primary key exists, the primary key columns will be used for the \c "orderby" option automatically
java/org/qore/lang/sqlutil/AbstractTable.java:        - if the \c forupdate @ref select_option_hash "select option" is used, then after a successful select operation, the calling thread will own the thread transaction lock
java/org/qore/lang/sqlutil/AbstractTable.java:     */
java/org/qore/lang/sqlutil/AbstractTable.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/sqlutil/AbstractTable.java:    public HashMap<String, Object> select() throws Throwable {
java/org/qore/lang/sqlutil/AbstractTable.java:        return (HashMap<String, Object>)obj.callMethod("select");
java/org/qore/lang/sqlutil/AbstractTable.java:    }
java/org/qore/lang/sqlutil/AbstractTable.java:}
java/org/qore/lang/sqlutil/Table.java:/** Java wrapper for the %Qore Table class
java/org/qore/lang/sqlutil/Table.java: *
java/org/qore/lang/sqlutil/Table.java: */
java/org/qore/lang/sqlutil/Table.java:package org.qore.lang.sqlutil;
java/org/qore/lang/sqlutil/Table.java:// jni module imports
java/org/qore/lang/sqlutil/Table.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/sqlutil/Table.java:import org.qore.jni.QoreObject;
java/org/qore/lang/sqlutil/Table.java:// Qore imports
java/org/qore/lang/sqlutil/Table.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/sqlutil/Table.java:import org.qore.lang.sqlutil.AbstractTable;
java/org/qore/lang/sqlutil/Table.java://! Java wrapper for the @ref SqlUtil::Table class in %Qore
java/org/qore/lang/sqlutil/Table.java:/**
java/org/qore/lang/sqlutil/Table.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/sqlutil/Table.java:    <tt>import qoremod.SqlUtil.Table;</tt>
java/org/qore/lang/sqlutil/Table.java: */
java/org/qore/lang/sqlutil/Table.java:@Deprecated
java/org/qore/lang/sqlutil/Table.java:public class Table extends AbstractTable {
java/org/qore/lang/sqlutil/Table.java:    //! creates a new AbstractTable object from the %Qore Table object
java/org/qore/lang/sqlutil/Table.java:    public Table(QoreObject obj) {
java/org/qore/lang/sqlutil/Table.java:        super(obj);
java/org/qore/lang/sqlutil/Table.java:    }
java/org/qore/lang/sqlutil/Table.java:    //! creates a new AbstractTable object from the given datasource and name
java/org/qore/lang/sqlutil/Table.java:    public Table(AbstractDatasource dsp, String name) throws Throwable {
java/org/qore/lang/sqlutil/Table.java:        super(QoreJavaApi.newObjectSave("SqlUtil::Table", dsp.getQoreObject(), name));
java/org/qore/lang/sqlutil/Table.java:    }
java/org/qore/lang/sqlutil/Table.java:}
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:/** Java wrapper for the %Qore AbstractTable class
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java: *
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java: */
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:package org.qore.lang.sqlutil;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:// java imports
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import java.util.Map;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import java.util.Map;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import java.util.Collections;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:// jni module imports
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import org.qore.jni.QoreObject;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:// Qore Java imports
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java://! Java wrapper for the @ref SqlUtil::AbstractSqlUtilBase class in %Qore
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    <tt>import qoremod.SqlUtil.AbstractSqlUtilBase;</tt>
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:*/
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:@Deprecated
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:public class AbstractSqlUtilBase extends QoreObjectWrapper {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    // static initialization
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    static {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c SqlUtil module
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        try {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:            QoreJavaApi.initQore();
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:            QoreJavaApi.callFunction("load_module", "SqlUtil");
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        } catch (Throwable e) {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        }
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    }
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    //! creates the object from a weak reference to the Qore object
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    public AbstractSqlUtilBase(QoreObject obj) {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        super(obj);
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    }
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    //! gets the underlying AbstractDatasource
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    public AbstractDatasource getDatasource() throws Throwable {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        return new AbstractDatasource((QoreObject)obj.callMethod("getDatasource"));
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    }
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    //! returns the database driver name
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    public String getDriverName() throws Throwable {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        return (String)obj.callMethod("getDriverName");
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    }
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    //! returns a descriptive string for the datasource
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    public String getDatasourceDesc() throws Throwable {
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:        return (String)obj.callMethod("getDatasourceDesc");
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:    }
java/org/qore/lang/sqlutil/AbstractSqlUtilBase.java:}
java/org/qore/lang/qunit/TestResultExceptionType.java:/** Java wrapper for the %Qore QUnit::TestResulExceptionType class
java/org/qore/lang/qunit/TestResultExceptionType.java: *
java/org/qore/lang/qunit/TestResultExceptionType.java: */
java/org/qore/lang/qunit/TestResultExceptionType.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultExceptionType.java:// jni module imports
java/org/qore/lang/qunit/TestResultExceptionType.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultExceptionType.java://! Class representing Exception of a particular type
java/org/qore/lang/qunit/TestResultExceptionType.java:/**
java/org/qore/lang/qunit/TestResultExceptionType.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultExceptionType.java:    <tt>import qoremod.QUnit.TestResultExceptionType;</tt>
java/org/qore/lang/qunit/TestResultExceptionType.java:*/
java/org/qore/lang/qunit/TestResultExceptionType.java:@Deprecated
java/org/qore/lang/qunit/TestResultExceptionType.java:public class TestResultExceptionType extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultExceptionType.java:    //! creates the object from the exception arguments
java/org/qore/lang/qunit/TestResultExceptionType.java:    /** @param exceptionType corresponds to the \c "err" key of @ref Qore::ExceptionInfo "ExceptionInfo" (the first
java/org/qore/lang/qunit/TestResultExceptionType.java:        value of a @ref throw "throw statement")
java/org/qore/lang/qunit/TestResultExceptionType.java:    */
java/org/qore/lang/qunit/TestResultExceptionType.java:    public TestResultExceptionType(String exceptionType) throws Throwable {
java/org/qore/lang/qunit/TestResultExceptionType.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultExceptionType", exceptionType));
java/org/qore/lang/qunit/TestResultExceptionType.java:    }
java/org/qore/lang/qunit/TestResultExceptionType.java:}
java/org/qore/lang/qunit/TestCodeArgs.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestCodeArgs.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/lang/qunit/TestCodeArgs.java://! This class is used for test code taking an arbitrary number of arguments
java/org/qore/lang/qunit/TestCodeArgs.java:public interface TestCodeArgs extends QoreClosureMarker {
java/org/qore/lang/qunit/TestCodeArgs.java:    //! This method is called to run the test
java/org/qore/lang/qunit/TestCodeArgs.java:    void call(Object... args) throws Throwable;
java/org/qore/lang/qunit/TestCodeArgs.java:}
java/org/qore/lang/qunit/TestResultValue.java:/** Java wrapper for the %Qore QUnit::TestResultValue class
java/org/qore/lang/qunit/TestResultValue.java: *
java/org/qore/lang/qunit/TestResultValue.java: */
java/org/qore/lang/qunit/TestResultValue.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultValue.java:// jni module imports
java/org/qore/lang/qunit/TestResultValue.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultValue.java://! Class representing boolean True
java/org/qore/lang/qunit/TestResultValue.java:/**
java/org/qore/lang/qunit/TestResultValue.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultValue.java:    <tt>import qoremod.QUnit.TestResultValue;</tt>
java/org/qore/lang/qunit/TestResultValue.java:*/
java/org/qore/lang/qunit/TestResultValue.java:@Deprecated
java/org/qore/lang/qunit/TestResultValue.java:public class TestResultValue extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultValue.java:    //! creates the object with the given value
java/org/qore/lang/qunit/TestResultValue.java:    public TestResultValue(Object value) throws Throwable {
java/org/qore/lang/qunit/TestResultValue.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultValue", value));
java/org/qore/lang/qunit/TestResultValue.java:    }
java/org/qore/lang/qunit/TestResultValue.java:}
java/org/qore/lang/qunit/TestCode.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestCode.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/lang/qunit/TestCode.java://! This class is used for test code taking no arguments
java/org/qore/lang/qunit/TestCode.java:public interface TestCode extends QoreClosureMarker {
java/org/qore/lang/qunit/TestCode.java:    //! This method is called to run the test
java/org/qore/lang/qunit/TestCode.java:    void call() throws Throwable;
java/org/qore/lang/qunit/TestCode.java:}
java/org/qore/lang/qunit/TestCondition.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestCondition.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/lang/qunit/TestCondition.java://! This class is used for test code taking no arguments
java/org/qore/lang/qunit/TestCondition.java:public interface TestCondition extends QoreClosureMarker {
java/org/qore/lang/qunit/TestCondition.java:    //! This method is called to call the test condition logic
java/org/qore/lang/qunit/TestCondition.java:    Object call() throws Throwable;
java/org/qore/lang/qunit/TestCondition.java:}
java/org/qore/lang/qunit/TestResultExceptionDetail.java:/** Java wrapper for the %Qore QUnit::TestResulExceptionDetail class
java/org/qore/lang/qunit/TestResultExceptionDetail.java: *
java/org/qore/lang/qunit/TestResultExceptionDetail.java: */
java/org/qore/lang/qunit/TestResultExceptionDetail.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultExceptionDetail.java:// jni module imports
java/org/qore/lang/qunit/TestResultExceptionDetail.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultExceptionDetail.java://! Class representing Exception of a particular type with a particular detail message
java/org/qore/lang/qunit/TestResultExceptionDetail.java:/**
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    <tt>import qoremod.QUnit.TestResultExceptionDetail;</tt>
java/org/qore/lang/qunit/TestResultExceptionDetail.java:*/
java/org/qore/lang/qunit/TestResultExceptionDetail.java:@Deprecated
java/org/qore/lang/qunit/TestResultExceptionDetail.java:public class TestResultExceptionDetail extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    //! creates the object from the exception arguments
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    /** @param exceptionType corresponds to the \c "err" key of @ref Qore::ExceptionInfo "ExceptionInfo" (the first
java/org/qore/lang/qunit/TestResultExceptionDetail.java:        value of a @ref throw "throw statement")
java/org/qore/lang/qunit/TestResultExceptionDetail.java:        @param exceptionDetail corresponds to the \c "desc" key of @ref Qore::ExceptionInfo "ExceptionInfo"
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    */
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    public TestResultExceptionDetail(String exceptionType, String exceptionDetail) throws Throwable {
java/org/qore/lang/qunit/TestResultExceptionDetail.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultExceptionDetail", exceptionType, exceptionDetail));
java/org/qore/lang/qunit/TestResultExceptionDetail.java:    }
java/org/qore/lang/qunit/TestResultExceptionDetail.java:}
java/org/qore/lang/qunit/Test.java:/** Java wrapper for the %Qore QUnit::Test class
java/org/qore/lang/qunit/Test.java: *
java/org/qore/lang/qunit/Test.java: */
java/org/qore/lang/qunit/Test.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/Test.java:// jni module imports
java/org/qore/lang/qunit/Test.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/Test.java:import org.qore.jni.QoreObject;
java/org/qore/lang/qunit/Test.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/qunit/Test.java:// qore lang imports
java/org/qore/lang/qunit/Test.java:import org.qore.lang.qunit.*;
java/org/qore/lang/qunit/Test.java:// java imports
java/org/qore/lang/qunit/Test.java:import java.math.BigDecimal;
java/org/qore/lang/qunit/Test.java://! Base class (wrapping the %Qore QUnit::Test class) representing a simple test, implements an implicit main() method and all utility methods for testing
java/org/qore/lang/qunit/Test.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/qunit/Test.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/Test.java:    <tt>import qoremod.QUnit.Test;</tt>
java/org/qore/lang/qunit/Test.java:*/
java/org/qore/lang/qunit/Test.java:@Deprecated
java/org/qore/lang/qunit/Test.java:public class Test extends QoreObjectWrapper {
java/org/qore/lang/qunit/Test.java:    // static initialization
java/org/qore/lang/qunit/Test.java:    static {
java/org/qore/lang/qunit/Test.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c QUnit module
java/org/qore/lang/qunit/Test.java:        try {
java/org/qore/lang/qunit/Test.java:            QoreJavaApi.initQore();
java/org/qore/lang/qunit/Test.java:            QoreJavaApi.callFunction("load_module", "QUnit");
java/org/qore/lang/qunit/Test.java:        } catch (Throwable e) {
java/org/qore/lang/qunit/Test.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/qunit/Test.java:        }
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! creates the object based on the given Qore object
java/org/qore/lang/qunit/Test.java:    protected Test(QoreObject obj) throws Throwable {
java/org/qore/lang/qunit/Test.java:        super(obj);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! creates the object and sets the name of the test
java/org/qore/lang/qunit/Test.java:    public Test(String name, String version) throws Throwable {
java/org/qore/lang/qunit/Test.java:        super(QoreJavaApi.newObjectSave("QUnit::Test", name, version));
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! global setup; will be called once before tests are run
java/org/qore/lang/qunit/Test.java:    public void globalSetUp() throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("globalSetUp");
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! global tear down; will be called once after all tests are run
java/org/qore/lang/qunit/Test.java:    public void globalTearDown() throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("globalTearDown");
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Prototype method for setting up test environment. It will be called for each test individually.
java/org/qore/lang/qunit/Test.java:    public void setUp() throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("setUp");
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Prototype method for cleaning up test environemnt. It will be called after each test has executed.
java/org/qore/lang/qunit/Test.java:    public void tearDown() throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("tearDown");
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! facade for the system environment variables
java/org/qore/lang/qunit/Test.java:    public String getEnv(String key, String def) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return (String)obj.callMethod("getEnv", key, def);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! adds a test case to run
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:addTestCase("MyTest", \myTest());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param name the name of the test case
java/org/qore/lang/qunit/Test.java:        @param call the code to call that executes the test case
java/org/qore/lang/qunit/Test.java:    */
java/org/qore/lang/qunit/Test.java:    public void addTestCase(String name, TestCode call) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("addTestCase", name, call);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! adds a test case to run
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:addTestCase("MyTest", \myTest());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param name the name of the test case
java/org/qore/lang/qunit/Test.java:        @param call the code to call that executes the test case
java/org/qore/lang/qunit/Test.java:        @param args any optional arguments to the test case call
java/org/qore/lang/qunit/Test.java:    */
java/org/qore/lang/qunit/Test.java:    public void addTestCase(String name, TestCodeArgs call, Object... args) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("addTestCase", name, call, args);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:testAssertionValue("date > operator", now() > (now() - 1D), True);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @return the \a value argument
java/org/qore/lang/qunit/Test.java:        @note make sure and use testAssertion() for any calls that could throw an exception
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertionValue(String name, Object actual, Object expected) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertionValue", name, actual, expected);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value of number type
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param epsilon accepted difference
java/org/qore/lang/qunit/Test.java:        @return the \a actual argument
java/org/qore/lang/qunit/Test.java:        @note make sure and use testAssertion() for any calls that could throw an exception
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertionValue(String name, BigDecimal actual, BigDecimal expected, BigDecimal epsilon) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertionValue", name, actual, expected, epsilon);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value of number type
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @return the \a actual argument
java/org/qore/lang/qunit/Test.java:        @note make sure and use testAssertion() for any calls that could throw an exception
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertionValue(String name, BigDecimal actual, BigDecimal expected) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertionValue", name, actual, expected);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value of float type
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param epsilon accepted difference
java/org/qore/lang/qunit/Test.java:        @return the \a actual argument
java/org/qore/lang/qunit/Test.java:        @note make sure and use testAssertion() for any calls that could throw an exception
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertionValue(String name, float actual, float expected, float epsilon) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertionValue", name, actual, expected, epsilon);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value of float type
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param epsilon accepted difference
java/org/qore/lang/qunit/Test.java:        @return the \a actual argument
java/org/qore/lang/qunit/Test.java:        @note make sure and use testAssertion() for any calls that could throw an exception
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertionValue(String name, float actual, float expected) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertionValue", name, actual, expected);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a test value passes a regular expression match
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertRegex("regex string", string_method());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param regex_pattern the regular expression pattern string that the test value should match
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertRegex(String regex_pattern, String actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertRegex", regex_pattern, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a test value passes a regular expression match
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertRegex("regex string", string_method());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param regex_pattern the regular expression pattern string that the test value should match
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertRegex(String regex_pattern, String actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertRegex", regex_pattern, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a test value does not pass a regular expression match
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNRegex("regex string", string_method());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param regex_pattern the regular expression pattern string that the test value should not match
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNRegex(String regex_pattern, String actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNRegex", regex_pattern, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for no value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNothing(method_that_should_not_return_a value());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNothing(Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNothing", actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for no value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNothing(method_that_should_not_return_a value());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNothing(Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNothing", actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertEqSoft("5", method_that_should_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertEqSoft(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertEqSoft", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertEqSoft("5", method_that_should_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertEqSoft(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertEqSoft", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for inequality to an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNeqSoft("5", method_that_should_not_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the value that should not be equal to the test value with a soft comparison
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNeqSoft(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNeqSoft", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for inequality to an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNeqSoft("5", method_that_should_not_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the value that should not be equal to the test value with a soft comparison
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNeqSoft(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNeqSoft", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value with hard comparisons (types and values must be identical)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertEq(5, method_that_should_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertEq(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertEq", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for equality to an expected value with hard comparisons (types and values must be identical)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertEq(5, method_that_should_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertEq(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertEq", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for inequality to an expected value with hard comparisons (types and values must be identical)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNeq(5, method_that_should_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the value that should not be equal to the test value with a hard comparison
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNeq(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNeq", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a value for inequality to an expected value with hard comparisons (types and values must be identical)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNeq(5, method_that_should_return_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the value that should not be equal to the test value with a hard comparison
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNeq(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNeq", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a float value for equality to an expected value with an allowed error
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertFloatEq(2.5, 2.50001, 0.001);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param epsilon the allowed error
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertFloatEq(float expected, float actual, float epsilon, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertFloatEq", expected, actual, epsilon, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a float value for equality to an expected value with an allowed error
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertFloatEq(2.5, 2.50001, 0.001);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param epsilon the allowed error
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertFloatEq(float expected, float actual, float epsilon) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertFloatEq", expected, actual, epsilon);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a float value for equality to an expected value with an allowed error
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertFloatEq(2.5, 2.50001);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertFloatEq(float expected, float actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertFloatEq", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a number value for equality to an expected value with an allowed error
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNumberEq(2.5n, 2.50001n, 0.001n);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param epsilon the allowed error
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNumberEq(BigDecimal expected, BigDecimal actual, BigDecimal epsilon, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNumberEq", expected, actual, epsilon, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a number value for equality to an expected value with an allowed error
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNumberEq(2.5n, 2.50001n, 0.001n);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param epsilon the allowed error
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNumberEq(BigDecimal expected, BigDecimal actual, BigDecimal epsilon) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNumberEq", expected, actual, epsilon);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a number value for equality to an expected value with an allowed error
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertNumberEq(2.5n, 2.50001n);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected the expected value
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertNumberEq(BigDecimal expected, BigDecimal actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertNumberEq", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGtSoft("5", method_that_should_rturn_a_value_greater_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGtSoft(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGtSoft", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGtSoft("5", method_that_should_rturn_a_value_greater_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGtSoft(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGtSoft", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGt(5, method_that_should_rturn_a_value_greater_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGt(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGt", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGt(5, method_that_should_rturn_a_value_greater_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGt(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGt", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than or equal to than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGeSoft("5", method_that_should_rturn_a_value_greater_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGeSoft(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGeSoft", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than or equal to than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGeSoft("5", method_that_should_rturn_a_value_greater_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGeSoft(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGeSoft", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than or equal to an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGe(5, method_that_should_rturn_a_value_greater_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGe(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGe", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is greater than or equal to an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertGe(5, method_that_should_rturn_a_value_greater_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be less than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertGe(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertGe", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLtSoft("5", method_that_should_rturn_a_value_less_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLtSoft(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLtSoft", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLtSoft("5", method_that_should_rturn_a_value_less_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLtSoft(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLtSoft", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLt(5, method_that_should_rturn_a_value_less_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLt(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLt", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLt(5, method_that_should_rturn_a_value_less_than_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLt(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLt", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than or equal to than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLeSoft("5", method_that_should_rturn_a_value_less_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLeSoft(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLeSoft", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than or equal to than an expected value with soft comparisons (types may differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLeSoft("5", method_that_should_rturn_a_value_less_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLeSoft(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLeSoft", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than or equal to an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLe(5, method_that_should_rturn_a_value_less_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLe(Object expected, Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLe", expected, actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a value is less than or equal to an expected value with hard comparisons (types may not differ)
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertLe(5, method_that_should_rturn_a_value_less_than_or_equal_to_five());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expected a value that should be greater than or equal to \a actual
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertLe(Object expected, Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertLe", expected, actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a boolean value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertTrue(methodThatShouldReturnTrue());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertTrue(Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertTrue", actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a boolean value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertTrue(methodThatShouldReturnTrue());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertTrue(Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertTrue", actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a boolean value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertFalse(methodThatShouldReturnFalse());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertFalse(Object actual, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertFalse", actual, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests a boolean value
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertFalse(methodThatShouldReturnFalse());
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param actual the value generated by the test
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertFalse(Object actual) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertFalse", actual);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param expectedDesc the expected exception detail (desc field), ignored if NOTHING
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:        @param args optional arguments to the code
java/org/qore/lang/qunit/Test.java:        @param name an optional label for the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, String expectedDesc, TestCodeArgs theCode, Object[] args, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, expectedDesc, theCode, args, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param expectedDesc the expected exception detail (desc field), ignored if NOTHING
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:        @param args optional arguments to the code
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, String expectedDesc, TestCodeArgs theCode, Object[] args) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, expectedDesc, theCode, args);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param expectedDesc the expected exception detail (desc field), ignored if NOTHING
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, String expectedDesc, TestCodeArgs theCode) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, expectedDesc, theCode);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:        @param args optional arguments to the code
java/org/qore/lang/qunit/Test.java:        @param name an optional label for the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, TestCodeArgs theCode, Object[] args, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, theCode, args, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:        @param args optional arguments to the code
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, TestCodeArgs theCode, Object[] args) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, theCode, args);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param expectedDesc the expected exception detail (desc field), ignored if NOTHING
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:        @param name an optional label for the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, String expectedDesc, TestCode theCode, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, expectedDesc, theCode, null, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param expectedDesc the expected exception detail (desc field), ignored if NOTHING
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, String expectedDesc, TestCode theCode) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, expectedDesc, theCode);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:        @param name an optional label for the assertion
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, TestCode theCode, String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, theCode, null, name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests that a piece of code throws an exception with given description
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertThrows("DIVISION-BY-ZERO", "division by zero found in integer expression", sub(int a) {print(5/a);}, 0);
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param expectedErr the expected exception type
java/org/qore/lang/qunit/Test.java:        @param theCode the code to execute
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertThrows(String expectedErr, TestCode theCode) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertThrows", expectedErr, theCode);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Skips assertion on purpose
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:assertSkip("assertion name or reason to skip");
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void assertSkip(String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("assertSkip", name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Fails the test unconditionally
java/org/qore/lang/qunit/Test.java:    /** @par Example:
java/org/qore/lang/qunit/Test.java:        @code{.java}
java/org/qore/lang/qunit/Test.java:fail("Unexpected code executed");
java/org/qore/lang/qunit/Test.java:        @endcode
java/org/qore/lang/qunit/Test.java:        @param msg the failure message
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void fail(String msg) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("fail", msg);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion for a call returning no value (for example, to ensure that the call does not throw an exception)
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:        @param args Arguments passed to condition
java/org/qore/lang/qunit/Test.java:        @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void testNullAssertion(String name, TestConditionArgs condition, Object... args) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("testNullAssertion", name, condition, (Object)args);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion for a call returning an integer value and returns the value generated
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:        @param args Arguments passed to condition
java/org/qore/lang/qunit/Test.java:        @param expectedResultValue the expected value
java/org/qore/lang/qunit/Test.java:        @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertion(String name, TestConditionArgs condition, Object[] args, Object expectedResultValue) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertion", name, condition, (Object)args, expectedResultValue);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion for a call returning no value (for example, to ensure that the call does not throw an exception)
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:        @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void testNullAssertion(String name, TestCondition condition) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("testNullAssertion", name, condition);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion for a call returning an integer value and returns the value generated
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:        @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:        @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:        @param expectedResultValue the expected value
java/org/qore/lang/qunit/Test.java:        @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertion(String name, TestCondition condition, Object expectedResultValue) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertion", name, condition, null, expectedResultValue);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion and returns the value generated
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     * @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:     * @param args Arguments passed to condition
java/org/qore/lang/qunit/Test.java:     * @param expectedResult A class describing the expected result of condition; the default is QUnit::TestResultSuccess
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertion(String name, TestConditionArgs condition, Object[] args, AbstractTestResult expectedResult) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertion", name, condition, (Object)args, expectedResult.getQoreObject());
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion and returns the value generated
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     * @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:     * @param args Arguments passed to condition
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertion(String name, TestConditionArgs condition, Object[] args) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertion", name, condition, (Object)args);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion and returns the value generated
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     * @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:     * @param expectedResult A class describing the expected result of condition; the default is QUnit::TestResultSuccess
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertion(String name, TestCondition condition, AbstractTestResult expectedResult) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertion", name, condition, null, expectedResult.getQoreObject());
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Tests for a single assertion and returns the value generated
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param name the name or description of the assertion
java/org/qore/lang/qunit/Test.java:     * @param condition A test function whose result we are asserting
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @return the result of the \a condition call, if the immediate value has any further use
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public Object testAssertion(String name, TestCondition condition) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return obj.callMethod("testAssertion", name, condition);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Skips a given test, eg. because it may be missing some dependencies.
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param reason The reason for the test skip; used as the format argument with @ref Qore::vsprintf() "vsprintf()"
java/org/qore/lang/qunit/Test.java:     * with any remaining arguments
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void testSkip(String reason, Object... args) throws Throwable {
java/org/qore/lang/qunit/Test.java:        Object[] new_args = new Object[args.length + 1];
java/org/qore/lang/qunit/Test.java:        new_args[0] = reason;
java/org/qore/lang/qunit/Test.java:        System.arraycopy(args, 0, new_args, 1, args.length);
java/org/qore/lang/qunit/Test.java:        obj.callMethodArgs("testSkip", new_args);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Skips a given test, eg. because it may be missing some dependencies.
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param reason The reason for the test skip
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public void testSkip(String reason) throws Throwable {
java/org/qore/lang/qunit/Test.java:        obj.callMethod("testSkip", reason);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Compare two values for equality
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param a Argument 1
java/org/qore/lang/qunit/Test.java:     * @param b Argument 2
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @returns a == b
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public boolean equals(Object a, Object b) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return (boolean)obj.callMethod("equals", a, b);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Compare two values for inequality
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param a Argument 1
java/org/qore/lang/qunit/Test.java:     * @param b Argument 2
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @returns a != b
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public boolean notEquals(Object a, Object b) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return (boolean)obj.callMethod("notEquals", a, b);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Compare a string for match against a regexp
java/org/qore/lang/qunit/Test.java:    /**
java/org/qore/lang/qunit/Test.java:     * @param s String to match
java/org/qore/lang/qunit/Test.java:     * @param regexp Regular expression to match against
java/org/qore/lang/qunit/Test.java:     *
java/org/qore/lang/qunit/Test.java:     * @returns a == b
java/org/qore/lang/qunit/Test.java:     */
java/org/qore/lang/qunit/Test.java:    public boolean regexpMatches(String s, String regexp) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return (boolean)obj.callMethod("regexpMatches", s, regexp);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! Run the whole suite, report results
java/org/qore/lang/qunit/Test.java:    public int main() throws Throwable {
java/org/qore/lang/qunit/Test.java:        return ((Long)obj.callMethod("main")).intValue();
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! returns the assertion name for display purposes
java/org/qore/lang/qunit/Test.java:    public static String getAssertionName(String name) throws Throwable {
java/org/qore/lang/qunit/Test.java:        return (String)QoreJavaApi.callStaticMethod("QUnit::Test", "getAssertionName", name);
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:    //! returns the assertion name for display purposes
java/org/qore/lang/qunit/Test.java:    public static String getAssertionName() throws Throwable {
java/org/qore/lang/qunit/Test.java:        return (String)QoreJavaApi.callStaticMethod("QUnit::Test", "getAssertionName");
java/org/qore/lang/qunit/Test.java:    }
java/org/qore/lang/qunit/Test.java:}
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:/** Java wrapper for the %Qore QUnit::TestResultExceptionSubstring class
java/org/qore/lang/qunit/TestResultExceptionSubstring.java: *
java/org/qore/lang/qunit/TestResultExceptionSubstring.java: */
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:// jni module imports
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultExceptionSubstring.java://! Class representing Exception of a particular type and matching regexp for detail
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:/**
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    <tt>import qoremod.QUnit.TestResultExceptionSubstring;</tt>
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:*/
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:@Deprecated
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:public class TestResultExceptionSubstring extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    //! creates the object from the exception arguments
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    /** @param exceptionType corresponds to the \c "err" key of @ref Qore::ExceptionInfo "ExceptionInfo" (the first
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:        value of a @ref throw "throw statement")
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:        @param exceptionSubstring a substring to be matched with the \c "desc" key of
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:        @ref Qore::ExceptionInfo "ExceptionInfo"
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    */
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    public TestResultExceptionSubstring(String exceptionType, String exceptionSubstring) throws Throwable {
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultExceptionSubstring", exceptionType, exceptionSubstring));
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:    }
java/org/qore/lang/qunit/TestResultExceptionSubstring.java:}
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:/** Java wrapper for the %Qore QUnit::TestResultExceptionRegexp class
java/org/qore/lang/qunit/TestResultExceptionRegexp.java: *
java/org/qore/lang/qunit/TestResultExceptionRegexp.java: */
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:// jni module imports
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultExceptionRegexp.java://! Class representing Exception of a particular type and matching regexp for detail
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:/**
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    <tt>import qoremod.QUnit.TestResultExceptionRegexp;</tt>
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:*/
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:@Deprecated
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:public class TestResultExceptionRegexp extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    //! creates the object from the exception arguments
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    /** @param exceptionType corresponds to the \c "err" key of @ref Qore::ExceptionInfo "ExceptionInfo" (the first
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:        value of a @ref throw "throw statement")
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:        @param exceptionRegexp a regular expression string to be matched with the \c "desc" key of
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:        @ref Qore::ExceptionInfo "ExceptionInfo"
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    */
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    public TestResultExceptionRegexp(String exceptionType, String exceptionRegexp) throws Throwable {
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultExceptionRegexp", exceptionType, exceptionRegexp));
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:    }
java/org/qore/lang/qunit/TestResultExceptionRegexp.java:}
java/org/qore/lang/qunit/TestResultFailure.java:/** Java wrapper for the %Qore QUnit::TestResultFailure class
java/org/qore/lang/qunit/TestResultFailure.java: *
java/org/qore/lang/qunit/TestResultFailure.java: */
java/org/qore/lang/qunit/TestResultFailure.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultFailure.java:// jni module imports
java/org/qore/lang/qunit/TestResultFailure.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultFailure.java://! Class representing test call failure, both general (without detail) and specific (with detail)
java/org/qore/lang/qunit/TestResultFailure.java:/**
java/org/qore/lang/qunit/TestResultFailure.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultFailure.java:    <tt>import qoremod.QUnit.TestResultFailure;</tt>
java/org/qore/lang/qunit/TestResultFailure.java:*/
java/org/qore/lang/qunit/TestResultFailure.java:@Deprecated
java/org/qore/lang/qunit/TestResultFailure.java:public class TestResultFailure extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultFailure.java:    public TestResultFailure() throws Throwable {
java/org/qore/lang/qunit/TestResultFailure.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultFailure"));
java/org/qore/lang/qunit/TestResultFailure.java:    }
java/org/qore/lang/qunit/TestResultFailure.java:    //! Instantiate an annotated failure with string detail
java/org/qore/lang/qunit/TestResultFailure.java:    public TestResultFailure(String s) throws Throwable {
java/org/qore/lang/qunit/TestResultFailure.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultFailure", s));
java/org/qore/lang/qunit/TestResultFailure.java:    }
java/org/qore/lang/qunit/TestResultFailure.java:}
java/org/qore/lang/qunit/AbstractTestResult.java:/** Java wrapper for the %Qore QUnit::AbstractTestResult class
java/org/qore/lang/qunit/AbstractTestResult.java: *
java/org/qore/lang/qunit/AbstractTestResult.java: */
java/org/qore/lang/qunit/AbstractTestResult.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/AbstractTestResult.java:// jni module imports
java/org/qore/lang/qunit/AbstractTestResult.java:import org.qore.jni.QoreObject;
java/org/qore/lang/qunit/AbstractTestResult.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/qunit/AbstractTestResult.java://! The base class for test results
java/org/qore/lang/qunit/AbstractTestResult.java:/**
java/org/qore/lang/qunit/AbstractTestResult.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/AbstractTestResult.java:    <tt>import qoremod.QUnit.AbstractTestResult;</tt>
java/org/qore/lang/qunit/AbstractTestResult.java:*/
java/org/qore/lang/qunit/AbstractTestResult.java:@Deprecated
java/org/qore/lang/qunit/AbstractTestResult.java:public class AbstractTestResult extends QoreObjectWrapper {
java/org/qore/lang/qunit/AbstractTestResult.java:    //! creates the object based on the given Qore object
java/org/qore/lang/qunit/AbstractTestResult.java:    protected AbstractTestResult(QoreObject obj) throws Throwable {
java/org/qore/lang/qunit/AbstractTestResult.java:        super(obj);
java/org/qore/lang/qunit/AbstractTestResult.java:    }
java/org/qore/lang/qunit/AbstractTestResult.java:    //! compare two results for equality
java/org/qore/lang/qunit/AbstractTestResult.java:    public boolean equals(AbstractTestResult r) throws Throwable {
java/org/qore/lang/qunit/AbstractTestResult.java:        return (boolean)obj.callMethod("equals", r);
java/org/qore/lang/qunit/AbstractTestResult.java:    }
java/org/qore/lang/qunit/AbstractTestResult.java:    //! returns a string reprensentation of the result
java/org/qore/lang/qunit/AbstractTestResult.java:    public String toString() {
java/org/qore/lang/qunit/AbstractTestResult.java:        try {
java/org/qore/lang/qunit/AbstractTestResult.java:            return (String)obj.callMethod("toString");
java/org/qore/lang/qunit/AbstractTestResult.java:        } catch (Throwable e) {
java/org/qore/lang/qunit/AbstractTestResult.java:            return e.toString();
java/org/qore/lang/qunit/AbstractTestResult.java:        }
java/org/qore/lang/qunit/AbstractTestResult.java:    }
java/org/qore/lang/qunit/AbstractTestResult.java:}
java/org/qore/lang/qunit/TestResultSuccess.java:/** Java wrapper for the %Qore QUnit::TestResultSuccess class
java/org/qore/lang/qunit/TestResultSuccess.java: *
java/org/qore/lang/qunit/TestResultSuccess.java: */
java/org/qore/lang/qunit/TestResultSuccess.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestResultSuccess.java:// jni module imports
java/org/qore/lang/qunit/TestResultSuccess.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/qunit/TestResultSuccess.java://! Class representing boolean True
java/org/qore/lang/qunit/TestResultSuccess.java:/**
java/org/qore/lang/qunit/TestResultSuccess.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/qunit/TestResultSuccess.java:    <tt>import qoremod.QUnit.TestResultSuccess;</tt>
java/org/qore/lang/qunit/TestResultSuccess.java:*/
java/org/qore/lang/qunit/TestResultSuccess.java:@Deprecated
java/org/qore/lang/qunit/TestResultSuccess.java:public class TestResultSuccess extends AbstractTestResult {
java/org/qore/lang/qunit/TestResultSuccess.java:    public TestResultSuccess() throws Throwable {
java/org/qore/lang/qunit/TestResultSuccess.java:        super(QoreJavaApi.newObjectSave("QUnit::TestResultSuccess"));
java/org/qore/lang/qunit/TestResultSuccess.java:    }
java/org/qore/lang/qunit/TestResultSuccess.java:}
java/org/qore/lang/qunit/TestConditionArgs.java:package org.qore.lang.qunit;
java/org/qore/lang/qunit/TestConditionArgs.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/lang/qunit/TestConditionArgs.java://! This class is used for test code taking an arbitrary number of arguments
java/org/qore/lang/qunit/TestConditionArgs.java:public interface TestConditionArgs extends QoreClosureMarker {
java/org/qore/lang/qunit/TestConditionArgs.java:    //! This method is called to call the test condition logic
java/org/qore/lang/qunit/TestConditionArgs.java:    Object call(Object... args) throws Throwable;
java/org/qore/lang/qunit/TestConditionArgs.java:}
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:/** Java wrapper for the %Qore BulkUpsertOperation class
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java: *
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java: */
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:package org.qore.lang.bulksqlutil;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:// jni module imports
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:// Qore imports
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:import org.qore.lang.sqlutil.AbstractTable;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:import org.qore.lang.bulksqlutil.BulkRowCallback;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:// java imports
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:import java.util.Map;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java://! base class for bulk DML upsert operations
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:/** This class assists with bulk upsert (SQL merge) operations into a target @ref SqlUtil::AbstractTable "table".
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    @par Submitting Data
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    To use this class, queue data in the form of a hash (a single row or a set of rows) or a list of rows
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    by calling the queueData() method.\n\n
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    The queueData() method queues data to be written to the database; the queue is flush()ed
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    automatically when \c block_size rows have been queued.
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    @par Flushing and Discarding Data
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    Each call to flush() (whether implicit or explicit) will cause a single call to be made to
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    the dataserver; all queued rows are sent in a single bulk DML call, which allows for efficient
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    processing of large amounts of data.\n\n
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    A call to flush() must be made before committing the transaction to ensure that any remaining
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    rows in the internal queue have been written to the database.  Because the destructor() will
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    throw an exception if any data is left in the internal queue when the object is destroyed, a call
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    to discard() must be made prior to the destruction of the object in case of errors.
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    @code{.java}
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:try {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    BulkUpsertOperation op1 = new BulkUpsertOperation(table1);
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    BulkUpsertOperation op2 = new BulkUpsertOperation(table2);
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    for (Map<String, Object> i : data1) {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        op1.queueData(i);
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    for (Map<String, Object> i : data2) {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        op2.queueData(i);
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:}
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    @endcode
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    @note Each bulk DML object must be manually flush()ed before committing or manually
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    discard()ed before rolling back to ensure that all data is managed properly in the same
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    transaction and to ensure that no exception is thrown in Qore destructor.
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    See the example above for more information.
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    <tt>import qoremod.BulkSqlUtil.BulkUpsertOperation;</tt>
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:*/
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:@Deprecated
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:public class BulkUpsertOperation extends AbstractBulkOperation {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    //! creates the object from the supplied arguments
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    /** @param target the target table object
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        @param opts an optional hash of options for the object as follows:
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        - \c "block_size": the number of rows executed at once (default: 1000)
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        - \c "info_log": an optional info logging callback of type @ref LogCallback
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        - \c "upsert_strategy": the upsert strategy to use; default AbstractTable.UpsertAuto; see @ref upsert_options for possible values for the upsert strategy
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    */
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    public BulkUpsertOperation(AbstractTable target, Map<String, Object> opts) throws Throwable {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        super(QoreJavaApi.newObjectSave("BulkSqlUtil::BulkUpsertOperation", target.getQoreObject(), opts));
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    //! creates the object from the supplied arguments
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    /** @param target the target table object
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    */
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    public BulkUpsertOperation(AbstractTable target) throws Throwable {
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:        super(QoreJavaApi.newObjectSave("BulkSqlUtil::BulkUpsertOperation", target.getQoreObject()));
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkUpsertOperation.java:}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:/** Java wrapper for the %Qore BulkInsertOperation class
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java: *
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java: */
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:package org.qore.lang.bulksqlutil;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:// jni module imports
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:// Qore imports
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:import org.qore.lang.sqlutil.AbstractTable;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:import org.qore.lang.bulksqlutil.BulkRowCallback;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:// java imports
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:import java.util.Map;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java://! Java wrapper for the Qore class for bulk DML insert operations
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:/** This class assists with bulk inserts into a target @ref org.qore.lang.sqlutil.AbstractTable "table".
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @par Submitting Data
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    To use this class, queue data in the form of a hash (a single row or a set of rows) or a list of rows
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    by calling the queueData() method.\n\n
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    The queueData() method queues data to be written to the database; the queue is flush()ed
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    automatically when \c block_size rows have been queued.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @par Retrieving Data From Inserts
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    It is possible to use @ref sql_iop_funcs in the hashes submitted with queueData(); in this case the
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    BulkInsertOperation class assumes that every row has the same operations as in the first row.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    Output data can then be processed by using the \c rowcode option in the constructor() or by calling
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    setRowCode().\n\n
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    In case @ref sql_iop_funcs are used and a \c rowcode option is set, then the SQL DML query for inserts
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    is creating using the \c "returning" @ref SqlUtil::AbstractTable::InsertOptions "insert option", therefore
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    the DBI driver in this case must support this option as well.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @par Flushing and Discarding Data
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    Each call to flush() (whether implicit or explicit) will cause a single call to be made to
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    the dataserver; all queued rows are sent in a single bulk DML call, which allows for efficient
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    processing of large amounts of data.\n\n
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    A call to flush() must be made before committing the transaction to ensure that any remaining
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    rows in the internal queue have been written to the database.  Because the destructor() will
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    throw an exception if any data is left in the internal queue when the object is destroyed, a call
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    to discard() must be made prior to the destruction of the object in case of errors.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @code{.java}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:try {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    BulkInsertOperation op1 = new BulkInsertOperation(table1);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    BulkInsertOperation op2 = new BulkInsertOperation(table2);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    for (Map<String, Object> i : data1) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        op1.queueData(i);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    for (Map<String, Object> i : data2) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        op2.queueData(i);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @endcode
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @note Each bulk DML object must be manually flush()ed before committing or manually
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    discard()ed before rolling back to ensure that all data is managed properly in the same
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    transaction and to ensure that no exception is thrown in Qore destructor.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    See the example above for more information.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    <tt>import qoremod.BulkSqlUtil.BulkInsertOperation;</tt>
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:*/
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:@Deprecated
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:public class BulkInsertOperation extends AbstractBulkOperation {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    //! creates the object from the supplied arguments
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    /** @param target the target table object
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @param opts an optional hash of options for the object as follows:
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        - \c "info_log": an optional info logging callback of type @ref LogCallback
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        - \c "block_size": the number of rows executed at once (default: 1000)
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        - \c "rowcode": a per-row callback that must be an instance of
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:          @ref org.qore.lang.bulksqlutil.BulkRowCallback "BulkRowCallback"; the
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:          @ref org.qore.lang.bulksqlutil.BulkRowCallback.call() "BulkRowCallback.call()" method will be called for
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:          every row after a bulk insert; the hash argument representing the row inserted will also contain any output
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:          values if applicable (for example if @ref sql_iop_funcs are used in the row hashes submitted to queueData())
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @see setRowCode()
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    */
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    public BulkInsertOperation(AbstractTable target, Map<String, Object> opts) throws Throwable {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        super(QoreJavaApi.newObjectSave("BulkSqlUtil::BulkInsertOperation", target.getQoreObject(), opts));
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    //! creates the object from the supplied arguments
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    /** @param target the target table object
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @see setRowCode()
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    */
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    public BulkInsertOperation(AbstractTable target) throws Throwable {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        super(QoreJavaApi.newObjectSave("BulkSqlUtil::BulkInsertOperation", target.getQoreObject()));
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    //! sets a row callback that will be called when data has been sent to the database and all output data is available; must accept a hash argument that represents the data written to the database including any output arguments. This code will be reset once the transaction is commited.
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    /** @par Example:
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @code{.java}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:try {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    inserter.setRowCode(new MyRowCallback());
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    for (Map<String, Object> i : data) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        inserter.queueData(i);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    inserter.flush();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    inserter.discard();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @endcode
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @param rowc a row callback that will be called when data has been sent to the database and all output data is
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        available; must accept a hash argument that represents the data written to the database including any output
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        arguments
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @note
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        - the row callback can also be set by using the \c "rowcode" option in the constructor()
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        - if this method is not called before the first row is queued then output values will not be retrieved; the
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:          initial query is built when the template row is queued and output values are only retrieved if a \c rowcode
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:          callback is set beforehand
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    */
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    public void setRowCode(BulkRowCallback rowc) throws Throwable {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        obj.callMethod("setRowCode", rowc);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    //! clears the row callback called when data has been sent to the database and all output data is available
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    /** @par Example:
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @code{.java}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:try {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // clear any row callback
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    inserter.setRowCode();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    for (Map<String, Object> i : data) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        inserter.queueData(i);
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    inserter.flush();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    inserter.discard();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:}
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        @endcode
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    */
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    public void setRowCode() throws Throwable {
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:        obj.callMethod("setRowCode");
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:    }
java/org/qore/lang/bulksqlutil/BulkInsertOperation.java:}
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:package org.qore.lang.bulksqlutil;
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:import java.util.Map;
java/org/qore/lang/bulksqlutil/BulkRowCallback.java://! This class is used for row code callbacks with bulk SQL classes
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:public interface BulkRowCallback extends QoreClosureMarker {
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:    //! This method is called when data has been sent to the database and all output data is available; must accept a hash argument that represents the data written to the database including any output arguments
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:    void call(Map<String, Object> row);
java/org/qore/lang/bulksqlutil/BulkRowCallback.java:}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:/** Java wrapper for the %Qore AbstractBulkOperation class
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java: *
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java: */
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:package org.qore.lang.bulksqlutil;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// jni module imports
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:import org.qore.jni.QoreObject;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// Qore imports
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:import org.qore.lang.sqlutil.AbstractTable;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// java imports
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:import java.util.Map;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java://! Java wrapper for the base %Qore class for bulk DML operations
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:/** This class provides the majority of the API support for bulk DML operations for the concrete child classes that
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    inherit it.
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    @par Submitting Data
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    To use this class's API, queue data in the form of a hash (a single row or a set of rows) or a list of rows
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    by calling the queueData() method.\n\n
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    The queueData() method queues data to be written to the database; the queue is flush()ed
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    automatically when \c block_size rows have been queued.
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    @par Flushing and Discarding Data
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    Each call to flush() (whether implicit or explicit) will cause a single call to be made to
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    the dataserver; all queued rows are sent in a single bulk DML call, which allows for efficient
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    processing of large amounts of data.\n\n
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    A call to flush() must be made before committing the transaction to ensure that any remaining
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    rows in the internal queue have been written to the database.  Because the destructor() will
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    throw an exception if any data is left in the internal queue when the object is destroyed, a call
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    to discard() must be made prior to the destruction of the object in case of errors.
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    @code{.java}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:try {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data1) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op1.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data2) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op2.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    @endcode
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    @note
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    - Each bulk DML object must be manually flush()ed before committing or manually
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:      discard()ed before rolling back to ensure that all data is managed properly in the same
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:      transaction and to ensure that no exception is thrown in the destructor().
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:      See the example above for more information.
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    - If the underlying driver does not support bulk operations, then such support is
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:      emulated with single SQL operations; in such cases performance will be reduced.  Call
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:      @ref SqlUtil::AbstractTable::hasArrayBind() to check at runtime if the driver supports
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:      bulk SQL operations.
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    - loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    <tt>import qoremod.BulkSqlUtil.AbstractBulkOperation;</tt>
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:*/
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:@Deprecated
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:public class AbstractBulkOperation extends QoreObjectWrapper {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // static initialization
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    static {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c BulkSqlUtil module
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        try {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:            QoreJavaApi.initQore();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:            QoreJavaApi.callFunction("load_module", "BulkSqlUtil");
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        } catch (Throwable e) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! creates a new AbstractBulkOperation object wrapping the Qore object
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public AbstractBulkOperation(QoreObject obj) throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        super(obj);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! queues row data in the block buffer; the block buffer is flushed to the DB if the buffer size reaches the limit defined by the \c block_size option; does not commit the transaction
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    /** @par Example:
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @code{.java}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:try {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data1) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op1.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data2) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op2.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @endcode
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @param data the input record or record set in case a hash of lists is passed; each hash represents a row (keys are column names and values are column values); when inserting, @ref sql_iop_funcs can also be used.  If at least one hash value is a list, then any non-hash (indicating an @ref sql_iop_funcs "insert opertor hash") and non-list values will be assumed to be constant values for every row and therefore future calls of this method (and overloaded variants) will ignore any values given for such keys and use the values given in the first call.
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @note
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - the first row passed is taken as a template row; every other row must always have the same keys in the same order, otherwise the results are unpredictable
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - if any @ref sql_iop_funcs are used, then they are assumed to be identical in every row
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction or destroying the object when using this method
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush() or discard() needs to be executed individually for each bulk operation object used in the block whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @see
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - discard()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    */
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public void queueData(Map<String, Object> data) throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        obj.callMethod("queueData", data);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! queues row data in the block buffer; the block buffer is flushed to the DB if the buffer size reaches the limit defined by the \c block_size option; does not commit the transaction
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    /** @par Example:
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @code{.java}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:try {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.queueData(l1);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.queueData(l2);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @endcode
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @param l a list of hashes representing the input row data; each hash represents a row (keys are column names and values are column values); when inserting, @ref sql_iop_funcs can also be used
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @note
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - the first row passed is taken as a template row; every other row must always have the same keys in the same order, otherwise the results are unpredictable
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - if any @ref sql_iop_funcs are used, then they are assumed to be identical in every row
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction or destroying the object when using this method
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush() or discard() needs to be executed individually for each bulk operation object used in the block whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @see
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - discard()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    */
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public void queueData(Map<String, Object>[] l) throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        obj.callMethod("queueData", (Object)l);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! flushes any remaining batched data to the database; this method should always be called before committing the transaction or destroying the object
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    /** @par Example:
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @code{.java}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:try {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data1) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op1.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data2) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op2.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @endcode
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @note
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction or destroying the object when using this method
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush() or discard() needs to be executed individually for each bulk operation object used in the block whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @see
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - queueData()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - discard()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    */
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public void flush() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        obj.callMethod("flush");
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! discards any buffered batched data; this method should be called before destroying the object if an error occurs
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    /** @par Example:
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @code{.java}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:// single commit and rollback
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:try {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // data is queued and flushed automatically when the buffer is full
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data1) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op1.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    for (Map<String, Object> i : data2) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        op2.queueData(i);
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    // each operation needs to be flushed or discarded individually
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.flush();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.commit();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:} catch (Throwable e) {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op1.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    op2.discard();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    ds.rollback();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    throw e;
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:}
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @endcode
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @note
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - make sure to call flush() before committing the transaction or discard() before rolling back the transaction or destroying the object when using this method
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush() or discard() needs to be executed individually for each bulk operation object used in the block whereas the DB transaction needs to be committed or rolled back once per datasource
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        @see
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - queueData()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        - flush()
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    */
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public void discard() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        obj.callMethod("discard");
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! flushes any queued data and commits the transaction
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public void commit() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        obj.callMethod("commit");
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! discards any queued data and rolls back the transaction
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public void rollback() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        obj.callMethod("rollback");
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! returns the table name
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public String getTableName() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        return (String)obj.callMethod("getTableName");
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! returns the underlying SqlUtil::AbstractTable object
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public AbstractTable getTable() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        // callMethodSave() is not needed here as the strong reference to the
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        // Qore object is stored in the current object
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        return new AbstractTable((QoreObject)obj.callMethod("getTable"));
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! returns the @ref Qore::SQL::AbstractDatasource "AbstractDatasource" object associated with this object
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public AbstractDatasource getDatasource() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        // callMethodSave() is not needed here as the strong reference to the
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        // Qore object is stored in the current object
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        return new AbstractDatasource((QoreObject)obj.callMethod("getDatasource"));
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    //! returns the affected row count
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    public int getRowCount() throws Throwable {
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:        return ((Long)obj.callMethod("getRowCount")).intValue();
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:    }
java/org/qore/lang/bulksqlutil/AbstractBulkOperation.java:}
java/org/qore/lang/smtpclient/SmtpClient.java:/** Java wrapper for the %Qore SmtpClient class
java/org/qore/lang/smtpclient/SmtpClient.java: *
java/org/qore/lang/smtpclient/SmtpClient.java: */
java/org/qore/lang/smtpclient/SmtpClient.java:package org.qore.lang.smtpclient;
java/org/qore/lang/smtpclient/SmtpClient.java:// java imports
java/org/qore/lang/smtpclient/SmtpClient.java:import java.util.Map;
java/org/qore/lang/smtpclient/SmtpClient.java:import java.util.HashMap;
java/org/qore/lang/smtpclient/SmtpClient.java:// jni module imports
java/org/qore/lang/smtpclient/SmtpClient.java:import org.qore.jni.QoreObject;
java/org/qore/lang/smtpclient/SmtpClient.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/smtpclient/SmtpClient.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/smtpclient/SmtpClient.java:import org.qore.jni.QoreRelativeTime;
java/org/qore/lang/smtpclient/SmtpClient.java:// qore imports
java/org/qore/lang/smtpclient/SmtpClient.java:import org.qore.lang.mailmessage.Message;
java/org/qore/lang/smtpclient/SmtpClient.java://! Java wrapper for the @ref Qore::SmtpClient class in %Qore
java/org/qore/lang/smtpclient/SmtpClient.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/smtpclient/SmtpClient.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/smtpclient/SmtpClient.java:    <tt>import qoremod.SmtpClient.SmtpClient;</tt>
java/org/qore/lang/smtpclient/SmtpClient.java:*/
java/org/qore/lang/smtpclient/SmtpClient.java:@Deprecated
java/org/qore/lang/smtpclient/SmtpClient.java:public class SmtpClient extends QoreObjectWrapper {
java/org/qore/lang/smtpclient/SmtpClient.java:    // static initialization
java/org/qore/lang/smtpclient/SmtpClient.java:    static {
java/org/qore/lang/smtpclient/SmtpClient.java:        // initialize the Qore library if necessary
java/org/qore/lang/smtpclient/SmtpClient.java:        try {
java/org/qore/lang/smtpclient/SmtpClient.java:            QoreJavaApi.initQore();
java/org/qore/lang/smtpclient/SmtpClient.java:            QoreJavaApi.callFunction("load_module", "SmtpClient");
java/org/qore/lang/smtpclient/SmtpClient.java:        } catch (Throwable e) {
java/org/qore/lang/smtpclient/SmtpClient.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/smtpclient/SmtpClient.java:        }
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! creates the object
java/org/qore/lang/smtpclient/SmtpClient.java:    public SmtpClient(QoreObject ds) {
java/org/qore/lang/smtpclient/SmtpClient.java:        super(ds);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! creates the SmtpClient object
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @param host the hostname of the SMTP server (use \c "[hostname]" to explicitly specify an ipv6 connection)
java/org/qore/lang/smtpclient/SmtpClient.java:        @param port the port number of the SMTP server
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    public SmtpClient(String host, int port) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        super(QoreJavaApi.newObjectSave("SmtpClient::SmtpClient", host, port));
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! creates the SmtpClient object
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @par Example:
java/org/qore/lang/smtpclient/SmtpClient.java:        @code{.py}
java/org/qore/lang/smtpclient/SmtpClient.java:SmtpClient smtp("smtptls://user@gmail.com:password@smtp.gmail.com", \log(), \log());
java/org/qore/lang/smtpclient/SmtpClient.java:        @endcode
java/org/qore/lang/smtpclient/SmtpClient.java:        @param url the URL of the SMTP server (use \c "[hostname]" or \c "[address]" for ipv6 connections); if no
java/org/qore/lang/smtpclient/SmtpClient.java:        protocol (scheme) and no port is given for non-UNIX sockets, then @ref SmtpPort is used as the default port
java/org/qore/lang/smtpclient/SmtpClient.java:        number.  This argument is parsed with parse_url(); see @ref smtpclient_protocols for a description of the
java/org/qore/lang/smtpclient/SmtpClient.java:        handling of the protocol (scheme) component of the URL including default ports per protocol (scheme). If an
java/org/qore/lang/smtpclient/SmtpClient.java:        unknown protocol (scheme) is given then a \c SMTP-UNKNOWN-PROTOCOL exception is raised
java/org/qore/lang/smtpclient/SmtpClient.java:        @throw PARSE-URL-ERROR the \a url argument could not be parsed with parse_url()
java/org/qore/lang/smtpclient/SmtpClient.java:        @throw SMTPCLIENT-UNKNOWN-PROTOCOL the protocol (scheme) given is unknown or unsupported
java/org/qore/lang/smtpclient/SmtpClient.java:        @throw SMTPCLIENT-INVALID-AUTHENTICATION partial authentication credentials passed; the username or password
java/org/qore/lang/smtpclient/SmtpClient.java:        is missing
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    public SmtpClient(String url) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        super(QoreJavaApi.newObjectSave("SmtpClient::SmtpClient", url));
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! Returns the connection target string
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @since %SmtpClient 1.7
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    public String getTarget() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (String)obj.callMethod("getTarget");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the TLS/SSL flag
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @param n_tls if @ref True "True" then use TLS/SSL; if the TLS/SSL flag is set then the client will issue a
java/org/qore/lang/smtpclient/SmtpClient.java:        \c "STARTTLS" command after connecting and negotiate a secure TLS/SSL connection to the server; will also in
java/org/qore/lang/smtpclient/SmtpClient.java:        this case turn off the SSL connection flag
java/org/qore/lang/smtpclient/SmtpClient.java:     */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void tls(boolean n_tls) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("tls", n_tls);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the TLS/SSL flag
java/org/qore/lang/smtpclient/SmtpClient.java:    public boolean tls() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (boolean)obj.callMethod("tls");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the SSL connection flag
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @param n_ssl if @ref True "True" then connections to the SMTP server will immediately try to negotiate
java/org/qore/lang/smtpclient/SmtpClient.java:        transport layer TSL/SSL security; will also in this case turn off the TLS/SSL \c "STARTTLS" application layer
java/org/qore/lang/smtpclient/SmtpClient.java:        security flag
java/org/qore/lang/smtpclient/SmtpClient.java:     */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void ssl(boolean n_ssl) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("ssl", n_ssl);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the SSL connection flag
java/org/qore/lang/smtpclient/SmtpClient.java:    public boolean ssl() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (boolean)obj.callMethod("ssl");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the username and password for authenticated connections
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @param n_user the username to set for authentication
java/org/qore/lang/smtpclient/SmtpClient.java:        @param n_pass the password to set for authentication
java/org/qore/lang/smtpclient/SmtpClient.java:        @note
java/org/qore/lang/smtpclient/SmtpClient.java:        - Currently this class only knows how to do AUTH PLAIN authentication
java/org/qore/lang/smtpclient/SmtpClient.java:        - This method is subject to thread serialization
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void setUserPass(String n_user, String n_pass) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("setUserPass", n_user, n_pass);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets or disables test mode; no connections are made in test mode
java/org/qore/lang/smtpclient/SmtpClient.java:    public void test(boolean ns) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("test", ns);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the test mode flag
java/org/qore/lang/smtpclient/SmtpClient.java:    public boolean test() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (boolean)obj.callMethod("test");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! Connect to the server with the connection parameters set in the @ref constructor()
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @note
java/org/qore/lang/smtpclient/SmtpClient.java:        - For possible exceptions, see %Qore's @ref Qore::Socket::connect() "Socket::connect()" method
java/org/qore/lang/smtpclient/SmtpClient.java:        - This method is subject to thread serialization
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void connect() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("connect");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! return connection status
java/org/qore/lang/smtpclient/SmtpClient.java:    public boolean isConnected() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (boolean)obj.callMethod("isConnected");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! disconnect from the server
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @note This method is subject to thread serialization
java/org/qore/lang/smtpclient/SmtpClient.java:     */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void disconnect() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("disconnect");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the read timeout from an integer in milliseconds
java/org/qore/lang/smtpclient/SmtpClient.java:    public void setReadTimeout(int to) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("setReadTimeout", to);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the read timeout
java/org/qore/lang/smtpclient/SmtpClient.java:    public void setReadTimeout(QoreRelativeTime to) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("setReadTimeout", to);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the read timeout as an integer giving milliseconds
java/org/qore/lang/smtpclient/SmtpClient.java:    public int getReadTimeoutMs() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return ((Long)obj.callMethod("getReadTimeoutMs")).intValue();
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the read timeout as a relative time value
java/org/qore/lang/smtpclient/SmtpClient.java:    public QoreRelativeTime getReadTimeoutDate() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (QoreRelativeTime)obj.callMethod("getReadTimeoutDate");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the connect timeout from an integer in milliseconds
java/org/qore/lang/smtpclient/SmtpClient.java:    public void setConnectTimeout(int to) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("setConnectTimeout", to);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! sets the connect timeout
java/org/qore/lang/smtpclient/SmtpClient.java:    public void setConnectTimeout(QoreRelativeTime to) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("setConnectTimeout", to);
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the connect timeout as an integer giving milliseconds
java/org/qore/lang/smtpclient/SmtpClient.java:    public int getConnectTimeoutMs() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return ((Long)obj.callMethod("getConnectTimeoutMs")).intValue();
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! returns the connect timeout as a relative time value
java/org/qore/lang/smtpclient/SmtpClient.java:    public QoreRelativeTime getConnectTimeoutDate() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (QoreRelativeTime)obj.callMethod("getConnectTimeoutDate");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! send a Message to the server
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @param message the Message to send
java/org/qore/lang/smtpclient/SmtpClient.java:        @return a hash of data returned by the SMTP server (the return structure hashes described below are made up of
java/org/qore/lang/smtpclient/SmtpClient.java:        the following keys: \c "code": the return code, \c "desc": the string description):
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c HELO or \c EHLO: a hash of the reply received from the \c HELO or \c EHLO command
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c RCPT: hash keyed by email address with hash return structures values for the RCPT TO command
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c MSGID: return structure after the send; generally contains message id
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c QUIT: the server response of the disconnect command
java/org/qore/lang/smtpclient/SmtpClient.java:        @note This method is subject to thread serialization
java/org/qore/lang/smtpclient/SmtpClient.java:        @throw MESSAGE-ERROR the message is incomplete and cannot be sent
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/smtpclient/SmtpClient.java:    public HashMap<String, HashMap<String, Object>> sendMessage(Message message) throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (HashMap<String, HashMap<String, Object>>)obj.callMethod("sendMessage", message.getQoreObject());
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! force disconnect of socket without error
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @note This method is subject to thread serialization
java/org/qore/lang/smtpclient/SmtpClient.java:     */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void forceDisconnect() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("forceDisconnect");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! Returns performance statistics for the socket
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @par Example:
java/org/qore/lang/smtpclient/SmtpClient.java:        @code{.py}
java/org/qore/lang/smtpclient/SmtpClient.java:HashMap<String, Object> h = smtp.getUsageInfo();
java/org/qore/lang/smtpclient/SmtpClient.java:        @endcode
java/org/qore/lang/smtpclient/SmtpClient.java:        @return a hash with the following keys:
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "bytes_sent": an integer giving the total amount of bytes sent
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "bytes_recv": an integer giving the total amount of bytes received
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "us_sent": an integer giving the total number of microseconds spent sending data
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "us_recv": an integer giving the total number of microseconds spent receiving data
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "arg": the optional argument for warning hashes if applicable
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "timeout": the warning timeout in microseconds if set
java/org/qore/lang/smtpclient/SmtpClient.java:        - \c "min_throughput": the minimum warning throughput in bytes/sec if set
java/org/qore/lang/smtpclient/SmtpClient.java:        @since %SmtpClient 1.3
java/org/qore/lang/smtpclient/SmtpClient.java:        @see clearStats()
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/smtpclient/SmtpClient.java:    public HashMap<String, Object> getUsageInfo() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        return (HashMap<String, Object>)obj.callMethod("getUsageInfo");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:    //! Clears performance statistics
java/org/qore/lang/smtpclient/SmtpClient.java:    /** @par Example:
java/org/qore/lang/smtpclient/SmtpClient.java:        @code{.py}
java/org/qore/lang/smtpclient/SmtpClient.java:smtp.clearStats();
java/org/qore/lang/smtpclient/SmtpClient.java:        @endcode
java/org/qore/lang/smtpclient/SmtpClient.java:        @since %SmtpClient 1.3
java/org/qore/lang/smtpclient/SmtpClient.java:        @see getUsageInfo()
java/org/qore/lang/smtpclient/SmtpClient.java:    */
java/org/qore/lang/smtpclient/SmtpClient.java:    public void clearStats() throws Throwable {
java/org/qore/lang/smtpclient/SmtpClient.java:        obj.callMethod("clearStats");
java/org/qore/lang/smtpclient/SmtpClient.java:    }
java/org/qore/lang/smtpclient/SmtpClient.java:}
java/org/qore/lang/AbstractIterator.java:/** Java wrapper for the %Qore AbstractIterator class
java/org/qore/lang/AbstractIterator.java: *
java/org/qore/lang/AbstractIterator.java: */
java/org/qore/lang/AbstractIterator.java:package org.qore.lang;
java/org/qore/lang/AbstractIterator.java:// jni module imports
java/org/qore/lang/AbstractIterator.java:import org.qore.jni.QoreObject;
java/org/qore/lang/AbstractIterator.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/AbstractIterator.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/AbstractIterator.java://! Java wrapper for the @ref Qore::AbstractIterator class in Qore
java/org/qore/lang/AbstractIterator.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/AbstractIterator.java: *  @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/AbstractIterator.java: *  <tt>import qore.Qore.AbstractIterator;</tt>
java/org/qore/lang/AbstractIterator.java: */
java/org/qore/lang/AbstractIterator.java:@Deprecated
java/org/qore/lang/AbstractIterator.java:public class AbstractIterator extends QoreObjectWrapper {
java/org/qore/lang/AbstractIterator.java:    // static initialization
java/org/qore/lang/AbstractIterator.java:    static {
java/org/qore/lang/AbstractIterator.java:        // loads and initializes the Qore library and the jni module (if necessary)
java/org/qore/lang/AbstractIterator.java:        try {
java/org/qore/lang/AbstractIterator.java:            QoreJavaApi.initQore();
java/org/qore/lang/AbstractIterator.java:        } catch (Throwable e) {
java/org/qore/lang/AbstractIterator.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/AbstractIterator.java:        }
java/org/qore/lang/AbstractIterator.java:    }
java/org/qore/lang/AbstractIterator.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/AbstractIterator.java:    public AbstractIterator(QoreObject obj) throws Throwable {
java/org/qore/lang/AbstractIterator.java:        super(obj);
java/org/qore/lang/AbstractIterator.java:    }
java/org/qore/lang/AbstractIterator.java:    //! Moves the current position to the next element; returns @ref False if there are no more elements
java/org/qore/lang/AbstractIterator.java:    /** This method will return @ref True again after it returns @ref False once if the object being iterated is not empty, otherwise it will always return @ref False.
java/org/qore/lang/AbstractIterator.java:        The iterator object should not be used after this method returns @ref False
java/org/qore/lang/AbstractIterator.java:        @return @ref False if there are no more elements (in which case the iterator object is invalid and should not be used); @ref True if successful (meaning that the iterator object is valid)
java/org/qore/lang/AbstractIterator.java:    */
java/org/qore/lang/AbstractIterator.java:    public boolean next() throws Throwable {
java/org/qore/lang/AbstractIterator.java:        return (boolean)obj.callMethod("next");
java/org/qore/lang/AbstractIterator.java:    }
java/org/qore/lang/AbstractIterator.java:    //! returns the current value
java/org/qore/lang/AbstractIterator.java:    /** @return the current value
java/org/qore/lang/AbstractIterator.java:        @throw INVALID-ITERATOR the iterator is not pointing at a valid element
java/org/qore/lang/AbstractIterator.java:        @see AbstractIterator::valid()
java/org/qore/lang/AbstractIterator.java:    */
java/org/qore/lang/AbstractIterator.java:    public Object getValue() throws Throwable {
java/org/qore/lang/AbstractIterator.java:        return obj.callMethod("getValue");
java/org/qore/lang/AbstractIterator.java:    }
java/org/qore/lang/AbstractIterator.java:    //! returns true if the iterator is currently pointing at a valid element, false if not
java/org/qore/lang/AbstractIterator.java:    /** @return true if the iterator is currently pointing at a valid element, false if not
java/org/qore/lang/AbstractIterator.java:    */
java/org/qore/lang/AbstractIterator.java:    public boolean valid() throws Throwable {
java/org/qore/lang/AbstractIterator.java:        return (boolean)obj.callMethod("valid");
java/org/qore/lang/AbstractIterator.java:    }
java/org/qore/lang/AbstractIterator.java:}
java/org/qore/lang/mapper/Mapper.java:/** Java wrapper for the %Qore Mapper class
java/org/qore/lang/mapper/Mapper.java: *
java/org/qore/lang/mapper/Mapper.java: */
java/org/qore/lang/mapper/Mapper.java:package org.qore.lang.mapper;
java/org/qore/lang/mapper/Mapper.java:// java imports
java/org/qore/lang/mapper/Mapper.java:import java.util.HashMap;
java/org/qore/lang/mapper/Mapper.java:import java.util.Map;
java/org/qore/lang/mapper/Mapper.java:// jni module imports
java/org/qore/lang/mapper/Mapper.java:import org.qore.jni.Hash;
java/org/qore/lang/mapper/Mapper.java:import org.qore.jni.QoreObject;
java/org/qore/lang/mapper/Mapper.java:import org.qore.jni.QoreObjectWrapper;
java/org/qore/lang/mapper/Mapper.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/mapper/Mapper.java:/**
java/org/qore/lang/mapper/Mapper.java:    Java wrapper for the @see Mapper::Mapper class in Qore
java/org/qore/lang/mapper/Mapper.java:    @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/mapper/Mapper.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/mapper/Mapper.java:    <tt>import qoremod.Mapper.Mapper;</tt>
java/org/qore/lang/mapper/Mapper.java:*/
java/org/qore/lang/mapper/Mapper.java:@Deprecated
java/org/qore/lang/mapper/Mapper.java:public class Mapper extends QoreObjectWrapper {
java/org/qore/lang/mapper/Mapper.java:    // static initialization
java/org/qore/lang/mapper/Mapper.java:    static {
java/org/qore/lang/mapper/Mapper.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c Mapper module
java/org/qore/lang/mapper/Mapper.java:        try {
java/org/qore/lang/mapper/Mapper.java:            QoreJavaApi.initQore();
java/org/qore/lang/mapper/Mapper.java:            QoreJavaApi.callFunction("load_module", "Mapper");
java/org/qore/lang/mapper/Mapper.java:        } catch (Throwable e) {
java/org/qore/lang/mapper/Mapper.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/mapper/Mapper.java:        }
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * creates the object as a wrapper for the Qore object
java/org/qore/lang/mapper/Mapper.java:     * @param obj the Qore object
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public Mapper(QoreObject obj) {
java/org/qore/lang/mapper/Mapper.java:        super(obj);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * get current @see mapper_runtime_handling "runtime option" value for a key
java/org/qore/lang/mapper/Mapper.java:     *  @param key the runtime option key
java/org/qore/lang/mapper/Mapper.java:     *  @return a runtime value if the key exists in the current @see mapper_runtime_handling "runtime option hash" and is set
java/org/qore/lang/mapper/Mapper.java:     *  @see mapper_runtime_handling
java/org/qore/lang/mapper/Mapper.java:     *  @since %Mapper 1.1
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public Object getRuntime(String key) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return obj.callMethod("getRuntime", key);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @param fname the field
java/org/qore/lang/mapper/Mapper.java:     * @return a descriptive name of the given field if possible, otherwise returns the field name itself
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public String getFieldName(String fname) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (String)obj.callMethod("getFieldName", fname);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @return a list of valid field keys for this class (can be overridden in subclasses)
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object> validKeys() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>)obj.callMethod("validKeys");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @return a list of valid types for this class (can be overridden in subclasses)
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object> validTypes() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>)obj.callMethod("validTypes");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @return a list of valid constructor options for this class (can be overridden in subclasses)
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object> optionKeys() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>)obj.callMethod("optionKeys");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @note null is returned if no input record is set
java/org/qore/lang/mapper/Mapper.java:     * @return the value of the \c "input" option
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object> getInputRecord() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>)obj.callMethod("getInputRecord");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @note null is returned if no output record is set
java/org/qore/lang/mapper/Mapper.java:     * @return the value of the \c "output" option
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object> getOutputRecord() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>)obj.callMethod("getOutputRecord");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * @return an output record iterator that produces mapped data from the input data provider
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-INPUT-PROVIDER-ERROR if no \a input_provider option was provided in the constructor or the input
java/org/qore/lang/mapper/Mapper.java:     * provider uses the request/response API
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public MapperOutputRecordIterator getOutputIterator() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return new MapperOutputRecordIterator((QoreObject)obj.callMethodSave("getOutputIterator"));
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * Commits data written to the output data provider if the output data provider supports transaction management
java/org/qore/lang/mapper/Mapper.java:     * Has no effect if the output data provider does not support transaction management
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-OUTPUT-PROVIDER-ERROR no output provider available in this mapper
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public void commit() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        obj.callMethod("commit");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * Rolls back data written to the output data provider
java/org/qore/lang/mapper/Mapper.java:     * Has no effect if the output data provider does not support transaction management
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-OUTPUT-PROVIDER-ERROR no output provider available in this mapper
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public void rollback() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        obj.callMethod("rollback");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * Flushes any remaining data to the data provider
java/org/qore/lang/mapper/Mapper.java:     * This method should always be called for successful bulk output operations with an output provider
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-OUTPUT-BULK-ERROR no output bulk operation is in progress
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public void flushOutput() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        obj.callMethod("flushOutput");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * Discards any buffered data
java/org/qore/lang/mapper/Mapper.java:     * This method should always be called if an error occurs in a bulk output operation
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-OUTPUT-BULK-ERROR no output bulk operation is in progress
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public void discardOutput() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        obj.callMethod("discardOutput");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * Runs the input and output mappers with data providers on each end autonomously
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-INPUT-PROVIDER-ERROR no input provider available in this mapper
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-OUTPUT-PROVIDER-ERROR no output provider available in this mapper
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public void runAutonomous() throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        obj.callMethod("runAutonomous");
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * maps all input records and returns the mapped data as a list of output records
java/org/qore/lang/mapper/Mapper.java:     * this method applies the @see mapData() method to all input records and returns the resulting list
java/org/qore/lang/mapper/Mapper.java:     * @param recs the list of input records
java/org/qore/lang/mapper/Mapper.java:     * @return the mapped data as a list of output records
java/org/qore/lang/mapper/Mapper.java:     * @throws MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/mapper/Mapper.java:     * @throws STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/mapper/Mapper.java:     * @throws INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object>[] mapAll(Map<String, Object>[] recs) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>[])obj.callMethod("mapAll", (Object)recs);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * maps all input records and returns the mapped data as a list of output records
java/org/qore/lang/mapper/Mapper.java:     * this method applies the @see mapData() method to all input records and returns the resulting list
java/org/qore/lang/mapper/Mapper.java:     * @param recs a Map<String, Object> of lists of input records
java/org/qore/lang/mapper/Mapper.java:     * @return the mapped data as a list of output records
java/org/qore/lang/mapper/Mapper.java:     * @throws MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/mapper/Mapper.java:     * @throws STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/mapper/Mapper.java:     * @throws INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object>[] mapAll(Map<String, Object> recs) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>[])obj.callMethod("mapAll", recs);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * processes the input record and returns a Map<String, Object> of the mapped values where the keys in the Map<String, Object> returned are the target field names; the order of the fields in the Map<String, Object> returned is the same order as the keys in the map hash.
java/org/qore/lang/mapper/Mapper.java:     * @param rec the record to translate
java/org/qore/lang/mapper/Mapper.java:     * @return a Map<String, Object> of field values in the target format based on the input data and processed according to the logic in the map hash
java/org/qore/lang/mapper/Mapper.java:     * @throws MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/mapper/Mapper.java:     * @throws STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/mapper/Mapper.java:     * @throws INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/mapper/Mapper.java:     * @note
java/org/qore/lang/mapper/Mapper.java:     * - each time this method is executed successfully, the record count is updated (see @see getCount() and @see resetCount())
java/org/qore/lang/mapper/Mapper.java:     * - uses @see Mapper::Mapper::mapDataIntern() to map the data, then @see Mapper::Mapper::logOutput() is called for each output row
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    @SuppressWarnings("unchecked")
java/org/qore/lang/mapper/Mapper.java:    public HashMap<String, Object> mapData(Map<String, Object> rec) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (HashMap<String, Object>)obj.callMethod("mapData", rec);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * maps all input record(s) automatically and returns the mapped data
java/org/qore/lang/mapper/Mapper.java:     * this method applies the @see mapAll() method if the input records are given as list and the @see mapBulk() method if the input is a Map<String, Object> of lists.
java/org/qore/lang/mapper/Mapper.java:     * For a simple Map<String, Object> (one record) it calls the @see mapData() method.
java/org/qore/lang/mapper/Mapper.java:     * @param recs input records (one record or more), can be represented by list or Map<String, Object>
java/org/qore/lang/mapper/Mapper.java:     * @return the mapped data as of output records (type depends on the given records' type)
java/org/qore/lang/mapper/Mapper.java:     * @throws MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/mapper/Mapper.java:     * @throws STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/mapper/Mapper.java:     * @throws INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/mapper/Mapper.java:     * @throws MAPPER-INPUT-TYPE-ERROR records input type is not acceptable
java/org/qore/lang/mapper/Mapper.java:     * @since %Mapper 1.6
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public Object mapAuto(Object recs) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return obj.callMethod("mapAuto", recs);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:    /**
java/org/qore/lang/mapper/Mapper.java:     * maps a set of records in Map<String, Object> of lists format; returns mapped data in a Hash of lists format
java/org/qore/lang/mapper/Mapper.java:     * @par Example:
java/org/qore/lang/mapper/Mapper.java:     * @code{.java}
java/org/qore/lang/mapper/Mapper.java:     * Hash output = mapper.mapBulk(h);
java/org/qore/lang/mapper/Mapper.java:     * @endcode
java/org/qore/lang/mapper/Mapper.java:     * @param rec the input record or record set in case a Map<String, Object> of lists is passed
java/org/qore/lang/mapper/Mapper.java:     * @param crec an optional Map<String, Object> of data to be added to each input row before mapping
java/org/qore/lang/mapper/Mapper.java:     * @return returns a Hash of lists of mapped data
java/org/qore/lang/mapper/Mapper.java:     * @note
java/org/qore/lang/mapper/Mapper.java:     * - using a Map<String, Object> of lists in \a rec; note that this provides very high performance when used with data
java/org/qore/lang/mapper/Mapper.java:     * provider output that support bulk write operations
java/org/qore/lang/mapper/Mapper.java:     * - in case a Map<String, Object> of empty lists is passed, null is returned
java/org/qore/lang/mapper/Mapper.java:     * - 'crec' does not affect the number of output lines; in particular, if 'rec' is a batch with \c N rows of
java/org/qore/lang/mapper/Mapper.java:     * a column \c C and 'crec = {"C": "mystring"}' then the output will be as if there was 'N' rows with
java/org/qore/lang/mapper/Mapper.java:     * \c C = "mystring" on the input.
java/org/qore/lang/mapper/Mapper.java:     * @see
java/org/qore/lang/mapper/Mapper.java:     * - flushOutput()
java/org/qore/lang/mapper/Mapper.java:     * - discardOutput()
java/org/qore/lang/mapper/Mapper.java:     * @throws MISSING-INPUT a field marked mandatory is missing
java/org/qore/lang/mapper/Mapper.java:     * @throws STRING-TOO-LONG a field value exceeds the maximum value and the 'trunc' key is not set
java/org/qore/lang/mapper/Mapper.java:     * @throws INVALID-NUMBER the field is marked as numeric but the input value contains non-numeric data
java/org/qore/lang/mapper/Mapper.java:     */
java/org/qore/lang/mapper/Mapper.java:    public Hash mapBulk(Map<String, Object> rec, Map<String, Object> crec) throws Throwable {
java/org/qore/lang/mapper/Mapper.java:        return (Hash)obj.callMethod("mapBulk", rec, crec);
java/org/qore/lang/mapper/Mapper.java:    }
java/org/qore/lang/mapper/Mapper.java:}
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:/** Java wrapper for the %Qore MapperOutputRecordIterator class
java/org/qore/lang/mapper/MapperOutputRecordIterator.java: *
java/org/qore/lang/mapper/MapperOutputRecordIterator.java: */
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:package org.qore.lang.mapper;
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:// jni module imports
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:import org.qore.jni.QoreObject;
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:import org.qore.lang.dataprovider.AbstractDataProviderRecordIterator;
java/org/qore/lang/mapper/MapperOutputRecordIterator.java://! Java wrapper for the @ref Mapper::MapperOutputRecordIterator class in Qore
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:/** @note Loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    <tt>import qoremod.Mapper.MapperOutputRecordIterator;</tt>
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:*/
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:@Deprecated
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:public class MapperOutputRecordIterator extends AbstractDataProviderRecordIterator {
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    // static initialization
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    static {
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:        // loads and initializes the Qore library and the jni module (if necessary) and loads the \c Mapper module
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:        try {
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:            QoreJavaApi.initQore();
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:            QoreJavaApi.callFunction("load_module", "Mapper");
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:        } catch (Throwable e) {
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:        }
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    }
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    //! creates the object as a wrapper for the Qore object
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    public MapperOutputRecordIterator(QoreObject obj) throws Throwable {
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:        super(obj);
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:    }
java/org/qore/lang/mapper/MapperOutputRecordIterator.java:}
java/org/qore/lang/DatasourcePool.java:/** Java wrapper for the %Qore AbstractDatasource class
java/org/qore/lang/DatasourcePool.java: *
java/org/qore/lang/DatasourcePool.java: */
java/org/qore/lang/DatasourcePool.java:package org.qore.lang;
java/org/qore/lang/DatasourcePool.java:// qorus imports
java/org/qore/lang/DatasourcePool.java:import org.qore.lang.AbstractDatasource;
java/org/qore/lang/DatasourcePool.java:// jni module imports
java/org/qore/lang/DatasourcePool.java:import org.qore.jni.QoreObject;
java/org/qore/lang/DatasourcePool.java:import org.qore.jni.QoreJavaApi;
java/org/qore/lang/DatasourcePool.java://! Java wrapper for the @ref Qore::SQL::DatasourcePool class in %Qore
java/org/qore/lang/DatasourcePool.java:/** loads and initializes the Qore library and the jni module in static initialization if necessary
java/org/qore/lang/DatasourcePool.java:    @deprecated Use @ref jni_dynamic_import_qore_in_java "dynamic imports" instead:
java/org/qore/lang/DatasourcePool.java:    <tt>import qore.Qore.SQL.DatasourcePool;</tt>
java/org/qore/lang/DatasourcePool.java: */
java/org/qore/lang/DatasourcePool.java:@Deprecated
java/org/qore/lang/DatasourcePool.java:public class DatasourcePool extends AbstractDatasource {
java/org/qore/lang/DatasourcePool.java:    // static initialization
java/org/qore/lang/DatasourcePool.java:    static {
java/org/qore/lang/DatasourcePool.java:        // initialize the Qore library if necessary
java/org/qore/lang/DatasourcePool.java:        try {
java/org/qore/lang/DatasourcePool.java:            QoreJavaApi.initQore();
java/org/qore/lang/DatasourcePool.java:        } catch (Throwable e) {
java/org/qore/lang/DatasourcePool.java:            throw new ExceptionInInitializerError(e);
java/org/qore/lang/DatasourcePool.java:        }
java/org/qore/lang/DatasourcePool.java:    }
java/org/qore/lang/DatasourcePool.java:    //! creates the object from the %Qore object
java/org/qore/lang/DatasourcePool.java:    public DatasourcePool(QoreObject ds) {
java/org/qore/lang/DatasourcePool.java:        super(ds);
java/org/qore/lang/DatasourcePool.java:    }
java/org/qore/lang/DatasourcePool.java:    //! creates the object from the config string (ex: \c "pgsql:user/pass@db")
java/org/qore/lang/DatasourcePool.java:    public DatasourcePool(String config) throws Throwable {
java/org/qore/lang/DatasourcePool.java:        super(QoreJavaApi.newObjectSave("DatasourcePool", config));
java/org/qore/lang/DatasourcePool.java:    }
java/org/qore/lang/DatasourcePool.java:}
java/org/qore/jni/BooleanWrapper.java:/*
java/org/qore/jni/BooleanWrapper.java:    BooleanWrapper.java
java/org/qore/jni/BooleanWrapper.java:    Qore Programming Language JNI Module
java/org/qore/jni/BooleanWrapper.java:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
java/org/qore/jni/BooleanWrapper.java:    This library is free software; you can redistribute it and/or
java/org/qore/jni/BooleanWrapper.java:    modify it under the terms of the GNU Lesser General Public
java/org/qore/jni/BooleanWrapper.java:    License as published by the Free Software Foundation; either
java/org/qore/jni/BooleanWrapper.java:    version 2.1 of the License, or (at your option) any later version.
java/org/qore/jni/BooleanWrapper.java:    This library is distributed in the hope that it will be useful,
java/org/qore/jni/BooleanWrapper.java:    but WITHOUT ANY WARRANTY; without even the implied warranty of
java/org/qore/jni/BooleanWrapper.java:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
java/org/qore/jni/BooleanWrapper.java:    Lesser General Public License for more details.
java/org/qore/jni/BooleanWrapper.java:    You should have received a copy of the GNU Lesser General Public
java/org/qore/jni/BooleanWrapper.java:    License along with this library; if not, write to the Free Software
java/org/qore/jni/BooleanWrapper.java:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
java/org/qore/jni/BooleanWrapper.java:*/
java/org/qore/jni/BooleanWrapper.java:package org.qore.jni;
java/org/qore/jni/BooleanWrapper.java:class BooleanWrapper {
java/org/qore/jni/BooleanWrapper.java:    public boolean val;
java/org/qore/jni/BooleanWrapper.java:    public BooleanWrapper() {
java/org/qore/jni/BooleanWrapper.java:        val = false;
java/org/qore/jni/BooleanWrapper.java:    }
java/org/qore/jni/BooleanWrapper.java:    public void setTrue() {
java/org/qore/jni/BooleanWrapper.java:        val = true;
java/org/qore/jni/BooleanWrapper.java:    }
java/org/qore/jni/BooleanWrapper.java:}
java/org/qore/jni/QoreExceptionWrapper.java:package org.qore.jni;
java/org/qore/jni/QoreExceptionWrapper.java:public class QoreExceptionWrapper extends RuntimeException {
java/org/qore/jni/QoreExceptionWrapper.java:    private long xsink;
java/org/qore/jni/QoreExceptionWrapper.java:    QoreExceptionWrapper(long xsink) {
java/org/qore/jni/QoreExceptionWrapper.java:        this.xsink = xsink;
java/org/qore/jni/QoreExceptionWrapper.java:    }
java/org/qore/jni/QoreExceptionWrapper.java:    @Override
java/org/qore/jni/QoreExceptionWrapper.java:    public String getMessage() {
java/org/qore/jni/QoreExceptionWrapper.java:        return getMessage0(xsink);
java/org/qore/jni/QoreExceptionWrapper.java:    }
java/org/qore/jni/QoreExceptionWrapper.java:    long get() {
java/org/qore/jni/QoreExceptionWrapper.java:        long x = xsink;
java/org/qore/jni/QoreExceptionWrapper.java:        xsink = 0;
java/org/qore/jni/QoreExceptionWrapper.java:        return x;
java/org/qore/jni/QoreExceptionWrapper.java:    }
java/org/qore/jni/QoreExceptionWrapper.java:    @SuppressWarnings("deprecation")
java/org/qore/jni/QoreExceptionWrapper.java:    @Override
java/org/qore/jni/QoreExceptionWrapper.java:    protected void finalize() throws Throwable {
java/org/qore/jni/QoreExceptionWrapper.java:        finalize0(xsink);
java/org/qore/jni/QoreExceptionWrapper.java:        xsink = 0;
java/org/qore/jni/QoreExceptionWrapper.java:    }
java/org/qore/jni/QoreExceptionWrapper.java:    private native void finalize0(long ptr);
java/org/qore/jni/QoreExceptionWrapper.java:    private native String getMessage0(long ptr);
java/org/qore/jni/QoreExceptionWrapper.java:}
java/org/qore/jni/QoreJavaObjectPtr.java:package org.qore.jni;
java/org/qore/jni/QoreJavaObjectPtr.java://! Helper class for pointer arguments to weak references Qore objects
java/org/qore/jni/QoreJavaObjectPtr.java:/** This class is used as the constructor argument in order to not conflict with native arguments taking a Qore "int"
java/org/qore/jni/QoreJavaObjectPtr.java:    @since 2.0
java/org/qore/jni/QoreJavaObjectPtr.java: */
java/org/qore/jni/QoreJavaObjectPtr.java:public class QoreJavaObjectPtr {
java/org/qore/jni/QoreJavaObjectPtr.java:    public long ptr;
java/org/qore/jni/QoreJavaObjectPtr.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreJavaObjectPtr.java:    public QoreJavaObjectPtr(long ptr) {
java/org/qore/jni/QoreJavaObjectPtr.java:        this.ptr = ptr;
java/org/qore/jni/QoreJavaObjectPtr.java:    }
java/org/qore/jni/QoreJavaObjectPtr.java:}
java/org/qore/jni/QoreClosureMarkerImpl.java:package org.qore.jni;
java/org/qore/jni/QoreClosureMarkerImpl.java://! This marks a class that must have a \c call() method
java/org/qore/jni/QoreClosureMarkerImpl.java:/** The call() method can be declared with any argument and return types and will be called when this object is
java/org/qore/jni/QoreClosureMarkerImpl.java: * converted to a Qore closure and the closure is called
java/org/qore/jni/QoreClosureMarkerImpl.java:*/
java/org/qore/jni/QoreClosureMarkerImpl.java:public interface QoreClosureMarkerImpl extends QoreClosureMarker {
java/org/qore/jni/QoreClosureMarkerImpl.java:    public abstract Object call(Object... args) throws Throwable;
java/org/qore/jni/QoreClosureMarkerImpl.java:}
java/org/qore/jni/QoreObject.java:package org.qore.jni;
java/org/qore/jni/QoreObject.java:import org.qore.jni.QoreObjectBase;
java/org/qore/jni/QoreObject.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/QoreObject.java://! wrapper class for a %Qore object; this class holds a weak reference to the %Qore object
java/org/qore/jni/QoreObject.java:/** Due to the different in garbage collecting approaches (%Qore's garbage collector being
java/org/qore/jni/QoreObject.java:    <a href="https://github.com/qorelanguage/qore/wiki/Prompt-Collection">deterministic</a> and Java's not),
java/org/qore/jni/QoreObject.java:    strong references to %Qore objects must be managed outside of Java.
java/org/qore/jni/QoreObject.java:    @note API usage errors such as with releasing / deleting the object and then calling methods
java/org/qore/jni/QoreObject.java:    on the object will cause a crash
java/org/qore/jni/QoreObject.java: */
java/org/qore/jni/QoreObject.java:public class QoreObject extends QoreObjectBase {
java/org/qore/jni/QoreObject.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreObject.java:    public QoreObject(long obj) {
java/org/qore/jni/QoreObject.java:        super(obj);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreObject.java:    public QoreObject(long qcptr, long mptr, long vptr, Object... args) throws Throwable {
java/org/qore/jni/QoreObject.java:        super(qcptr, mptr, vptr, args);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! returns the class name for the object
java/org/qore/jni/QoreObject.java:    public String className() {
java/org/qore/jni/QoreObject.java:        return className0(obj);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! returns true if the object is an instance of the given class
java/org/qore/jni/QoreObject.java:    public boolean instanceOf(String class_name) {
java/org/qore/jni/QoreObject.java:        return instanceOf0(obj, class_name);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! calls the given method with the given arguments and returns the result
java/org/qore/jni/QoreObject.java:    /**
java/org/qore/jni/QoreObject.java:     * @param name the name of the method to call
java/org/qore/jni/QoreObject.java:     * @param args argument to the function call
java/org/qore/jni/QoreObject.java:     * @return the result of the call
java/org/qore/jni/QoreObject.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreObject.java:     *
java/org/qore/jni/QoreObject.java:     * @see callMethodSave()
java/org/qore/jni/QoreObject.java:    */
java/org/qore/jni/QoreObject.java:    public Object callMethod(String name, Object... args) throws Throwable {
java/org/qore/jni/QoreObject.java:        return callMethod0(QoreURLClassLoader.getProgramPtr(), obj, name, args);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! calls the given method with the given arguments and returns the result
java/org/qore/jni/QoreObject.java:    /**
java/org/qore/jni/QoreObject.java:     * @param name the name of the method to call
java/org/qore/jni/QoreObject.java:     * @param args argument to the function call
java/org/qore/jni/QoreObject.java:     * @return the result of the call
java/org/qore/jni/QoreObject.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreObject.java:     *
java/org/qore/jni/QoreObject.java:     * @see callMethodArgsSave()
java/org/qore/jni/QoreObject.java:    */
java/org/qore/jni/QoreObject.java:    public Object callMethodArgs(String name, Object[] args) throws Throwable {
java/org/qore/jni/QoreObject.java:        return callMethod0(QoreURLClassLoader.getProgramPtr(), obj, name, args);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! Calls the given method with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreObject.java:    /**
java/org/qore/jni/QoreObject.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreObject.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreObject.java:     *
java/org/qore/jni/QoreObject.java:     * @param name the name of the method to call
java/org/qore/jni/QoreObject.java:     * @param args argument to the function call
java/org/qore/jni/QoreObject.java:     * @return the result of the call
java/org/qore/jni/QoreObject.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreObject.java:     *
java/org/qore/jni/QoreObject.java:     * @see jni_qore_object_lifecycle_management
java/org/qore/jni/QoreObject.java:     */
java/org/qore/jni/QoreObject.java:    public Object callMethodSave(String name, Object... args) throws Throwable {
java/org/qore/jni/QoreObject.java:        return callMethodSave0(QoreURLClassLoader.getProgramPtr(), obj, name, args);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! Calls the given method with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreObject.java:    /**
java/org/qore/jni/QoreObject.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreObject.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreObject.java:     *
java/org/qore/jni/QoreObject.java:     * @param name the name of the method to call
java/org/qore/jni/QoreObject.java:     * @param args argument to the function call
java/org/qore/jni/QoreObject.java:     * @return the result of the call
java/org/qore/jni/QoreObject.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreObject.java:     *
java/org/qore/jni/QoreObject.java:     * @see jni_qore_object_lifecycle_management
java/org/qore/jni/QoreObject.java:     */
java/org/qore/jni/QoreObject.java:    public Object callMethodArgsSave(String name, Object[] args) throws Throwable {
java/org/qore/jni/QoreObject.java:        return callMethodSave0(QoreURLClassLoader.getProgramPtr(), obj, name, args);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    //! returns the value of the given member
java/org/qore/jni/QoreObject.java:    public Object getMemberValue(String name) throws Throwable {
java/org/qore/jni/QoreObject.java:        return getMemberValue0(obj, name);
java/org/qore/jni/QoreObject.java:    }
java/org/qore/jni/QoreObject.java:    private native String className0(long obj_ptr);
java/org/qore/jni/QoreObject.java:    private native boolean instanceOf0(long obj_ptr, String class_name);
java/org/qore/jni/QoreObject.java:    private native Object callMethod0(long pgm_ptr, long obj_ptr, String name, Object... args);
java/org/qore/jni/QoreObject.java:    private native Object callMethodSave0(long pgm_ptr, long obj_ptr, String name, Object... args);
java/org/qore/jni/QoreObject.java:    private native Object getMemberValue0(long obj_ptr, String name);
java/org/qore/jni/QoreObject.java:}
java/org/qore/jni/QoreException.java:package org.qore.jni;
java/org/qore/jni/QoreException.java:import java.util.Arrays;
java/org/qore/jni/QoreException.java://! The QoreException class is meant to represent a %Qore-language exception
java/org/qore/jni/QoreException.java:public class QoreException extends RuntimeException {
java/org/qore/jni/QoreException.java:    //! The %Qore exception error code
java/org/qore/jni/QoreException.java:    private String err;
java/org/qore/jni/QoreException.java:    //! The %Qore exception description; if any
java/org/qore/jni/QoreException.java:    private String desc;
java/org/qore/jni/QoreException.java:    //! The %Qore exception argument; if any
java/org/qore/jni/QoreException.java:    private Object arg;
java/org/qore/jni/QoreException.java:    private static final long serialVersionUID = 1L;
java/org/qore/jni/QoreException.java:    //! creates the object with the given arguments
java/org/qore/jni/QoreException.java:    public QoreException(String err, String desc, Object arg) {
java/org/qore/jni/QoreException.java:        this.err = err;
java/org/qore/jni/QoreException.java:        this.desc = desc;
java/org/qore/jni/QoreException.java:        this.arg = arg;
java/org/qore/jni/QoreException.java:    }
java/org/qore/jni/QoreException.java:    //! creates the object with the given arguments
java/org/qore/jni/QoreException.java:    public QoreException(String err, String desc) {
java/org/qore/jni/QoreException.java:        this.err = err;
java/org/qore/jni/QoreException.java:        this.desc = desc;
java/org/qore/jni/QoreException.java:    }
java/org/qore/jni/QoreException.java:    //! creates the object with the given arguments
java/org/qore/jni/QoreException.java:    public QoreException(String err) {
java/org/qore/jni/QoreException.java:        this.err = err;
java/org/qore/jni/QoreException.java:    }
java/org/qore/jni/QoreException.java:    //! returns the error string
java/org/qore/jni/QoreException.java:    String getErr() {
java/org/qore/jni/QoreException.java:        return err;
java/org/qore/jni/QoreException.java:    }
java/org/qore/jni/QoreException.java:    //! returns the description string, if any; may be null
java/org/qore/jni/QoreException.java:    String getDesc() {
java/org/qore/jni/QoreException.java:        return desc;
java/org/qore/jni/QoreException.java:    }
java/org/qore/jni/QoreException.java:    //! returns the argument, if any; may be null
java/org/qore/jni/QoreException.java:    Object getArg() {
java/org/qore/jni/QoreException.java:        return arg;
java/org/qore/jni/QoreException.java:    }
java/org/qore/jni/QoreException.java:}
java/org/qore/jni/QoreRelativeTime.java:package org.qore.jni;
java/org/qore/jni/QoreRelativeTime.java://! class representing a Qore relative time value (duration)
java/org/qore/jni/QoreRelativeTime.java:/**
java/org/qore/jni/QoreRelativeTime.java: */
java/org/qore/jni/QoreRelativeTime.java:public class QoreRelativeTime {
java/org/qore/jni/QoreRelativeTime.java:    public int year;    // year
java/org/qore/jni/QoreRelativeTime.java:    public int month;   // month
java/org/qore/jni/QoreRelativeTime.java:    public int day;     // day
java/org/qore/jni/QoreRelativeTime.java:    public int hour;    // hours
java/org/qore/jni/QoreRelativeTime.java:    public int minute;  // minutes
java/org/qore/jni/QoreRelativeTime.java:    public int second;  // seconds
java/org/qore/jni/QoreRelativeTime.java:    public int us;      // microseconds
java/org/qore/jni/QoreRelativeTime.java:    public QoreRelativeTime(int year, int month, int day, int hour, int minute, int second, int us) {
java/org/qore/jni/QoreRelativeTime.java:        this.year = year;
java/org/qore/jni/QoreRelativeTime.java:        this.month = month;
java/org/qore/jni/QoreRelativeTime.java:        this.day = day;
java/org/qore/jni/QoreRelativeTime.java:        this.hour = hour;
java/org/qore/jni/QoreRelativeTime.java:        this.minute = minute;
java/org/qore/jni/QoreRelativeTime.java:        this.second = second;
java/org/qore/jni/QoreRelativeTime.java:        this.us = us;
java/org/qore/jni/QoreRelativeTime.java:    }
java/org/qore/jni/QoreRelativeTime.java: }
java/org/qore/jni/QoreObjectWrapper.java:package org.qore.jni;
java/org/qore/jni/QoreObjectWrapper.java://! This is meant to the be the wrapper class for Java classes wrapping Qore object classes
java/org/qore/jni/QoreObjectWrapper.java:/** @note API usage errors such as with releasing / deleting the wrapped object and then calling methods
java/org/qore/jni/QoreObjectWrapper.java:    on the object will cause a crash
java/org/qore/jni/QoreObjectWrapper.java: */
java/org/qore/jni/QoreObjectWrapper.java:public class QoreObjectWrapper {
java/org/qore/jni/QoreObjectWrapper.java:    //! the wrapper Qore object
java/org/qore/jni/QoreObjectWrapper.java:    protected QoreObject obj;
java/org/qore/jni/QoreObjectWrapper.java:    //! creates the wrapper object with the Qore object
java/org/qore/jni/QoreObjectWrapper.java:    public QoreObjectWrapper(QoreObject obj) {
java/org/qore/jni/QoreObjectWrapper.java:        this.obj = obj;
java/org/qore/jni/QoreObjectWrapper.java:    }
java/org/qore/jni/QoreObjectWrapper.java:    //! releases the Qore object; do not call any further methods on the object after this call
java/org/qore/jni/QoreObjectWrapper.java:    public void release() {
java/org/qore/jni/QoreObjectWrapper.java:        obj.release();
java/org/qore/jni/QoreObjectWrapper.java:    }
java/org/qore/jni/QoreObjectWrapper.java:    //! returns the Qore object
java/org/qore/jni/QoreObjectWrapper.java:    public QoreObject getQoreObject() {
java/org/qore/jni/QoreObjectWrapper.java:        return obj;
java/org/qore/jni/QoreObjectWrapper.java:    }
java/org/qore/jni/QoreObjectWrapper.java:    //! returns the class name for the Qore object
java/org/qore/jni/QoreObjectWrapper.java:    public String className() {
java/org/qore/jni/QoreObjectWrapper.java:        return obj.className();
java/org/qore/jni/QoreObjectWrapper.java:    }
java/org/qore/jni/QoreObjectWrapper.java:    //! returns true if the object is an instance of the given class
java/org/qore/jni/QoreObjectWrapper.java:    public boolean instanceOf(String class_name) {
java/org/qore/jni/QoreObjectWrapper.java:        return obj.instanceOf(class_name);
java/org/qore/jni/QoreObjectWrapper.java:    }
java/org/qore/jni/QoreObjectWrapper.java:}
java/org/qore/jni/ClassModInfo.java:/*
java/org/qore/jni/ClassModInfo.java:    ClassModInfo.java
java/org/qore/jni/ClassModInfo.java:    Qore Programming Language JNI Module
java/org/qore/jni/ClassModInfo.java:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
java/org/qore/jni/ClassModInfo.java:    This library is free software; you can redistribute it and/or
java/org/qore/jni/ClassModInfo.java:    modify it under the terms of the GNU Lesser General Public
java/org/qore/jni/ClassModInfo.java:    License as published by the Free Software Foundation; either
java/org/qore/jni/ClassModInfo.java:    version 2.1 of the License, or (at your option) any later version.
java/org/qore/jni/ClassModInfo.java:    This library is distributed in the hope that it will be useful,
java/org/qore/jni/ClassModInfo.java:    but WITHOUT ANY WARRANTY; without even the implied warranty of
java/org/qore/jni/ClassModInfo.java:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
java/org/qore/jni/ClassModInfo.java:    Lesser General Public License for more details.
java/org/qore/jni/ClassModInfo.java:    You should have received a copy of the GNU Lesser General Public
java/org/qore/jni/ClassModInfo.java:    License along with this library; if not, write to the Free Software
java/org/qore/jni/ClassModInfo.java:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
java/org/qore/jni/ClassModInfo.java:*/
java/org/qore/jni/ClassModInfo.java:package org.qore.jni;
java/org/qore/jni/ClassModInfo.java:class ClassModInfo {
java/org/qore/jni/ClassModInfo.java:    public String cls;
java/org/qore/jni/ClassModInfo.java:    public String mod;
java/org/qore/jni/ClassModInfo.java:    public boolean python;
java/org/qore/jni/ClassModInfo.java:    ClassModInfo(String bin_name) {
java/org/qore/jni/ClassModInfo.java:        init(bin_name, false);
java/org/qore/jni/ClassModInfo.java:    }
java/org/qore/jni/ClassModInfo.java:    ClassModInfo(String bin_name, boolean is_package) {
java/org/qore/jni/ClassModInfo.java:        init(bin_name, is_package);
java/org/qore/jni/ClassModInfo.java:    }
java/org/qore/jni/ClassModInfo.java:    private void init(String bin_name, boolean is_package) {
java/org/qore/jni/ClassModInfo.java:        //System.out.printf("ClassModInfo(%s)'\n", bin_name);
java/org/qore/jni/ClassModInfo.java:        //Thread.dumpStack();
java/org/qore/jni/ClassModInfo.java:        mod = null;
java/org/qore/jni/ClassModInfo.java:        cls = "::";
java/org/qore/jni/ClassModInfo.java:        python = false;
java/org/qore/jni/ClassModInfo.java:        if (bin_name.equals("qore") || bin_name.equals("python")) {
java/org/qore/jni/ClassModInfo.java:            return;
java/org/qore/jni/ClassModInfo.java:        } else if (bin_name.startsWith("qore.")) {
java/org/qore/jni/ClassModInfo.java:            cls += bin_name.substring(5);
java/org/qore/jni/ClassModInfo.java:        } else if (bin_name.startsWith("qoremod.")) {
java/org/qore/jni/ClassModInfo.java:            int end = bin_name.indexOf(".", 9);
java/org/qore/jni/ClassModInfo.java:            if (end >= 9 && end < (bin_name.length() - 1)) {
java/org/qore/jni/ClassModInfo.java:                mod = bin_name.substring(8, end);
java/org/qore/jni/ClassModInfo.java:                cls = bin_name.substring(end + 1);
java/org/qore/jni/ClassModInfo.java:            } else {
java/org/qore/jni/ClassModInfo.java:                mod = bin_name.substring(8);
java/org/qore/jni/ClassModInfo.java:                cls = null;
java/org/qore/jni/ClassModInfo.java:            }
java/org/qore/jni/ClassModInfo.java:            if (mod.equals("python")) {
java/org/qore/jni/ClassModInfo.java:                python = true;
java/org/qore/jni/ClassModInfo.java:                cls = "Python::" + cls;
java/org/qore/jni/ClassModInfo.java:                mod = null;
java/org/qore/jni/ClassModInfo.java:            }
java/org/qore/jni/ClassModInfo.java:        } else if (bin_name.startsWith("python.")) {
java/org/qore/jni/ClassModInfo.java:            python = true;
java/org/qore/jni/ClassModInfo.java:            cls += "Python::";
java/org/qore/jni/ClassModInfo.java:            cls += bin_name.substring(7);
java/org/qore/jni/ClassModInfo.java:        } else if (bin_name.startsWith("pythonmod.")) {
java/org/qore/jni/ClassModInfo.java:            python = true;
java/org/qore/jni/ClassModInfo.java:            int end = is_package
java/org/qore/jni/ClassModInfo.java:                ? bin_name.lastIndexOf(".")
java/org/qore/jni/ClassModInfo.java:                : bin_name.indexOf(".", 11);
java/org/qore/jni/ClassModInfo.java:            if (end >= 11 && end < (bin_name.length() - 1)) {
java/org/qore/jni/ClassModInfo.java:                mod = bin_name.substring(10, end);
java/org/qore/jni/ClassModInfo.java:                cls = bin_name.substring(end + 1);
java/org/qore/jni/ClassModInfo.java:            } else {
java/org/qore/jni/ClassModInfo.java:                mod = bin_name.substring(10);
java/org/qore/jni/ClassModInfo.java:                cls = null;
java/org/qore/jni/ClassModInfo.java:                //return;
java/org/qore/jni/ClassModInfo.java:            }
java/org/qore/jni/ClassModInfo.java:        } else {
java/org/qore/jni/ClassModInfo.java:            cls += bin_name;
java/org/qore/jni/ClassModInfo.java:        }
java/org/qore/jni/ClassModInfo.java:        if (cls != null) {
java/org/qore/jni/ClassModInfo.java:            cls = cls.replaceAll("\\.", "::");
java/org/qore/jni/ClassModInfo.java:        }
java/org/qore/jni/ClassModInfo.java:        //System.out.printf("ClassModInfo (pkg: %s): %s => %s\n", is_package, bin_name, this);
java/org/qore/jni/ClassModInfo.java:    }
java/org/qore/jni/ClassModInfo.java:    @Override
java/org/qore/jni/ClassModInfo.java:    public String toString() {
java/org/qore/jni/ClassModInfo.java:        return String.format("ClassModInfo{cls=%s, mod=%s, python=%s}", cls, mod, python);
java/org/qore/jni/ClassModInfo.java:    }
java/org/qore/jni/ClassModInfo.java:}
java/org/qore/jni/QoreJavaFileObject.java:package org.qore.jni;
java/org/qore/jni/QoreJavaFileObject.java:import java.io.InputStream;
java/org/qore/jni/QoreJavaFileObject.java:/**
java/org/qore/jni/QoreJavaFileObject.java: * A JavaFileObject interface
java/org/qore/jni/QoreJavaFileObject.java: */
java/org/qore/jni/QoreJavaFileObject.java:public interface QoreJavaFileObject {
java/org/qore/jni/QoreJavaFileObject.java:    /**
java/org/qore/jni/QoreJavaFileObject.java:     * @return the byte code generated by the compiler
java/org/qore/jni/QoreJavaFileObject.java:     */
java/org/qore/jni/QoreJavaFileObject.java:    public byte[] getByteCode();
java/org/qore/jni/QoreJavaFileObject.java:}
java/org/qore/jni/QoreClosure.java:/** Java wrapper for the %Qore QoreClosure class
java/org/qore/jni/QoreClosure.java: *
java/org/qore/jni/QoreClosure.java: */
java/org/qore/jni/QoreClosure.java:package org.qore.jni;
java/org/qore/jni/QoreClosure.java://! Java QoreClosure class
java/org/qore/jni/QoreClosure.java:/**
java/org/qore/jni/QoreClosure.java:    @since jni 1.2
java/org/qore/jni/QoreClosure.java:*/
java/org/qore/jni/QoreClosure.java:public class QoreClosure implements QoreClosureMarkerImpl {
java/org/qore/jni/QoreClosure.java:    //! a pointer to the Qore object
java/org/qore/jni/QoreClosure.java:    protected long obj;
java/org/qore/jni/QoreClosure.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreClosure.java:    public QoreClosure(long obj) {
java/org/qore/jni/QoreClosure.java:        this.obj = obj;
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    //! returns the pointer to the object
java/org/qore/jni/QoreClosure.java:    public long get() {
java/org/qore/jni/QoreClosure.java:        return obj;
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    //! calls the closure / call reference with the given arguments and returns the result
java/org/qore/jni/QoreClosure.java:    /**
java/org/qore/jni/QoreClosure.java:     * @param args argument to the function call
java/org/qore/jni/QoreClosure.java:     * @return the result of the call
java/org/qore/jni/QoreClosure.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreClosure.java:     *
java/org/qore/jni/QoreClosure.java:     * @see callSave()
java/org/qore/jni/QoreClosure.java:    */
java/org/qore/jni/QoreClosure.java:    public Object call(Object... args) throws Throwable {
java/org/qore/jni/QoreClosure.java:        return call0(QoreURLClassLoader.getProgramPtr(), obj, args);
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    //! calls the closure / call reference with the given arguments and returns the result
java/org/qore/jni/QoreClosure.java:    /**
java/org/qore/jni/QoreClosure.java:     * @param args argument to the function call
java/org/qore/jni/QoreClosure.java:     * @return the result of the call
java/org/qore/jni/QoreClosure.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreClosure.java:     *
java/org/qore/jni/QoreClosure.java:     * @see callMethodArgsSave()
java/org/qore/jni/QoreClosure.java:    */
java/org/qore/jni/QoreClosure.java:    public Object callArgs(Object[] args) throws Throwable {
java/org/qore/jni/QoreClosure.java:        return call0(QoreURLClassLoader.getProgramPtr(), obj, args);
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    //! Calls the closure / call reference with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreClosure.java:    /**
java/org/qore/jni/QoreClosure.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreClosure.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreClosure.java:     *
java/org/qore/jni/QoreClosure.java:     * @param args argument to the function call
java/org/qore/jni/QoreClosure.java:     * @return the result of the call
java/org/qore/jni/QoreClosure.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreClosure.java:     *
java/org/qore/jni/QoreClosure.java:     * @see jni_qore_object_lifecycle_management
java/org/qore/jni/QoreClosure.java:     */
java/org/qore/jni/QoreClosure.java:    public Object callSave(Object... args) throws Throwable {
java/org/qore/jni/QoreClosure.java:        return callSave0(QoreURLClassLoader.getProgramPtr(), obj, args);
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    //! Calls the closure / call reference with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreClosure.java:    /**
java/org/qore/jni/QoreClosure.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreClosure.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreClosure.java:     *
java/org/qore/jni/QoreClosure.java:     * @param args argument to the function call
java/org/qore/jni/QoreClosure.java:     * @return the result of the call
java/org/qore/jni/QoreClosure.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreClosure.java:     *
java/org/qore/jni/QoreClosure.java:     * @see jni_qore_object_lifecycle_management
java/org/qore/jni/QoreClosure.java:     */
java/org/qore/jni/QoreClosure.java:    public Object callArgsSave(String name, Object[] args) throws Throwable {
java/org/qore/jni/QoreClosure.java:        return callSave0(QoreURLClassLoader.getProgramPtr(), obj, args);
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    //! releases the Qore reference
java/org/qore/jni/QoreClosure.java:    @SuppressWarnings("deprecation")
java/org/qore/jni/QoreClosure.java:    @Override
java/org/qore/jni/QoreClosure.java:    protected void finalize() throws Throwable {
java/org/qore/jni/QoreClosure.java:        if (obj != 0) {
java/org/qore/jni/QoreClosure.java:            finalize0(obj);
java/org/qore/jni/QoreClosure.java:            obj = 0;
java/org/qore/jni/QoreClosure.java:        }
java/org/qore/jni/QoreClosure.java:    }
java/org/qore/jni/QoreClosure.java:    private native Object call0(long pgm_ptr, long obj_ptr, Object... args);
java/org/qore/jni/QoreClosure.java:    private native Object callSave0(long pgm_ptr, long obj_ptr, Object... args);
java/org/qore/jni/QoreClosure.java:    private native void finalize0(long obj_ptr);
java/org/qore/jni/QoreClosure.java:}
java/org/qore/jni/JavaClassBuilder.java:package org.qore.jni;
java/org/qore/jni/JavaClassBuilder.java:import java.lang.reflect.Method;
java/org/qore/jni/JavaClassBuilder.java:import java.lang.reflect.Modifier;
java/org/qore/jni/JavaClassBuilder.java:import java.lang.reflect.Type;
java/org/qore/jni/JavaClassBuilder.java:import java.util.Arrays;
java/org/qore/jni/JavaClassBuilder.java:import java.util.ArrayList;
java/org/qore/jni/JavaClassBuilder.java:import java.util.List;
java/org/qore/jni/JavaClassBuilder.java:import java.util.Collections;
java/org/qore/jni/JavaClassBuilder.java:import java.nio.file.Files;
java/org/qore/jni/JavaClassBuilder.java:import java.nio.file.Path;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.ByteBuddy;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.modifier.Ownership;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.modifier.Visibility;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.type.TypeDescription;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.type.TypeDefinition;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.type.TypeList;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.modifier.MethodArguments;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.method.MethodDescription.Token;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.description.field.FieldDescription;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.dynamic.DynamicType;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.dynamic.scaffold.InstrumentedType;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.dynamic.scaffold.TypeValidation;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.implementation.bind.annotation.Argument;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.implementation.bind.annotation.RuntimeType;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.implementation.bytecode.assign.Assigner;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.implementation.MethodCall;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.implementation.FixedValue;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.implementation.Implementation;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.NamingStrategy;
java/org/qore/jni/JavaClassBuilder.java:import net.bytebuddy.matcher.ElementMatchers;
java/org/qore/jni/JavaClassBuilder.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/JavaClassBuilder.java:import org.qore.jni.QoreJavaObjectPtr;
java/org/qore/jni/JavaClassBuilder.java:/** Helper class for building dynamic Java classes
java/org/qore/jni/JavaClassBuilder.java: */
java/org/qore/jni/JavaClassBuilder.java:public class JavaClassBuilder {
java/org/qore/jni/JavaClassBuilder.java:    private static Class objArray;
java/org/qore/jni/JavaClassBuilder.java:    private static Method mStaticCall;
java/org/qore/jni/JavaClassBuilder.java:    private static Method mNormalCall;
java/org/qore/jni/JavaClassBuilder.java:    private static Method mFunctionCall;
java/org/qore/jni/JavaClassBuilder.java:    private static Method mGetConstantValue;
java/org/qore/jni/JavaClassBuilder.java:    private static final String CLASS_FIELD = "$qore_cls_ptr";
java/org/qore/jni/JavaClassBuilder.java:    // copied from org.objectweb.asm.Opcodes
java/org/qore/jni/JavaClassBuilder.java:    public static final int ACC_PUBLIC    = (1 << 0);
java/org/qore/jni/JavaClassBuilder.java:    public static final int ACC_PRIVATE   = (1 << 1);
java/org/qore/jni/JavaClassBuilder.java:    public static final int ACC_PROTECTED = (1 << 2);
java/org/qore/jni/JavaClassBuilder.java:    public static final int ACC_STATIC    = (1 << 3);
java/org/qore/jni/JavaClassBuilder.java:    public static final int ACC_FINAL     = (1 << 4);
java/org/qore/jni/JavaClassBuilder.java:    public static final int ACC_ABSTRACT  = (1 << 10);
java/org/qore/jni/JavaClassBuilder.java:    //! static initialization
java/org/qore/jni/JavaClassBuilder.java:    static {
java/org/qore/jni/JavaClassBuilder.java:        try {
java/org/qore/jni/JavaClassBuilder.java:            objArray = Class.forName("[L" + Object.class.getCanonicalName() + ";");
java/org/qore/jni/JavaClassBuilder.java:            Class<?>[] args = new Class<?>[6];
java/org/qore/jni/JavaClassBuilder.java:            args[0] = String.class;
java/org/qore/jni/JavaClassBuilder.java:            args[1] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[2] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[3] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[4] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[5] = objArray;
java/org/qore/jni/JavaClassBuilder.java:            mStaticCall = JavaClassBuilder.class.getDeclaredMethod("doStaticCall", args);
java/org/qore/jni/JavaClassBuilder.java:            args = new Class<?>[5];
java/org/qore/jni/JavaClassBuilder.java:            args[0] = String.class;
java/org/qore/jni/JavaClassBuilder.java:            args[1] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[2] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[3] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[4] = objArray;
java/org/qore/jni/JavaClassBuilder.java:            mNormalCall = JavaClassBuilder.class.getDeclaredMethod("doNormalCall", args);
java/org/qore/jni/JavaClassBuilder.java:            args = new Class<?>[4];
java/org/qore/jni/JavaClassBuilder.java:            args[0] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[1] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[2] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[3] = objArray;
java/org/qore/jni/JavaClassBuilder.java:            mFunctionCall = JavaClassBuilder.class.getDeclaredMethod("doFunctionCall", args);
java/org/qore/jni/JavaClassBuilder.java:            args = new Class<?>[2];
java/org/qore/jni/JavaClassBuilder.java:            args[0] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            args[1] = Long.TYPE;
java/org/qore/jni/JavaClassBuilder.java:            mGetConstantValue = JavaClassBuilder.class.getDeclaredMethod("getConstantValue", args);
java/org/qore/jni/JavaClassBuilder.java:        } catch (Throwable e) {
java/org/qore/jni/JavaClassBuilder.java:            throw new ExceptionInInitializerError(e);
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! Returns a builder object for a dynamic class mapping Qore functions to static Java methods
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> getFunctionConstantClassBuilder(String bin_name) throws NoSuchMethodException {
java/org/qore/jni/JavaClassBuilder.java:        return new ByteBuddy()
java/org/qore/jni/JavaClassBuilder.java:            .with(TypeValidation.DISABLED)
java/org/qore/jni/JavaClassBuilder.java:            .with(new NamingStrategy.AbstractBase() {
java/org/qore/jni/JavaClassBuilder.java:                @Override
java/org/qore/jni/JavaClassBuilder.java:                public String name(TypeDescription superClass) {
java/org/qore/jni/JavaClassBuilder.java:                    return bin_name;
java/org/qore/jni/JavaClassBuilder.java:                }
java/org/qore/jni/JavaClassBuilder.java:            })
java/org/qore/jni/JavaClassBuilder.java:            .subclass(Object.class, ConstructorStrategy.Default.NO_CONSTRUCTORS)
java/org/qore/jni/JavaClassBuilder.java:            .modifiers(ACC_PUBLIC);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! Add a function to a function class
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> addFunction(DynamicType.Builder<?> bb, String functionName, long pgm,
java/org/qore/jni/JavaClassBuilder.java:            long fptr, long vptr, TypeDefinition returnType, List<TypeDefinition> paramTypes, boolean varargs) {
java/org/qore/jni/JavaClassBuilder.java:        if (paramTypes == null) {
java/org/qore/jni/JavaClassBuilder.java:            paramTypes = new ArrayList<TypeDefinition>();
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        DynamicType.Builder.MethodDefinition.ExceptionDefinition<?> eb =
java/org/qore/jni/JavaClassBuilder.java:            varargs
java/org/qore/jni/JavaClassBuilder.java:                ? bb.defineMethod(functionName, returnType, Visibility.PUBLIC, Ownership.STATIC,
java/org/qore/jni/JavaClassBuilder.java:                    MethodArguments.VARARGS)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class)
java/org/qore/jni/JavaClassBuilder.java:                : bb.defineMethod(functionName, returnType, Visibility.PUBLIC, Ownership.STATIC)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class);
java/org/qore/jni/JavaClassBuilder.java:        return (DynamicType.Builder<?>)eb.intercept(
java/org/qore/jni/JavaClassBuilder.java:                MethodCall.invoke(mFunctionCall)
java/org/qore/jni/JavaClassBuilder.java:                    .with(pgm)
java/org/qore/jni/JavaClassBuilder.java:                    .with(fptr)
java/org/qore/jni/JavaClassBuilder.java:                    .with(vptr)
java/org/qore/jni/JavaClassBuilder.java:                    .withArgumentArray()
java/org/qore/jni/JavaClassBuilder.java:                    .withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC)
java/org/qore/jni/JavaClassBuilder.java:            );
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! Add a field to a class
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> addStaticField(DynamicType.Builder<?> bb, String fieldName, int modifiers,
java/org/qore/jni/JavaClassBuilder.java:            TypeDescription fieldType, long cPtr, ArrayList<StaticEntry> staticList) {
java/org/qore/jni/JavaClassBuilder.java:        modifiers |= ACC_FINAL | ACC_STATIC;
java/org/qore/jni/JavaClassBuilder.java:        bb = bb.defineField(fieldName, fieldType, modifiers);
java/org/qore/jni/JavaClassBuilder.java:        staticList.add(new StaticEntry(fieldName, modifiers, fieldType, cPtr));
java/org/qore/jni/JavaClassBuilder.java:        return bb;
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! Creates the static initializer for a class
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> createStaticInitializer(DynamicType.Builder<?> bb, String className,
java/org/qore/jni/JavaClassBuilder.java:            long pgm, ArrayList<StaticEntry> staticList) {
java/org/qore/jni/JavaClassBuilder.java:        Implementation.Composable mc = null;
java/org/qore/jni/JavaClassBuilder.java:        for (StaticEntry entry : staticList) {
java/org/qore/jni/JavaClassBuilder.java:            Implementation.Composable new_mc = MethodCall.invoke(mGetConstantValue)
java/org/qore/jni/JavaClassBuilder.java:                .with(pgm)
java/org/qore/jni/JavaClassBuilder.java:                .with(entry.cPtr)
java/org/qore/jni/JavaClassBuilder.java:                .setsField(ElementMatchers.is(
java/org/qore/jni/JavaClassBuilder.java:                    new FieldDescription.Latent(
java/org/qore/jni/JavaClassBuilder.java:                        InstrumentedType.Default.of(className, null, Modifier.PUBLIC
java/org/qore/jni/JavaClassBuilder.java:                    ),
java/org/qore/jni/JavaClassBuilder.java:                    new FieldDescription.Token(
java/org/qore/jni/JavaClassBuilder.java:                        entry.fieldName,
java/org/qore/jni/JavaClassBuilder.java:                        entry.modifiers,
java/org/qore/jni/JavaClassBuilder.java:                        new TypeDescription.Generic.OfNonGenericType.Latent(entry.fieldType, null))
java/org/qore/jni/JavaClassBuilder.java:                    )
java/org/qore/jni/JavaClassBuilder.java:                ))
java/org/qore/jni/JavaClassBuilder.java:                .withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC);
java/org/qore/jni/JavaClassBuilder.java:            if (mc == null) {
java/org/qore/jni/JavaClassBuilder.java:                mc = new_mc;
java/org/qore/jni/JavaClassBuilder.java:            } else {
java/org/qore/jni/JavaClassBuilder.java:                mc = mc.andThen(new_mc);
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        if (mc == null) {
java/org/qore/jni/JavaClassBuilder.java:            return bb;
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        return bb.invokable(ElementMatchers.isTypeInitializer())
java/org/qore/jni/JavaClassBuilder.java:            .intercept(mc);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! Returns a builder object for a dynamic class
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> getClassBuilder(String className, Class<?> parentClass,
java/org/qore/jni/JavaClassBuilder.java:            ArrayList<Type> interfaces, boolean is_abstract, long cptr) throws NoSuchMethodException {
java/org/qore/jni/JavaClassBuilder.java:        DynamicType.Builder<?> bb;
java/org/qore/jni/JavaClassBuilder.java:        bb = new ByteBuddy()
java/org/qore/jni/JavaClassBuilder.java:            .with(TypeValidation.DISABLED)
java/org/qore/jni/JavaClassBuilder.java:            .with(new NamingStrategy.AbstractBase() {
java/org/qore/jni/JavaClassBuilder.java:                @Override
java/org/qore/jni/JavaClassBuilder.java:                public String name(TypeDescription superClass) {
java/org/qore/jni/JavaClassBuilder.java:                    return className;
java/org/qore/jni/JavaClassBuilder.java:                }
java/org/qore/jni/JavaClassBuilder.java:            })
java/org/qore/jni/JavaClassBuilder.java:            .subclass(parentClass, ConstructorStrategy.Default.NO_CONSTRUCTORS);
java/org/qore/jni/JavaClassBuilder.java:        // add interfaces to class
java/org/qore/jni/JavaClassBuilder.java:        if (interfaces != null) {
java/org/qore/jni/JavaClassBuilder.java:            for (Type t : interfaces) {
java/org/qore/jni/JavaClassBuilder.java:                bb = bb.implement(t);
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        int modifiers = ACC_PUBLIC;
java/org/qore/jni/JavaClassBuilder.java:        if (is_abstract) {
java/org/qore/jni/JavaClassBuilder.java:            modifiers |= ACC_ABSTRACT;
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        bb = bb.modifiers(modifiers);
java/org/qore/jni/JavaClassBuilder.java:        // add a static field for storing the class ptr
java/org/qore/jni/JavaClassBuilder.java:        bb = (DynamicType.Builder<?>)bb.defineField(CLASS_FIELD, Long.TYPE,
java/org/qore/jni/JavaClassBuilder.java:            Modifier.FINAL | Modifier.PUBLIC | Modifier.STATIC)
java/org/qore/jni/JavaClassBuilder.java:            .value(cptr);
java/org/qore/jni/JavaClassBuilder.java:        // add default constructor for already-created Qore objects
java/org/qore/jni/JavaClassBuilder.java:        ArrayList<Type> paramTypes = new ArrayList<Type>();
java/org/qore/jni/JavaClassBuilder.java:        paramTypes.add(QoreJavaObjectPtr.class);
java/org/qore/jni/JavaClassBuilder.java:        bb = (DynamicType.Builder<?>)bb.defineConstructor(Visibility.PUBLIC)
java/org/qore/jni/JavaClassBuilder.java:            .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:            .intercept(
java/org/qore/jni/JavaClassBuilder.java:                MethodCall.invoke(parentClass.getConstructor(QoreJavaObjectPtr.class))
java/org/qore/jni/JavaClassBuilder.java:                    .onSuper()
java/org/qore/jni/JavaClassBuilder.java:                    .withArgument(0)
java/org/qore/jni/JavaClassBuilder.java:            );
java/org/qore/jni/JavaClassBuilder.java:        // add default constructor for dynamic creation from Qore
java/org/qore/jni/JavaClassBuilder.java:        paramTypes = new ArrayList<Type>();
java/org/qore/jni/JavaClassBuilder.java:        paramTypes.add(Long.TYPE);
java/org/qore/jni/JavaClassBuilder.java:        paramTypes.add(Long.TYPE);
java/org/qore/jni/JavaClassBuilder.java:        paramTypes.add(Long.TYPE);
java/org/qore/jni/JavaClassBuilder.java:        paramTypes.add(objArray);
java/org/qore/jni/JavaClassBuilder.java:        return (DynamicType.Builder<?>)bb.defineConstructor(Visibility.PUBLIC)
java/org/qore/jni/JavaClassBuilder.java:            .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:            .throwing(Throwable.class)
java/org/qore/jni/JavaClassBuilder.java:            .intercept(
java/org/qore/jni/JavaClassBuilder.java:                MethodCall.invoke(parentClass.getConstructor(Long.TYPE, Long.TYPE, Long.TYPE, objArray))
java/org/qore/jni/JavaClassBuilder.java:                    .onSuper()
java/org/qore/jni/JavaClassBuilder.java:                    .withAllArguments()
java/org/qore/jni/JavaClassBuilder.java:            );
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! add a constructor
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> addConstructor(DynamicType.Builder<?> bb, Class<?> parentClass,
java/org/qore/jni/JavaClassBuilder.java:            long mptr, long vptr, int visibility, List<TypeDefinition> paramTypes, boolean varargs) {
java/org/qore/jni/JavaClassBuilder.java:        if (paramTypes == null) {
java/org/qore/jni/JavaClassBuilder.java:            paramTypes = new ArrayList<TypeDefinition>();
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        DynamicType.Builder.MethodDefinition.ExceptionDefinition<?> eb = varargs
java/org/qore/jni/JavaClassBuilder.java:                ? bb.defineConstructor(getVisibility(visibility), MethodArguments.VARARGS)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class)
java/org/qore/jni/JavaClassBuilder.java:                : bb.defineConstructor(getVisibility(visibility))
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class);
java/org/qore/jni/JavaClassBuilder.java:        try {
java/org/qore/jni/JavaClassBuilder.java:            if (paramTypes.size() == 0) {
java/org/qore/jni/JavaClassBuilder.java:                return (DynamicType.Builder<?>)eb.intercept(
java/org/qore/jni/JavaClassBuilder.java:                        MethodCall.invoke(parentClass.getConstructor(Long.TYPE, Long.TYPE, Long.TYPE, objArray))
java/org/qore/jni/JavaClassBuilder.java:                            .onSuper()
java/org/qore/jni/JavaClassBuilder.java:                            .withField(CLASS_FIELD)
java/org/qore/jni/JavaClassBuilder.java:                            .with(mptr)
java/org/qore/jni/JavaClassBuilder.java:                            .with(vptr)
java/org/qore/jni/JavaClassBuilder.java:                            .with((Object)null)
java/org/qore/jni/JavaClassBuilder.java:                );
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:            return (DynamicType.Builder<?>)eb.intercept(
java/org/qore/jni/JavaClassBuilder.java:                    MethodCall.invoke(parentClass.getConstructor(Long.TYPE, Long.TYPE, Long.TYPE, objArray))
java/org/qore/jni/JavaClassBuilder.java:                        .onSuper()
java/org/qore/jni/JavaClassBuilder.java:                        .withField(CLASS_FIELD)
java/org/qore/jni/JavaClassBuilder.java:                        .with(mptr)
java/org/qore/jni/JavaClassBuilder.java:                        .with(vptr)
java/org/qore/jni/JavaClassBuilder.java:                        .withArgumentArray()
java/org/qore/jni/JavaClassBuilder.java:            );
java/org/qore/jni/JavaClassBuilder.java:        } catch (NoSuchMethodException e) {
java/org/qore/jni/JavaClassBuilder.java:            throw new RuntimeException(e);
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! add normal method
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> addNormalMethod(DynamicType.Builder<?> bb, String methodName, long mptr,
java/org/qore/jni/JavaClassBuilder.java:            long vptr, int visibility, TypeDefinition returnType, List<TypeDefinition> paramTypes, boolean isAbstract,
java/org/qore/jni/JavaClassBuilder.java:            boolean varargs) {
java/org/qore/jni/JavaClassBuilder.java:        if (paramTypes == null) {
java/org/qore/jni/JavaClassBuilder.java:            paramTypes = new ArrayList<TypeDefinition>();
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        DynamicType.Builder.MethodDefinition.ExceptionDefinition<?> eb =
java/org/qore/jni/JavaClassBuilder.java:            varargs
java/org/qore/jni/JavaClassBuilder.java:                ? bb.defineMethod(methodName, returnType, getVisibility(visibility), Ownership.MEMBER,
java/org/qore/jni/JavaClassBuilder.java:                    MethodArguments.VARARGS)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class)
java/org/qore/jni/JavaClassBuilder.java:                : bb.defineMethod(methodName, returnType, getVisibility(visibility), Ownership.MEMBER)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class);
java/org/qore/jni/JavaClassBuilder.java:        if (isAbstract) {
java/org/qore/jni/JavaClassBuilder.java:            try {
java/org/qore/jni/JavaClassBuilder.java:                bb = (DynamicType.Builder<?>)eb.withoutCode();
java/org/qore/jni/JavaClassBuilder.java:            } catch (Throwable e) {
java/org/qore/jni/JavaClassBuilder.java:                //System.out.println(e.toString());
java/org/qore/jni/JavaClassBuilder.java:                throw e;
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:        } else if (paramTypes.size() == 0) {
java/org/qore/jni/JavaClassBuilder.java:            bb = (DynamicType.Builder<?>)eb.intercept(
java/org/qore/jni/JavaClassBuilder.java:                    MethodCall.invoke(mNormalCall)
java/org/qore/jni/JavaClassBuilder.java:                    .with(methodName)
java/org/qore/jni/JavaClassBuilder.java:                    .withField("obj")
java/org/qore/jni/JavaClassBuilder.java:                    .with(mptr)
java/org/qore/jni/JavaClassBuilder.java:                    .with(vptr)
java/org/qore/jni/JavaClassBuilder.java:                    .with((Object)null)
java/org/qore/jni/JavaClassBuilder.java:                    .withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC)
java/org/qore/jni/JavaClassBuilder.java:                );
java/org/qore/jni/JavaClassBuilder.java:        } else {
java/org/qore/jni/JavaClassBuilder.java:            bb = (DynamicType.Builder<?>)eb.intercept(
java/org/qore/jni/JavaClassBuilder.java:                    MethodCall.invoke(mNormalCall)
java/org/qore/jni/JavaClassBuilder.java:                    .with(methodName)
java/org/qore/jni/JavaClassBuilder.java:                    .withField("obj")
java/org/qore/jni/JavaClassBuilder.java:                    .with(mptr)
java/org/qore/jni/JavaClassBuilder.java:                    .with(vptr)
java/org/qore/jni/JavaClassBuilder.java:                    .withArgumentArray()
java/org/qore/jni/JavaClassBuilder.java:                    .withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC)
java/org/qore/jni/JavaClassBuilder.java:            );
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        return bb;
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    //! add static method
java/org/qore/jni/JavaClassBuilder.java:    public static DynamicType.Builder<?> addStaticMethod(DynamicType.Builder<?> bb, String methodName, long pgm, long mptr,
java/org/qore/jni/JavaClassBuilder.java:            long vptr, int visibility, TypeDefinition returnType, List<TypeDefinition> paramTypes, boolean varargs) {
java/org/qore/jni/JavaClassBuilder.java:        if (paramTypes == null) {
java/org/qore/jni/JavaClassBuilder.java:            paramTypes = new ArrayList<TypeDefinition>();
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        DynamicType.Builder.MethodDefinition.ExceptionDefinition<?> eb =
java/org/qore/jni/JavaClassBuilder.java:            varargs
java/org/qore/jni/JavaClassBuilder.java:                ? bb.defineMethod(methodName, returnType, getVisibility(visibility), Ownership.STATIC,
java/org/qore/jni/JavaClassBuilder.java:                    MethodArguments.VARARGS)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class)
java/org/qore/jni/JavaClassBuilder.java:                : bb.defineMethod(methodName, returnType, getVisibility(visibility), Ownership.STATIC)
java/org/qore/jni/JavaClassBuilder.java:                    .withParameters(paramTypes)
java/org/qore/jni/JavaClassBuilder.java:                    .throwing(Throwable.class);
java/org/qore/jni/JavaClassBuilder.java:        return (DynamicType.Builder<?>)eb.intercept(
java/org/qore/jni/JavaClassBuilder.java:                MethodCall.invoke(mStaticCall)
java/org/qore/jni/JavaClassBuilder.java:                .with(methodName)
java/org/qore/jni/JavaClassBuilder.java:                .withField(CLASS_FIELD)
java/org/qore/jni/JavaClassBuilder.java:                .with(pgm)
java/org/qore/jni/JavaClassBuilder.java:                .with(mptr)
java/org/qore/jni/JavaClassBuilder.java:                .with(vptr)
java/org/qore/jni/JavaClassBuilder.java:                .withArgumentArray()
java/org/qore/jni/JavaClassBuilder.java:                .withAssigner(Assigner.DEFAULT, Assigner.Typing.DYNAMIC)
java/org/qore/jni/JavaClassBuilder.java:            );
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    @SuppressWarnings("unchecked")
java/org/qore/jni/JavaClassBuilder.java:    public static byte[] getByteCodeFromBuilder(DynamicType.Builder<?> bb, QoreURLClassLoader classLoader) {
java/org/qore/jni/JavaClassBuilder.java:        DynamicType.Unloaded<?> unloaded = bb.make();
java/org/qore/jni/JavaClassBuilder.java:        byte[] byte_code = unloaded.getBytes();
java/org/qore/jni/JavaClassBuilder.java:        //System.out.printf("JavaClassBuilder.getClassFromBuilder() %s: got %d bytes (cl: %s)\n",
java/org/qore/jni/JavaClassBuilder.java:        //    unloaded.getTypeDescription().getCanonicalName(), byte_code.length, classLoader);
java/org/qore/jni/JavaClassBuilder.java:        return byte_code;
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** makes a static method call
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @param methodName the name of the method
java/org/qore/jni/JavaClassBuilder.java:     * @param qclsptr the class pointer
java/org/qore/jni/JavaClassBuilder.java:     * @param mptr the method pointer
java/org/qore/jni/JavaClassBuilder.java:     * @param vptr the variant pointer
java/org/qore/jni/JavaClassBuilder.java:     * @param args the arguments to the call, if any, can be null
java/org/qore/jni/JavaClassBuilder.java:     * @return the result of the call
java/org/qore/jni/JavaClassBuilder.java:     * @throws Throwable any exception thrown in Qore
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    @RuntimeType
java/org/qore/jni/JavaClassBuilder.java:    public static Object doStaticCall(String methodName, long qclsptr, long pgm, long mptr, long vptr,
java/org/qore/jni/JavaClassBuilder.java:            @Argument(0) Object... args) throws Throwable {
java/org/qore/jni/JavaClassBuilder.java:        //System.out.println(String.format("JavaClassBuilder::doStaticCall() %s() cptr: %d args: %s", methodName,
java/org/qore/jni/JavaClassBuilder.java:        //  qclsptr, Arrays.toString(args)));
java/org/qore/jni/JavaClassBuilder.java:        return doStaticCall0(methodName, qclsptr, pgm, mptr, vptr, args);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** makes a normal method call
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @param methodName the name of the method
java/org/qore/jni/JavaClassBuilder.java:     * @param qobjptr the pointer to the Qore object
java/org/qore/jni/JavaClassBuilder.java:     * @param mptr the pointer to the Qore method object
java/org/qore/jni/JavaClassBuilder.java:     * @param vptr the pointer to the method variant object
java/org/qore/jni/JavaClassBuilder.java:     * @param args the arguments to the call, if any, can be null
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @return the result of the call
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @throws Throwable any exception thrown in Qore
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    @RuntimeType
java/org/qore/jni/JavaClassBuilder.java:    public static Object doNormalCall(String methodName, long qobjptr, long mptr, long vptr,
java/org/qore/jni/JavaClassBuilder.java:            @Argument(0) Object... args) throws Throwable {
java/org/qore/jni/JavaClassBuilder.java:        //System.out.println(String.format("JavaClassBuilder::doNormalCall() %s() ptr: %d args: %s", methodName,
java/org/qore/jni/JavaClassBuilder.java:        //  qobjptr, Arrays.toString(args)));
java/org/qore/jni/JavaClassBuilder.java:        return doNormalCall0(methodName, qobjptr, mptr, vptr, args);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** makes a function call
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @param fptr the pointer to the Qore function object
java/org/qore/jni/JavaClassBuilder.java:     * @param vptr the pointer to the method variant object
java/org/qore/jni/JavaClassBuilder.java:     * @param args the arguments to the call, if any, can be null
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @return the result of the call
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @throws Throwable any exception thrown in Qore
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    @RuntimeType
java/org/qore/jni/JavaClassBuilder.java:    public static Object doFunctionCall(long pgm, long fptr, long vptr, @Argument(0) Object... args)
java/org/qore/jni/JavaClassBuilder.java:            throws Throwable {
java/org/qore/jni/JavaClassBuilder.java:        //System.out.println(String.format("JavaClassBuilder::doFunctionCall() %s() args: %s", methodName,
java/org/qore/jni/JavaClassBuilder.java:        //  Arrays.toString(args)));
java/org/qore/jni/JavaClassBuilder.java:        return doFunctionCall0(pgm, fptr, vptr, args);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** retrieves the value of a constant from the given Qore program
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @param pgm the pointer to the Qore program object
java/org/qore/jni/JavaClassBuilder.java:     * @param cPtr the pointer the constant entry
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @return the value of the given constant
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    @RuntimeType
java/org/qore/jni/JavaClassBuilder.java:    public static Object getConstantValue(long pgm, long cPtr) throws Throwable {
java/org/qore/jni/JavaClassBuilder.java:        return getConstantValue0(pgm, cPtr);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** Returns a TypeDescription object for the given class
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @param cls the class to return a TypeDescription for
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    public static TypeDescription getTypeDescription(Class<?> cls) {
java/org/qore/jni/JavaClassBuilder.java:        return new TypeDescription.ForLoadedType(cls);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** Returns a TypeDescription for a future type based on the binary name
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     * @param future_name The binary name of the type to be created
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    public static TypeDescription getTypeDescription(String future_name) {
java/org/qore/jni/JavaClassBuilder.java:        return InstrumentedType.Default.of(future_name, null, Modifier.PUBLIC);
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    /** Check a class for methods matching a name an TypeDescription list
java/org/qore/jni/JavaClassBuilder.java:     *
java/org/qore/jni/JavaClassBuilder.java:     */
java/org/qore/jni/JavaClassBuilder.java:    public static boolean findBaseClassMethodConflict(Class<?> parentClass, String name, List<TypeDescription> params,
java/org/qore/jni/JavaClassBuilder.java:            boolean check_static) {
java/org/qore/jni/JavaClassBuilder.java:        for (Method m : parentClass.getMethods()) {
java/org/qore/jni/JavaClassBuilder.java:            if (!m.getName().equals(name) || Modifier.isStatic(m.getModifiers()) != check_static) {
java/org/qore/jni/JavaClassBuilder.java:                continue;
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:            // check params
java/org/qore/jni/JavaClassBuilder.java:            Type[] mparams = m.getGenericParameterTypes();
java/org/qore/jni/JavaClassBuilder.java:            if (mparams == null || mparams.length == 0) {
java/org/qore/jni/JavaClassBuilder.java:                if (params == null || params.size() == 0) {
java/org/qore/jni/JavaClassBuilder.java:                    return true;
java/org/qore/jni/JavaClassBuilder.java:                }
java/org/qore/jni/JavaClassBuilder.java:                continue;
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:            if (mparams.length != params.size()) {
java/org/qore/jni/JavaClassBuilder.java:                continue;
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:            boolean ok = true;
java/org/qore/jni/JavaClassBuilder.java:            for (int i = 0; i < mparams.length; ++i) {
java/org/qore/jni/JavaClassBuilder.java:                Type mtype = mparams[i];
java/org/qore/jni/JavaClassBuilder.java:                TypeDescription ptype = params.get(i);
java/org/qore/jni/JavaClassBuilder.java:                if (mtype instanceof Class) {
java/org/qore/jni/JavaClassBuilder.java:                    Class cls = (Class)mtype;
java/org/qore/jni/JavaClassBuilder.java:                    if (!ptype.getCanonicalName().equals(cls.getCanonicalName())) {
java/org/qore/jni/JavaClassBuilder.java:                        ok = false;
java/org/qore/jni/JavaClassBuilder.java:                        break;
java/org/qore/jni/JavaClassBuilder.java:                    }
java/org/qore/jni/JavaClassBuilder.java:                } else if (!ptype.getCanonicalName().equals(mtype.getTypeName())) {
java/org/qore/jni/JavaClassBuilder.java:                    ok = false;
java/org/qore/jni/JavaClassBuilder.java:                    break;
java/org/qore/jni/JavaClassBuilder.java:                }
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:            if (ok) {
java/org/qore/jni/JavaClassBuilder.java:                return true;
java/org/qore/jni/JavaClassBuilder.java:            }
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        return false;
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    static private Visibility getVisibility(int visibility) {
java/org/qore/jni/JavaClassBuilder.java:        switch (visibility) {
java/org/qore/jni/JavaClassBuilder.java:            case ACC_PUBLIC:
java/org/qore/jni/JavaClassBuilder.java:                return Visibility.PUBLIC;
java/org/qore/jni/JavaClassBuilder.java:            case ACC_PROTECTED:
java/org/qore/jni/JavaClassBuilder.java:                return Visibility.PROTECTED;
java/org/qore/jni/JavaClassBuilder.java:            default:
java/org/qore/jni/JavaClassBuilder.java:                break;
java/org/qore/jni/JavaClassBuilder.java:        }
java/org/qore/jni/JavaClassBuilder.java:        return Visibility.PRIVATE;
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:    private static native Object doStaticCall0(String methodName, long qclsptr, long pgm, long mptr, long vptr,
java/org/qore/jni/JavaClassBuilder.java:            Object... args) throws Throwable;
java/org/qore/jni/JavaClassBuilder.java:    private static native Object doNormalCall0(String methodName, long qobjptr, long mptr, long vptr, Object... args)
java/org/qore/jni/JavaClassBuilder.java:            throws Throwable;
java/org/qore/jni/JavaClassBuilder.java:    private static native Object doFunctionCall0(long pgm, long fptr, long vptr, @Argument(0) Object... args)
java/org/qore/jni/JavaClassBuilder.java:            throws Throwable;
java/org/qore/jni/JavaClassBuilder.java:    private static native Object getConstantValue0(long pgm, long cPtr) throws Throwable;
java/org/qore/jni/JavaClassBuilder.java:}
java/org/qore/jni/JavaClassBuilder.java:class StaticEntry {
java/org/qore/jni/JavaClassBuilder.java:    public String fieldName;
java/org/qore/jni/JavaClassBuilder.java:    public int modifiers;
java/org/qore/jni/JavaClassBuilder.java:    public TypeDescription fieldType;
java/org/qore/jni/JavaClassBuilder.java:    public long cPtr;
java/org/qore/jni/JavaClassBuilder.java:    StaticEntry(String fieldName, int modifiers, TypeDescription fieldType, long cPtr) {
java/org/qore/jni/JavaClassBuilder.java:        this.fieldName = fieldName;
java/org/qore/jni/JavaClassBuilder.java:        this.modifiers = modifiers;
java/org/qore/jni/JavaClassBuilder.java:        this.fieldType = fieldType;
java/org/qore/jni/JavaClassBuilder.java:        this.cPtr = cPtr;
java/org/qore/jni/JavaClassBuilder.java:    }
java/org/qore/jni/JavaClassBuilder.java:}
java/org/qore/jni/QoreObjectBase.java:package org.qore.jni;
java/org/qore/jni/QoreObjectBase.java://! wrapper class for a %Qore object; this class holds a weak reference to the %Qore object
java/org/qore/jni/QoreObjectBase.java:/** Due to the different in garbage collecting approaches (%Qore's garbage collector being
java/org/qore/jni/QoreObjectBase.java:    <a href="https://github.com/qorelanguage/qore/wiki/Prompt-Collection">deterministic</a> and Java's not),
java/org/qore/jni/QoreObjectBase.java:    strong references to %Qore objects must be managed outside of Java.
java/org/qore/jni/QoreObjectBase.java:    @note API usage errors such as with releasing / deleting the object and then calling methods
java/org/qore/jni/QoreObjectBase.java:    on the object will cause a crash
java/org/qore/jni/QoreObjectBase.java:    @since 1.2
java/org/qore/jni/QoreObjectBase.java: */
java/org/qore/jni/QoreObjectBase.java:public class QoreObjectBase {
java/org/qore/jni/QoreObjectBase.java:    //! a pointer to the Qore object
java/org/qore/jni/QoreObjectBase.java:    protected long obj;
java/org/qore/jni/QoreObjectBase.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreObjectBase.java:    public QoreObjectBase(long qcptr, long mptr, long vptr, Object... args) throws Throwable {
java/org/qore/jni/QoreObjectBase.java:        obj = create0(qcptr, mptr, vptr, this, args);
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreObjectBase.java:    public QoreObjectBase(long obj) {
java/org/qore/jni/QoreObjectBase.java:        this.obj = obj;
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    //! returns the pointer to the object
java/org/qore/jni/QoreObjectBase.java:    public long get() {
java/org/qore/jni/QoreObjectBase.java:        return obj;
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    //! releases the Qore object without destroying it
java/org/qore/jni/QoreObjectBase.java:    /** @note if the object is returned to Qore, do not release it; allow the weak reference
java/org/qore/jni/QoreObjectBase.java:        to be released when finalized
java/org/qore/jni/QoreObjectBase.java:     */
java/org/qore/jni/QoreObjectBase.java:    public void release() {
java/org/qore/jni/QoreObjectBase.java:        long x = releasePointer();
java/org/qore/jni/QoreObjectBase.java:        if (x != 0) {
java/org/qore/jni/QoreObjectBase.java:            release0(x);
java/org/qore/jni/QoreObjectBase.java:        }
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    //! runs the destructor
java/org/qore/jni/QoreObjectBase.java:    public void destroy() {
java/org/qore/jni/QoreObjectBase.java:        long x = releasePointer();
java/org/qore/jni/QoreObjectBase.java:        if (x != 0) {
java/org/qore/jni/QoreObjectBase.java:            destroy0(x);
java/org/qore/jni/QoreObjectBase.java:        }
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    //! releases the weak reference
java/org/qore/jni/QoreObjectBase.java:    @SuppressWarnings("deprecation")
java/org/qore/jni/QoreObjectBase.java:    @Override
java/org/qore/jni/QoreObjectBase.java:    protected void finalize() throws Throwable {
java/org/qore/jni/QoreObjectBase.java:        if (obj != 0) {
java/org/qore/jni/QoreObjectBase.java:            finalize0(obj);
java/org/qore/jni/QoreObjectBase.java:            obj = 0;
java/org/qore/jni/QoreObjectBase.java:        }
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    //! clears the internal pointer and returns the pointer value as a long
java/org/qore/jni/QoreObjectBase.java:    private long releasePointer() {
java/org/qore/jni/QoreObjectBase.java:        long x = obj;
java/org/qore/jni/QoreObjectBase.java:        obj = 0;
java/org/qore/jni/QoreObjectBase.java:        return x;
java/org/qore/jni/QoreObjectBase.java:    }
java/org/qore/jni/QoreObjectBase.java:    private native long create0(long qcptr, long mptr, long vptr, Object self, Object... args);
java/org/qore/jni/QoreObjectBase.java:    private native void release0(long obj_ptr);
java/org/qore/jni/QoreObjectBase.java:    private native void destroy0(long obj_ptr);
java/org/qore/jni/QoreObjectBase.java:    private native void finalize0(long obj_ptr);
java/org/qore/jni/QoreObjectBase.java:}
java/org/qore/jni/compiler/CompilerOutput.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/CompilerOutput.java:import javax.tools.JavaFileObject;
java/org/qore/jni/compiler/CompilerOutput.java:/**
java/org/qore/jni/compiler/CompilerOutput.java: * Contains the file data and the generated class for each compiled class
java/org/qore/jni/compiler/CompilerOutput.java: */
java/org/qore/jni/compiler/CompilerOutput.java:public class CompilerOutput<T> {
java/org/qore/jni/compiler/CompilerOutput.java:    /**
java/org/qore/jni/compiler/CompilerOutput.java:     * The compiled class
java/org/qore/jni/compiler/CompilerOutput.java:     *
java/org/qore/jni/compiler/CompilerOutput.java:     * @note This class has been created in the compiler's class loader
java/org/qore/jni/compiler/CompilerOutput.java:     */
java/org/qore/jni/compiler/CompilerOutput.java:    public Class<T> cls;
java/org/qore/jni/compiler/CompilerOutput.java:    /**
java/org/qore/jni/compiler/CompilerOutput.java:     * The output file data
java/org/qore/jni/compiler/CompilerOutput.java:     */
java/org/qore/jni/compiler/CompilerOutput.java:    public JavaFileObject file;
java/org/qore/jni/compiler/CompilerOutput.java:    /**
java/org/qore/jni/compiler/CompilerOutput.java:     * Creates the object
java/org/qore/jni/compiler/CompilerOutput.java:     */
java/org/qore/jni/compiler/CompilerOutput.java:    public CompilerOutput(Class<T> cls, JavaFileObject file) {
java/org/qore/jni/compiler/CompilerOutput.java:        this.cls = cls;
java/org/qore/jni/compiler/CompilerOutput.java:        this.file = file;
java/org/qore/jni/compiler/CompilerOutput.java:    }
java/org/qore/jni/compiler/CompilerOutput.java:}
java/org/qore/jni/compiler/PackageInternalsFinder.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.List;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.ArrayList;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.Enumeration;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.Collection;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.jar.JarEntry;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.HashMap;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.util.HashSet;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.io.IOException;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.io.File;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.nio.charset.StandardCharsets;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.net.URL;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.net.URLConnection;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.net.JarURLConnection;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.net.URI;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import java.net.URLDecoder;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import javax.tools.JavaFileObject;
java/org/qore/jni/compiler/PackageInternalsFinder.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/compiler/PackageInternalsFinder.java:/**
java/org/qore/jni/compiler/PackageInternalsFinder.java: * based on source code by:
java/org/qore/jni/compiler/PackageInternalsFinder.java: * @author atamur
java/org/qore/jni/compiler/PackageInternalsFinder.java: * @since 15-Oct-2009
java/org/qore/jni/compiler/PackageInternalsFinder.java: *
java/org/qore/jni/compiler/PackageInternalsFinder.java: * @author adapted for %Qore by <a href="mailto:david@qore.org">David Nichols</a>
java/org/qore/jni/compiler/PackageInternalsFinder.java: * @since 07-Feb-2021
java/org/qore/jni/compiler/PackageInternalsFinder.java: */
java/org/qore/jni/compiler/PackageInternalsFinder.java:class PackageInternalsFinder {
java/org/qore/jni/compiler/PackageInternalsFinder.java:    private QoreURLClassLoader classLoader;
java/org/qore/jni/compiler/PackageInternalsFinder.java:    private static final String CLASS_FILE_EXTENSION = ".class";
java/org/qore/jni/compiler/PackageInternalsFinder.java:    private final HashMap<String, HashSet<String>> pendingClasses = new HashMap<String, HashSet<String>>();
java/org/qore/jni/compiler/PackageInternalsFinder.java:    public PackageInternalsFinder(QoreURLClassLoader classLoader) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:        this.classLoader = classLoader;
java/org/qore/jni/compiler/PackageInternalsFinder.java:    }
java/org/qore/jni/compiler/PackageInternalsFinder.java:    public List<JavaFileObject> find(String packageName) throws IOException {
java/org/qore/jni/compiler/PackageInternalsFinder.java:        ArrayList<JavaFileObject> result = new ArrayList<JavaFileObject>();
java/org/qore/jni/compiler/PackageInternalsFinder.java:        if (QoreURLClassLoader.isDynamic(packageName)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            for (String bin_name : classLoader.getClassesInNamespace(packageName)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                result.add(new QoreJavaClassObject(bin_name, classLoader, QoreJavaClassObject.OT_NORMAL));
java/org/qore/jni/compiler/PackageInternalsFinder.java:            }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        for (String bin_name : classLoader.getPendingClassesForPackage(packageName)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            result.add(new QoreJavaClassObject(bin_name, classLoader, QoreJavaClassObject.OT_PENDING));
java/org/qore/jni/compiler/PackageInternalsFinder.java:        }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        if (packageName.startsWith("org.qore.jni")) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            for (String bin_name : classLoader.getInternalClassesForPackage(packageName)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                result.add(new QoreJavaClassObject(bin_name, classLoader, QoreJavaClassObject.OT_INTERNAL));
java/org/qore/jni/compiler/PackageInternalsFinder.java:            }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        //System.out.printf("PackageInternalsFinder.find(%s) 1 rv: %s\n", packageName, result);
java/org/qore/jni/compiler/PackageInternalsFinder.java:        String javaPackageName = packageName.replaceAll("\\.", "/");
java/org/qore/jni/compiler/PackageInternalsFinder.java:        //System.out.printf("PackageInternalsFinder.find(%s) checking %s\n", packageName, javaPackageName);
java/org/qore/jni/compiler/PackageInternalsFinder.java:        for (URL url : classLoader.getURLs()) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            result.addAll(listUnder(packageName, url));
java/org/qore/jni/compiler/PackageInternalsFinder.java:        }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        //System.out.printf("PackageInternalsFinder.find(%s) 2 rv: %s\n", packageName, result.toString());
java/org/qore/jni/compiler/PackageInternalsFinder.java:        return result;
java/org/qore/jni/compiler/PackageInternalsFinder.java:    }
java/org/qore/jni/compiler/PackageInternalsFinder.java:    private Collection<JavaFileObject> listUnder(String packageName, URL packageFolderURL) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:        File directory = new File(packageFolderURL.getFile());
java/org/qore/jni/compiler/PackageInternalsFinder.java:        //System.out.printf("listUnder() packageName: %s url: %s dir: %s\n", packageName, packageFolderURL, directory.isDirectory());
java/org/qore/jni/compiler/PackageInternalsFinder.java:        if (directory.isDirectory()) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            // browse local .class files - useful for local execution
java/org/qore/jni/compiler/PackageInternalsFinder.java:            return processDir(packageName, directory);
java/org/qore/jni/compiler/PackageInternalsFinder.java:        } else { // browse a jar file
java/org/qore/jni/compiler/PackageInternalsFinder.java:            return processJar(packageName, packageFolderURL);
java/org/qore/jni/compiler/PackageInternalsFinder.java:        } // maybe there can be something else for more involved class loaders
java/org/qore/jni/compiler/PackageInternalsFinder.java:    }
java/org/qore/jni/compiler/PackageInternalsFinder.java:    private List<JavaFileObject> processJar(String packageName, URL packageFolderURL) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:        List<JavaFileObject> result = new ArrayList<JavaFileObject>();
java/org/qore/jni/compiler/PackageInternalsFinder.java:        try {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            URLConnection conn = packageFolderURL.openConnection();
java/org/qore/jni/compiler/PackageInternalsFinder.java:            //System.out.printf("jar type: %s\n", conn);
java/org/qore/jni/compiler/PackageInternalsFinder.java:            if (!(conn instanceof JarURLConnection)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                // try to get a directory from the URL
java/org/qore/jni/compiler/PackageInternalsFinder.java:                URL url = conn.getURL();
java/org/qore/jni/compiler/PackageInternalsFinder.java:                //System.out.printf("URL: %s\n", conn.getURL());
java/org/qore/jni/compiler/PackageInternalsFinder.java:                if (url.getProtocol().equals("file")) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    String path = URLDecoder.decode(url.getPath(), StandardCharsets.UTF_8);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    File directory = new File(path);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    //System.out.printf("path: %s\n", path);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    if (directory.isDirectory()) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                        return processDir(packageName, directory);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    }
java/org/qore/jni/compiler/PackageInternalsFinder.java:                }
java/org/qore/jni/compiler/PackageInternalsFinder.java:                return result;
java/org/qore/jni/compiler/PackageInternalsFinder.java:            }
java/org/qore/jni/compiler/PackageInternalsFinder.java:            JarURLConnection jarConn = (JarURLConnection)conn;
java/org/qore/jni/compiler/PackageInternalsFinder.java:            String rootEntryName = jarConn.getEntryName();
java/org/qore/jni/compiler/PackageInternalsFinder.java:            if (rootEntryName == null) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                rootEntryName = packageName.replaceAll("\\.", "/");
java/org/qore/jni/compiler/PackageInternalsFinder.java:            }
java/org/qore/jni/compiler/PackageInternalsFinder.java:            int rootEnd = rootEntryName.length() + 1;
java/org/qore/jni/compiler/PackageInternalsFinder.java:            String jarUri = packageFolderURL.toExternalForm().split("!")[0];
java/org/qore/jni/compiler/PackageInternalsFinder.java:            //System.out.printf("jarUri: %s (%s)\n", jarUri, packageFolderURL.toExternalForm());
java/org/qore/jni/compiler/PackageInternalsFinder.java:            Enumeration<JarEntry> entryEnum = jarConn.getJarFile().entries();
java/org/qore/jni/compiler/PackageInternalsFinder.java:            while (entryEnum.hasMoreElements()) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                JarEntry jarEntry = entryEnum.nextElement();
java/org/qore/jni/compiler/PackageInternalsFinder.java:                String name = jarEntry.getName();
java/org/qore/jni/compiler/PackageInternalsFinder.java:                //System.out.printf("pkg: %s ren: %s name: %s\n", packageName, rootEntryName, name);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                if (name.startsWith(rootEntryName) && name.indexOf('/', rootEnd) == -1 && name.endsWith(CLASS_FILE_EXTENSION)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    URI uri = URI.create(jarUri + "!/" + name);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    String binaryName = name.replaceAll("/", ".");
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    binaryName = binaryName.replaceAll(CLASS_FILE_EXTENSION + "$", "");
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    //System.out.printf("adding pkg: %s url: %s bin: %s\n", packageName, uri, binaryName);
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    result.add(new CustomJavaFileObject(binaryName, uri));
java/org/qore/jni/compiler/PackageInternalsFinder.java:                }
java/org/qore/jni/compiler/PackageInternalsFinder.java:            }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        } catch (Exception e) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            //e.printStackTrace();
java/org/qore/jni/compiler/PackageInternalsFinder.java:            throw new RuntimeException("Wasn't able to open " + packageFolderURL + " as a jar file", e);
java/org/qore/jni/compiler/PackageInternalsFinder.java:        }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        return result;
java/org/qore/jni/compiler/PackageInternalsFinder.java:    }
java/org/qore/jni/compiler/PackageInternalsFinder.java:    private List<JavaFileObject> processDir(String packageName, File directory) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:        List<JavaFileObject> result = new ArrayList<JavaFileObject>();
java/org/qore/jni/compiler/PackageInternalsFinder.java:        File[] childFiles = directory.listFiles();
java/org/qore/jni/compiler/PackageInternalsFinder.java:        for (File childFile : childFiles) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:            if (childFile.isFile()) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                // We only want the .class files.
java/org/qore/jni/compiler/PackageInternalsFinder.java:                if (childFile.getName().endsWith(CLASS_FILE_EXTENSION)) {
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    String binaryName = packageName + "." + childFile.getName();
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    binaryName = binaryName.replaceAll(CLASS_FILE_EXTENSION + "$", "");
java/org/qore/jni/compiler/PackageInternalsFinder.java:                    result.add(new CustomJavaFileObject(binaryName, childFile.toURI()));
java/org/qore/jni/compiler/PackageInternalsFinder.java:                }
java/org/qore/jni/compiler/PackageInternalsFinder.java:            }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        }
java/org/qore/jni/compiler/PackageInternalsFinder.java:        return result;
java/org/qore/jni/compiler/PackageInternalsFinder.java:    }
java/org/qore/jni/compiler/PackageInternalsFinder.java:}
java/org/qore/jni/compiler/QoreJavaFileManager.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/QoreJavaFileManager.java:import java.io.*;
java/org/qore/jni/compiler/QoreJavaFileManager.java:import java.util.*;
java/org/qore/jni/compiler/QoreJavaFileManager.java:import javax.tools.*;
java/org/qore/jni/compiler/QoreJavaFileManager.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/compiler/QoreJavaFileManager.java:/**
java/org/qore/jni/compiler/QoreJavaFileManager.java: * JavaFileManager used for dynamic imports from %Qore into Java
java/org/qore/jni/compiler/QoreJavaFileManager.java: *
java/org/qore/jni/compiler/QoreJavaFileManager.java: * @author adapted for %Qore by <a href="mailto:david@qore.org">David Nichols</a>
java/org/qore/jni/compiler/QoreJavaFileManager.java: * @since 07-Feb-2021
java/org/qore/jni/compiler/QoreJavaFileManager.java: */
java/org/qore/jni/compiler/QoreJavaFileManager.java:public class QoreJavaFileManager implements JavaFileManager {
java/org/qore/jni/compiler/QoreJavaFileManager.java:    private final QoreURLClassLoader classLoader;
java/org/qore/jni/compiler/QoreJavaFileManager.java:    private final StandardJavaFileManager standardFileManager;
java/org/qore/jni/compiler/QoreJavaFileManager.java:    private final PackageInternalsFinder finder;
java/org/qore/jni/compiler/QoreJavaFileManager.java:    /**
java/org/qore/jni/compiler/QoreJavaFileManager.java:     * Creates the object with the %Qore class loader and a file manager for real file operations
java/org/qore/jni/compiler/QoreJavaFileManager.java:     * @param classLoader the classloader to use
java/org/qore/jni/compiler/QoreJavaFileManager.java:     * @param standardFileManager the StandardJavaFileManager to use for real file operations
java/org/qore/jni/compiler/QoreJavaFileManager.java:     */
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public QoreJavaFileManager(QoreURLClassLoader classLoader, StandardJavaFileManager standardFileManager) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        this.classLoader = classLoader;
java/org/qore/jni/compiler/QoreJavaFileManager.java:        this.standardFileManager = standardFileManager;
java/org/qore/jni/compiler/QoreJavaFileManager.java:        finder = new PackageInternalsFinder(classLoader);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public ClassLoader getClassLoader(Location location) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return classLoader;
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public String inferBinaryName(Location location, JavaFileObject file) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        if (file instanceof QoreJavaClassObject) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:            return ((QoreJavaClassObject) file).binaryName();
java/org/qore/jni/compiler/QoreJavaFileManager.java:        } else if (file instanceof CustomJavaFileObject) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:            return ((CustomJavaFileObject) file).binaryName();
java/org/qore/jni/compiler/QoreJavaFileManager.java:        } else { // if it's not QoreJavaClassObject, then it's coming from standard file manager - let it handle the file
java/org/qore/jni/compiler/QoreJavaFileManager.java:            return standardFileManager.inferBinaryName(location, file);
java/org/qore/jni/compiler/QoreJavaFileManager.java:        }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public boolean isSameFile(FileObject a, FileObject b) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.isSameFile(a, b);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public boolean handleOption(String current, Iterator<String> remaining) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.handleOption(current, remaining);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public boolean hasLocation(Location location) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        // we don't care about source and other location types - not needed for compilation
java/org/qore/jni/compiler/QoreJavaFileManager.java:        if (location == StandardLocation.CLASS_PATH || location == StandardLocation.PLATFORM_CLASS_PATH
java/org/qore/jni/compiler/QoreJavaFileManager.java:            || location.getName().startsWith("SYSTEM_MODULES")) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:            return true;
java/org/qore/jni/compiler/QoreJavaFileManager.java:        }
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return false;
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public Location getLocationForModule(Location location, String moduleName) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.getLocationForModule(location, moduleName);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public Location getLocationForModule(Location location, JavaFileObject fo) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.getLocationForModule(location, fo);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public Iterable<Set<Location>> listLocationsForModules(Location location) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.listLocationsForModules(location);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public String inferModuleName(Location location) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.inferModuleName(location);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public void setLocation(StandardLocation location, List<? extends File> files) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        standardFileManager.setLocation(location, files);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public JavaFileObject getJavaFileForInput(Location location, String className, JavaFileObject.Kind kind) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.getJavaFileForInput(location, className, kind);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public JavaFileObject getJavaFileForOutput(Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.getJavaFileForOutput(location, className, kind, sibling);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.getFileForInput(location, packageName, relativeName);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public FileObject getFileForOutput(Location location, String packageName, String relativeName, FileObject sibling)
java/org/qore/jni/compiler/QoreJavaFileManager.java:            throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.getFileForOutput(location, packageName, relativeName, sibling);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public void flush() throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        standardFileManager.flush();
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public void close() throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        standardFileManager.close();
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public Iterable<JavaFileObject> list(Location location, String packageName, Set<JavaFileObject.Kind> kinds,
java/org/qore/jni/compiler/QoreJavaFileManager.java:            boolean recurse) throws IOException {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        boolean baseModule = location.getName().startsWith("SYSTEM_MODULES");
java/org/qore/jni/compiler/QoreJavaFileManager.java:        //System.out.printf("QJFM.list() loc: %s pn: %s kinds: %s recurse: %s (base: %s)\n", location.getName(),
java/org/qore/jni/compiler/QoreJavaFileManager.java:        //    packageName, kinds, recurse, baseModule ? "true" : "false");
java/org/qore/jni/compiler/QoreJavaFileManager.java:        if (baseModule || location == StandardLocation.PLATFORM_CLASS_PATH
java/org/qore/jni/compiler/QoreJavaFileManager.java:            || !kinds.contains(JavaFileObject.Kind.CLASS)) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:            return standardFileManager.list(location, packageName, kinds, recurse);
java/org/qore/jni/compiler/QoreJavaFileManager.java:        } else if (location == StandardLocation.CLASS_PATH && kinds.contains(JavaFileObject.Kind.CLASS)) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:            List<JavaFileObject> list = finder.find(packageName);
java/org/qore/jni/compiler/QoreJavaFileManager.java:            standardFileManager.list(location, packageName, kinds, recurse).forEach((e) -> {
java/org/qore/jni/compiler/QoreJavaFileManager.java:                list.add(e);
java/org/qore/jni/compiler/QoreJavaFileManager.java:            });
java/org/qore/jni/compiler/QoreJavaFileManager.java:            //System.out.printf("QJFM.list() loc: %s pn: %s kinds: %s recurse: %s (base: %s) list: %s\n",
java/org/qore/jni/compiler/QoreJavaFileManager.java:            //    location.getName(), packageName, kinds, recurse, baseModule ? "true" : "false", list);
java/org/qore/jni/compiler/QoreJavaFileManager.java:            return list;
java/org/qore/jni/compiler/QoreJavaFileManager.java:        }
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return Collections.emptyList();
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:    @Override
java/org/qore/jni/compiler/QoreJavaFileManager.java:    public int isSupportedOption(String option) {
java/org/qore/jni/compiler/QoreJavaFileManager.java:        return standardFileManager.isSupportedOption(option);
java/org/qore/jni/compiler/QoreJavaFileManager.java:    }
java/org/qore/jni/compiler/QoreJavaFileManager.java:}
java/org/qore/jni/compiler/QoreJavaCompiler.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.io.ByteArrayInputStream;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.io.ByteArrayOutputStream;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.io.File;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.io.IOException;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.io.InputStream;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.io.OutputStream;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.nio.charset.StandardCharsets;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.net.URI;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.net.URISyntaxException;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.net.URL;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.net.URLClassLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.net.URLDecoder;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.ArrayList;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.Arrays;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.HashMap;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.List;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.Map;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.Map.Entry;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import java.util.Set;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.DiagnosticCollector;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.FileObject;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.ForwardingJavaFileManager;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.JavaCompiler;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.JavaCompiler.CompilationTask;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.JavaFileManager;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.JavaFileObject;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.JavaFileObject.Kind;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.SimpleJavaFileObject;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.StandardJavaFileManager;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.StandardLocation;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import javax.tools.ToolProvider;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:import org.qore.jni.QoreJavaFileObject;
java/org/qore/jni/compiler/QoreJavaCompiler.java:/**
java/org/qore/jni/compiler/QoreJavaCompiler.java: * Compile a String or other {@link CharSequence}, returning a Java
java/org/qore/jni/compiler/QoreJavaCompiler.java: * {@link Class} instance that may be instantiated as well as the raw bytecode. This class is a Facade
java/org/qore/jni/compiler/QoreJavaCompiler.java: * around {@link JavaCompiler} for a narrower use case, but a bit easier to use.
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * To compile a String containing source for a Java class which implements
java/org/qore/jni/compiler/QoreJavaCompiler.java: * MyInterface:
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <pre>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * ClassLoader classLoader = MyClass.class.getClassLoader(); // optional; null is also OK
java/org/qore/jni/compiler/QoreJavaCompiler.java: * List&lt;Diagnostic&gt; diagnostics = new ArrayList&lt;Diagnostic&gt;(); // optional; null is also OK
java/org/qore/jni/compiler/QoreJavaCompiler.java: * QoreJavaCompiler&lt;Object&gt; compiler = new QoreJavaCompiler&lt;MyInterface&gt;(classLoader,
java/org/qore/jni/compiler/QoreJavaCompiler.java: *       null);
java/org/qore/jni/compiler/QoreJavaCompiler.java: * try {
java/org/qore/jni/compiler/QoreJavaCompiler.java: *    Class&lt;MyInterface&gt; newClass = compiler.compile(&quot;com.mypackage.NewClass&quot;,
java/org/qore/jni/compiler/QoreJavaCompiler.java: *          stringContainingSourceForNewClass, diagnostics, MyInterface).cls;
java/org/qore/jni/compiler/QoreJavaCompiler.java: *    MyInterface instance = newClass.newInstance();
java/org/qore/jni/compiler/QoreJavaCompiler.java: *    instance.someOperation(someArgs);
java/org/qore/jni/compiler/QoreJavaCompiler.java: * } catch (QoreJavaCompilerException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java: *    handle(e);
java/org/qore/jni/compiler/QoreJavaCompiler.java: * } catch (IllegalAccessException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java: *    handle(e);
java/org/qore/jni/compiler/QoreJavaCompiler.java: * }
java/org/qore/jni/compiler/QoreJavaCompiler.java: * </pre>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * The source can be in a String, {@link StringBuffer}, or your own class which
java/org/qore/jni/compiler/QoreJavaCompiler.java: * implements {@link CharSequence}. If you implement your own, it must be
java/org/qore/jni/compiler/QoreJavaCompiler.java: * thread safe (preferably, immutable.)
java/org/qore/jni/compiler/QoreJavaCompiler.java: *
java/org/qore/jni/compiler/QoreJavaCompiler.java: * @author <a href="mailto:David.Biesack@sas.com">David J. Biesack</a>, adapted for %Qore by
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <a href="mailto:david@qore.org">David Nichols</a>
java/org/qore/jni/compiler/QoreJavaCompiler.java: */
java/org/qore/jni/compiler/QoreJavaCompiler.java:public class QoreJavaCompiler<T> {
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // Compiler requires source files with a ".java" extension:
java/org/qore/jni/compiler/QoreJavaCompiler.java:    static final String JAVA_EXTENSION = ".java";
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final QoreURLClassLoader classLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // The compiler instance that this facade uses.
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final JavaCompiler compiler;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // The compiler options (such as "-target" "1.5").
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final List<String> options;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // collect compiler diagnostics in this instance.
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private DiagnosticCollector<JavaFileObject> diagnostics;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // The FileManager which will store source and class "files".
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final FileManagerImpl javaFileManager;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new instance which delegates to a new Qore classloader.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws IllegalStateException if the Java compiler cannot be loaded.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public QoreJavaCompiler() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        this((Iterable<String>)null);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new instance which delegates to a new Qore classloader.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param options The compiler options (such as "-target" "1.5"). See the usage
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                for javac
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws IllegalStateException if the Java compiler cannot be loaded.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public QoreJavaCompiler(Iterable<String> options) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        this(QoreURLClassLoader.getCurrent(), options);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new instance which delegates to a new Qore classloader.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param options The compiler options (such as "-target" "1.5"). See the usage
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                for javac
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws IllegalStateException if the Java compiler cannot be loaded.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public QoreJavaCompiler(String[] options) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        this(QoreURLClassLoader.getCurrent(), options == null ? (Iterable<String>)null : Arrays.asList(options));
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new instance which delegates to the named class loader.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param loader  the application ClassLoader. The compiler will look through to
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                this // class loader for dependent classes
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param options The compiler options (such as "-target" "1.5"). See the usage
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                for javac
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws IllegalStateException if the Java compiler cannot be loaded.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public QoreJavaCompiler(QoreURLClassLoader loader, Iterable<String> options) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        compiler = ToolProvider.getSystemJavaCompiler();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        if (compiler == null) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throw new IllegalStateException("Cannot find the system Java compiler. "
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    + "Check that your class path includes tools.jar");
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        classLoader = new QoreURLClassLoader(loader.getPtr(), loader);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        //System.out.printf("compiler classLoader: %s (loader: %s pgm: %x)\n", classLoader, loader, loader.getPtr());
java/org/qore/jni/compiler/QoreJavaCompiler.java:        diagnostics = null;
java/org/qore/jni/compiler/QoreJavaCompiler.java:        final QoreJavaFileManager fileManager = new QoreJavaFileManager(classLoader,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            compiler.getStandardFileManager(diagnostics, null, null));
java/org/qore/jni/compiler/QoreJavaCompiler.java:        // create our FileManager which chains to the default file manager
java/org/qore/jni/compiler/QoreJavaCompiler.java:        // and our ClassLoader
java/org/qore/jni/compiler/QoreJavaCompiler.java:        javaFileManager = new FileManagerImpl(fileManager, classLoader);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        this.options = new ArrayList<String>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        try {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            List<File> pathlist = new ArrayList<File>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:            if (options != null) { // save a copy of input options
java/org/qore/jni/compiler/QoreJavaCompiler.java:                boolean cp_next = false;
java/org/qore/jni/compiler/QoreJavaCompiler.java:                for (String option : options) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    this.options.add(option);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                }
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:            // add locations from the parent class loader
java/org/qore/jni/compiler/QoreJavaCompiler.java:            for (URL url : loader.getURLs()) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                String path = URLDecoder.decode(url.getPath(), StandardCharsets.UTF_8);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                File file = new File(path);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                //System.out.printf("set location url: %s\n", file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                pathlist.add(file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:            if (pathlist.size() > 0) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                fileManager.setLocation(StandardLocation.CLASS_PATH, pathlist);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        } catch (IOException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            e.printStackTrace();
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throw new RuntimeException(e);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Compile Java source in <var>javaSource</name> and return the resulting
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * class.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Thread safety: this method is thread safe if the <var>javaSource</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * is isolated to this thread.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param qualifiedClassName The fully qualified class name.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param javaSource         Complete java source, including a package statement and a class,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           interface, or annotation declaration.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param types              zero or more Class objects representing classes or interfaces
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           that the resulting class must be assignable (castable) to.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return the Class and file data generated by compiling the source
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws QoreJavaCompilerException if the source cannot be compiled - for example, if it contains
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       syntax or semantic errors or if dependent classes cannot be
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       found.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws ClassCastException            if the generated class is not assignable to all the optional
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       <var>types</var>.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public synchronized CompilerOutput<T> compile(final String qualifiedClassName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final String javaSource,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final Class<?>... types) throws QoreJavaCompilerException, ClassCastException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return compile(qualifiedClassName, javaSource, null, types);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Compile Java source in <var>javaSource</name> and return the resulting
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * class.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Thread safety: this method is thread safe if the <var>javaSource</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * is isolated to this thread.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param qualifiedClassName The fully qualified class name.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param javaSource         Complete java source, including a package statement and a class,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           interface, or annotation declaration.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param types              zero or more Class objects representing classes or interfaces
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           that the resulting class must be assignable (castable) to.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return the Class and file data generated by compiling the source
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws QoreJavaCompilerException if the source cannot be compiled - for example, if it contains
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       syntax or semantic errors or if dependent classes cannot be
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       found.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws ClassCastException            if the generated class is not assignable to all the optional
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       <var>types</var>.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public synchronized CompilerOutput<T> compile(final String qualifiedClassName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final CharSequence javaSource,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final Class<?>... types) throws QoreJavaCompilerException, ClassCastException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return compile(qualifiedClassName, javaSource, null, types);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Compile Java source in <var>javaSource</name> and return the resulting
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * class.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Thread safety: this method is thread safe if the <var>javaSource</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * and <var>diagnosticsList</var> are isolated to this thread.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param qualifiedClassName The fully qualified class name.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param javaSource         Complete java source, including a package statement and a class,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           interface, or annotation declaration.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param diagnosticsList    Any diagnostics generated by compiling the source are added to
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           this collector.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param types              zero or more Class objects representing classes or interfaces
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           that the resulting class must be assignable (castable) to.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return the Class and file data generated by compiling the source
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws QoreJavaCompilerException if the source cannot be compiled - for example, if it contains
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       syntax or semantic errors or if dependent classes cannot be
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       found.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws ClassCastException            if the generated class is not assignable to all the optional
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       <var>types</var>.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public synchronized CompilerOutput<T> compile(final String qualifiedClassName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final String javaSource,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final DiagnosticCollector<JavaFileObject> diagnosticsList,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final Class<?>... types) throws QoreJavaCompilerException, ClassCastException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return compile(qualifiedClassName, (CharSequence)javaSource, diagnosticsList, types);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Compile Java source in <var>javaSource</name> and return the resulting
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * class.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Thread safety: this method is thread safe if the <var>javaSource</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * and <var>diagnosticsList</var> are isolated to this thread.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param qualifiedClassName The fully qualified class name.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param javaSource         Complete java source, including a package statement and a class,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           interface, or annotation declaration.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param diagnosticsList    Any diagnostics generated by compiling the source are added to
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           this collector.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param types              zero or more Class objects representing classes or interfaces
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                           that the resulting class must be assignable (castable) to.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return the Class and file data generated by compiling the source
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws QoreJavaCompilerException if the source cannot be compiled - for example, if it contains
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       syntax or semantic errors or if dependent classes cannot be
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       found.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws ClassCastException            if the generated class is not assignable to all the optional
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                                       <var>types</var>.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public synchronized CompilerOutput<T> compile(final String qualifiedClassName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final CharSequence javaSource,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final DiagnosticCollector<JavaFileObject> diagnosticsList,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final Class<?>... types) throws QoreJavaCompilerException, ClassCastException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        diagnostics = diagnosticsList;
java/org/qore/jni/compiler/QoreJavaCompiler.java:        Map<String, CharSequence> classes = new HashMap<String, CharSequence>(1);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        classes.put(qualifiedClassName, javaSource);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        Map<String, CompilerOutput<T>> compiled = compile(classes, diagnosticsList);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        CompilerOutput<T> newClassOutput = compiled.get(qualifiedClassName);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        if (newClassOutput == null) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throw new QoreJavaCompilerException(
java/org/qore/jni/compiler/QoreJavaCompiler.java:                String.format("Compilation succeeded, but requested class '%s' is " +
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    "not present; byte code for the following classes was produced: %s", qualifiedClassName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    compiled.keySet()),
java/org/qore/jni/compiler/QoreJavaCompiler.java:                classes.keySet(), diagnostics
java/org/qore/jni/compiler/QoreJavaCompiler.java:            );
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return castable(newClassOutput, types);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Compile multiple Java source strings and return a Map containing the
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * resulting classes.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * <p/>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Thread safety: this method is thread safe if the <var>classes</var> and
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * <var>diagnosticsList</var> are isolated to this thread.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param classes         A Map whose keys are qualified class names and whose values are
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                        the Java source strings containing the definition of the class.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                        A map value may be null, indicating that compiled class is
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                        expected, although no source exists for it (it may be a
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                        non-public class contained in one of the other strings.)
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param diagnosticsList Any diagnostics generated by compiling the source are added to
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                        this list.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return A mapping of qualified class names to their corresponding Class and file data.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * The map has keys for all output classes produced; not just the classes prsent in the input <var>classes</var>;
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * values are the corresponding Class and file data objects.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws QoreJavaCompilerException if the source cannot be compiled
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public synchronized Map<String, CompilerOutput<T>> compile(
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final Map<String, CharSequence> classes,
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final DiagnosticCollector<JavaFileObject> diagnosticsList)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throws QoreJavaCompilerException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        List<JavaFileObject> sources = new ArrayList<JavaFileObject>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        for (Entry<String, CharSequence> entry : classes.entrySet()) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            String qualifiedClassName = entry.getKey();
java/org/qore/jni/compiler/QoreJavaCompiler.java:            CharSequence javaSource = entry.getValue();
java/org/qore/jni/compiler/QoreJavaCompiler.java:            if (javaSource != null) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                final int dotPos = qualifiedClassName.lastIndexOf('.');
java/org/qore/jni/compiler/QoreJavaCompiler.java:                final String className = dotPos == -1
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    ? qualifiedClassName
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    : qualifiedClassName.substring(dotPos + 1);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                final String packageName = dotPos == -1 ? "" : qualifiedClassName.substring(0, dotPos);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                final JavaFileObjectImpl source = new JavaFileObjectImpl(className, javaSource);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                sources.add(source);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                //System.out.printf("compile pkg: '%s' source: '%s'\n", packageName, className + JAVA_EXTENSION);
java/org/qore/jni/compiler/QoreJavaCompiler.java:                // Store the source file in the FileManager via package/class name.
java/org/qore/jni/compiler/QoreJavaCompiler.java:                // For source files, we add a .java extension
java/org/qore/jni/compiler/QoreJavaCompiler.java:                javaFileManager.putFileForInput(StandardLocation.SOURCE_PATH, packageName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                        className + JAVA_EXTENSION, source);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        try {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            // Get a CompliationTask from the compiler and compile the sources
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final CompilationTask task = compiler.getTask(null, javaFileManager, diagnostics,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    options, null, sources);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            final Boolean result = task.call();
java/org/qore/jni/compiler/QoreJavaCompiler.java:            if (result == null || !result) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                throw new QoreJavaCompilerException("Compilation failed.", classes.keySet(), diagnostics);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:            try {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                // For each class name in the output map, get compiled class and file data and put it in the output map
java/org/qore/jni/compiler/QoreJavaCompiler.java:                ArrayList<JavaFileObject> outputObjects = javaFileManager.getOutputFiles();
java/org/qore/jni/compiler/QoreJavaCompiler.java:                Map<String, CompilerOutput<T>> compiled = new HashMap<String, CompilerOutput<T>>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:                for (JavaFileObject f : outputObjects) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    compiled.put(f.getName(), new CompilerOutput<T>(
java/org/qore/jni/compiler/QoreJavaCompiler.java:                        //((JavaFileObjectImpl)f).getByteCode(),
java/org/qore/jni/compiler/QoreJavaCompiler.java:                        loadClass(f.getName()),
java/org/qore/jni/compiler/QoreJavaCompiler.java:                        f
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    ));
java/org/qore/jni/compiler/QoreJavaCompiler.java:                }
java/org/qore/jni/compiler/QoreJavaCompiler.java:                return compiled;
java/org/qore/jni/compiler/QoreJavaCompiler.java:            } catch (ClassNotFoundException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                throw new QoreJavaCompilerException(classes.keySet(), e, diagnostics);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            } catch (IllegalArgumentException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                throw new QoreJavaCompilerException(classes.keySet(), e, diagnostics);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            } catch (SecurityException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                throw new QoreJavaCompilerException(classes.keySet(), e, diagnostics);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        } finally {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            classLoader.clearCompilationCache();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Load a class that was generated by this instance or accessible from its
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * parent class loader. Use this method if you need access to additional
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * classes compiled by
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * {@link #compile(String, CharSequence, DiagnosticCollector, Class...) compile()},
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * for example if the primary class contained nested classes or additional
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * non-public classes.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param qualifiedClassName the name of the compiled class you wish to load
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return a Class instance named by <var>qualifiedClassName</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws ClassNotFoundException if no such class is found.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @SuppressWarnings("unchecked")
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public Class<T> loadClass(final String qualifiedClassName) throws ClassNotFoundException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return (Class<T>) classLoader.loadClass(qualifiedClassName);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Add a path to the classpath
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public void addClassPath(String path) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        //System.out.printf("compiler.addClassPath() %s\n", path);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        classLoader.addPath(path);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public void injectClass(String binName, byte[] byteCode) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        //System.out.printf("inject class %s: %d bytes\n", binName, byteCode.length);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        classLoader.addPendingClass(binName, byteCode);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Check that the <var>newClass</var> is a subtype of all the type
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * parameters and throw a ClassCastException if not.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param types zero of more classes or interfaces that the <var>newClass</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *              must be castable to.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return <var>newClass</var> if it is castable to all the types
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @throws ClassCastException if <var>newClass</var> is not castable to all the types.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private CompilerOutput<T> castable(CompilerOutput<T> newClassOutput, Class<?>... types)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throws ClassCastException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        for (Class<?> type : types)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            if (!type.isAssignableFrom(newClassOutput.cls)) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                throw new ClassCastException(type.getName());
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return newClassOutput;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Converts a String to a URI.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param name a file name
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return a URI
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    static URI toURI(String name) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        try {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            return new URI(name);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        } catch (URISyntaxException e) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throw new RuntimeException(e);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return This compiler's class loader.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public ClassLoader getClassLoader() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return javaFileManager.getClassLoader();
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:}
java/org/qore/jni/compiler/QoreJavaCompiler.java:/**
java/org/qore/jni/compiler/QoreJavaCompiler.java: * A JavaFileObject which contains either the source text or the compiler
java/org/qore/jni/compiler/QoreJavaCompiler.java: * generated class. This class is used in two cases.
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <ol>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <li>This instance uses it to store the source which is passed to the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * compiler. This uses the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * {@link JavaFileObjectImpl#JavaFileObjectImpl(String, CharSequence)}
java/org/qore/jni/compiler/QoreJavaCompiler.java: * constructor.
java/org/qore/jni/compiler/QoreJavaCompiler.java: * <li>The Java compiler also creates instances (indirectly through the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * FileManagerImplFileManager) when it wants to create a JavaFileObject for the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * .class output. This uses the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * {@link JavaFileObjectImpl#JavaFileObjectImpl(String, JavaFileObject.Kind)}
java/org/qore/jni/compiler/QoreJavaCompiler.java: * constructor.
java/org/qore/jni/compiler/QoreJavaCompiler.java: * </ol>
java/org/qore/jni/compiler/QoreJavaCompiler.java: * This class does not attempt to reuse instances (there does not seem to be a
java/org/qore/jni/compiler/QoreJavaCompiler.java: * need, as it would require adding a Map for the purpose, and this would also
java/org/qore/jni/compiler/QoreJavaCompiler.java: * prevent garbage collection of class byte code.)
java/org/qore/jni/compiler/QoreJavaCompiler.java: */
java/org/qore/jni/compiler/QoreJavaCompiler.java:final class JavaFileObjectImpl extends SimpleJavaFileObject implements QoreJavaFileObject {
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // If kind == CLASS, this stores byte code from openOutputStream
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private ByteArrayOutputStream byteCode;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // if kind == SOURCE, this contains the source text
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final CharSequence source;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new instance which stores source
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param baseName the base name
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param source   the source code
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    JavaFileObjectImpl(final String baseName, final CharSequence source) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        super(QoreJavaCompiler.toURI(baseName + ".java"), Kind.SOURCE);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        this.source = source;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new instance
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param name the file name
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param kind the kind of file
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    JavaFileObjectImpl(final String name, final Kind kind) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        super(QoreJavaCompiler.toURI(name), kind);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        source = null;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Return the source code content
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @see javax.tools.SimpleJavaFileObject#getCharContent(boolean)
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public CharSequence getCharContent(final boolean ignoreEncodingErrors)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throws UnsupportedOperationException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        if (source == null)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            throw new UnsupportedOperationException("getCharContent()");
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return source;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Return an input stream for reading the byte code
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @see javax.tools.SimpleJavaFileObject#openInputStream()
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public InputStream openInputStream() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return new ByteArrayInputStream(getByteCode());
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Return an output stream for writing the bytecode
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @see javax.tools.SimpleJavaFileObject#openOutputStream()
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public OutputStream openOutputStream() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        byteCode = new ByteArrayOutputStream();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return byteCode;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return the byte code generated by the compiler
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public byte[] getByteCode() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return byteCode.toByteArray();
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:}
java/org/qore/jni/compiler/QoreJavaCompiler.java:/**
java/org/qore/jni/compiler/QoreJavaCompiler.java: * A JavaFileManager which manages Java source and classes. This FileManager
java/org/qore/jni/compiler/QoreJavaCompiler.java: * delegates to the JavaFileManager and the QoreURLClassLoader provided in the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * constructor. The sources are all in memory CharSequence instances and the
java/org/qore/jni/compiler/QoreJavaCompiler.java: * classes are all in memory byte arrays.
java/org/qore/jni/compiler/QoreJavaCompiler.java: */
java/org/qore/jni/compiler/QoreJavaCompiler.java:final class FileManagerImpl extends ForwardingJavaFileManager<JavaFileManager> {
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // the delegating class loader (passed to the constructor)
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final QoreURLClassLoader classLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // Internal map of filename URIs to JavaFileObjects.
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final Map<URI, JavaFileObject> fileObjects = new HashMap<URI, JavaFileObject>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:    // List of output files generated; classes generated from input source
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private final ArrayList<JavaFileObject> outputObjects = new ArrayList<JavaFileObject>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Construct a new FileManager which forwards to the <var>fileManager</var>
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * for source and to the <var>classLoader</var> for classes
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param fileManager another FileManager that this instance delegates to for
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                    additional source.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param classLoader a ClassLoader which contains dependent classes that the compiled
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *                    classes will require when compiling them.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public FileManagerImpl(JavaFileManager fileManager, QoreURLClassLoader classLoader) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        super(fileManager);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        this.classLoader = classLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Clears the output file list
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public void clearOutputFiles() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        outputObjects.clear();
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return a list of output files
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public ArrayList<JavaFileObject> getOutputFiles() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return outputObjects;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return the class loader which this file manager delegates to
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public ClassLoader getClassLoader() {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return classLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * For a given file <var>location</var>, return a FileObject from which the
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * compiler can obtain source or byte code.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param location     an abstract file location
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param packageName  the package name for the file
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param relativeName the file's relative name
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @return a FileObject from this or the delegated FileManager
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @see javax.tools.ForwardingJavaFileManager#getFileForInput(javax.tools.JavaFileManager.Location,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * java.lang.String, java.lang.String)
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public FileObject getFileForInput(Location location, String packageName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                                      String relativeName) throws IOException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        FileObject o = fileObjects.get(uri(location, packageName, relativeName));
java/org/qore/jni/compiler/QoreJavaCompiler.java:        if (o != null)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            return o;
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return super.getFileForInput(location, packageName, relativeName);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Store a file that may be retrieved later with
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * {@link #getFileForInput(javax.tools.JavaFileManager.Location, String, String)}
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param location     the file location
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param packageName  the Java class' package name
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param relativeName the relative name
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @param file         the file object to store for later retrieval
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public void putFileForInput(StandardLocation location, String packageName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                                String relativeName, JavaFileObject file) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        fileObjects.put(uri(location, packageName, relativeName), file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Convert a location and class name to a URI
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    private URI uri(Location location, String packageName, String relativeName) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return QoreJavaCompiler.toURI(location.getName() + '/' + packageName + '/'
java/org/qore/jni/compiler/QoreJavaCompiler.java:                + relativeName);
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    /**
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * Create a JavaFileImpl for an output class file and store it in the
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * classloader.
java/org/qore/jni/compiler/QoreJavaCompiler.java:     *
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * @see javax.tools.ForwardingJavaFileManager#getJavaFileForOutput(javax.tools.JavaFileManager.Location,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * java.lang.String, javax.tools.JavaFileObject.Kind,
java/org/qore/jni/compiler/QoreJavaCompiler.java:     * javax.tools.FileObject)
java/org/qore/jni/compiler/QoreJavaCompiler.java:     */
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public JavaFileObject getJavaFileForOutput(Location location, String qualifiedName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                                               Kind kind, FileObject outputFile) throws IOException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        JavaFileObjectImpl file = new JavaFileObjectImpl(qualifiedName, kind);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        classLoader.add(qualifiedName, file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        // add to output list
java/org/qore/jni/compiler/QoreJavaCompiler.java:        outputObjects.add(file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return file;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public ClassLoader getClassLoader(JavaFileManager.Location location) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return classLoader;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public String inferBinaryName(Location loc, JavaFileObject file) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        String result;
java/org/qore/jni/compiler/QoreJavaCompiler.java:        // For our JavaFileImpl instances, return the file's name, else
java/org/qore/jni/compiler/QoreJavaCompiler.java:        // simply run the default implementation
java/org/qore/jni/compiler/QoreJavaCompiler.java:        if (file instanceof JavaFileObjectImpl)
java/org/qore/jni/compiler/QoreJavaCompiler.java:            result = file.getName();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        else
java/org/qore/jni/compiler/QoreJavaCompiler.java:            result = super.inferBinaryName(loc, file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return result;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:    @Override
java/org/qore/jni/compiler/QoreJavaCompiler.java:    public Iterable<JavaFileObject> list(Location location, String packageName,
java/org/qore/jni/compiler/QoreJavaCompiler.java:                                         Set<Kind> kinds, boolean recurse) throws IOException {
java/org/qore/jni/compiler/QoreJavaCompiler.java:        Iterable<JavaFileObject> result = super.list(location, packageName, kinds, recurse);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        ArrayList<JavaFileObject> files = new ArrayList<JavaFileObject>();
java/org/qore/jni/compiler/QoreJavaCompiler.java:        if (location == StandardLocation.CLASS_PATH
java/org/qore/jni/compiler/QoreJavaCompiler.java:                && kinds.contains(JavaFileObject.Kind.CLASS)) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            for (JavaFileObject file : fileObjects.values()) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                if (file.getKind() == Kind.CLASS && file.getName().startsWith(packageName))
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    files.add(file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:            classLoader.files().forEach((f) -> {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                files.add((JavaFileObject)f);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            });
java/org/qore/jni/compiler/QoreJavaCompiler.java:        } else if (location == StandardLocation.SOURCE_PATH
java/org/qore/jni/compiler/QoreJavaCompiler.java:                && kinds.contains(JavaFileObject.Kind.SOURCE)) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            for (JavaFileObject file : fileObjects.values()) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:                if (file.getKind() == Kind.SOURCE && file.getName().startsWith(packageName))
java/org/qore/jni/compiler/QoreJavaCompiler.java:                    files.add(file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:            }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        for (JavaFileObject file : result) {
java/org/qore/jni/compiler/QoreJavaCompiler.java:            files.add(file);
java/org/qore/jni/compiler/QoreJavaCompiler.java:        }
java/org/qore/jni/compiler/QoreJavaCompiler.java:        return files;
java/org/qore/jni/compiler/QoreJavaCompiler.java:    }
java/org/qore/jni/compiler/QoreJavaCompiler.java:}
java/org/qore/jni/compiler/CustomJavaFileObject.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/CustomJavaFileObject.java:import java.net.URI;
java/org/qore/jni/compiler/CustomJavaFileObject.java:import java.io.*;
java/org/qore/jni/compiler/CustomJavaFileObject.java:import javax.tools.JavaFileObject;
java/org/qore/jni/compiler/CustomJavaFileObject.java:import javax.lang.model.element.NestingKind;
java/org/qore/jni/compiler/CustomJavaFileObject.java:import javax.lang.model.element.Modifier;
java/org/qore/jni/compiler/CustomJavaFileObject.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/compiler/CustomJavaFileObject.java:/**
java/org/qore/jni/compiler/CustomJavaFileObject.java: * based on source code by:
java/org/qore/jni/compiler/CustomJavaFileObject.java: * @author atamur
java/org/qore/jni/compiler/CustomJavaFileObject.java: * @since 15-Oct-2009
java/org/qore/jni/compiler/CustomJavaFileObject.java: * @author adapted for %Qore by <a href="mailto:david@qore.org">David Nichols</a>
java/org/qore/jni/compiler/CustomJavaFileObject.java: * @since 07-Feb-2021
java/org/qore/jni/compiler/CustomJavaFileObject.java: */
java/org/qore/jni/compiler/CustomJavaFileObject.java:class CustomJavaFileObject implements JavaFileObject {
java/org/qore/jni/compiler/CustomJavaFileObject.java:    private final String binaryName;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    private final URI uri;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    private final String name;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public CustomJavaFileObject(String binaryName, URI uri) {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        this.uri = uri;
java/org/qore/jni/compiler/CustomJavaFileObject.java:        this.binaryName = binaryName;
java/org/qore/jni/compiler/CustomJavaFileObject.java:        // for FS based URI the path is not null, for JAR URI the scheme specific part is not null
java/org/qore/jni/compiler/CustomJavaFileObject.java:        name = uri.getPath() == null ? uri.getSchemeSpecificPart() : uri.getPath();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public URI toUri() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return uri;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public InputStream openInputStream() throws IOException {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        // easy way to handle any URI!
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return uri.toURL().openStream();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public OutputStream openOutputStream() throws IOException {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public String getName() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return name;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public Reader openReader(boolean ignoreEncodingErrors) throws IOException {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public Writer openWriter() throws IOException {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public long getLastModified() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return 0;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public boolean delete() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public Kind getKind() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return Kind.CLASS;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override // copied from SimpleJavaFileManager
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public boolean isNameCompatible(String simpleName, Kind kind) {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        String baseName = simpleName + kind.extension;
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return kind.equals(getKind())
java/org/qore/jni/compiler/CustomJavaFileObject.java:            && (baseName.equals(getName())
java/org/qore/jni/compiler/CustomJavaFileObject.java:            || getName().endsWith("/" + baseName));
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public NestingKind getNestingKind() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public Modifier getAccessLevel() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public String binaryName() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return binaryName;
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:    @Override
java/org/qore/jni/compiler/CustomJavaFileObject.java:    public String toString() {
java/org/qore/jni/compiler/CustomJavaFileObject.java:        return "QoreJavaClassObject{" +
java/org/qore/jni/compiler/CustomJavaFileObject.java:            "uri=" + uri +
java/org/qore/jni/compiler/CustomJavaFileObject.java:        '}';
java/org/qore/jni/compiler/CustomJavaFileObject.java:    }
java/org/qore/jni/compiler/CustomJavaFileObject.java:}
java/org/qore/jni/compiler/QoreJavaCompilerException.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:import java.util.Collection;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:import java.util.Collections;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:import java.util.HashSet;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:import java.util.Set;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:import javax.tools.DiagnosticCollector;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:import javax.tools.JavaFileObject;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:/**
java/org/qore/jni/compiler/QoreJavaCompilerException.java: * An exception thrown when trying to compile Java programs from strings
java/org/qore/jni/compiler/QoreJavaCompilerException.java: * containing source.
java/org/qore/jni/compiler/QoreJavaCompilerException.java: *
java/org/qore/jni/compiler/QoreJavaCompilerException.java: * @author <a href="mailto:David.Biesack@sas.com">David J. Biesack</a>
java/org/qore/jni/compiler/QoreJavaCompilerException.java: */
java/org/qore/jni/compiler/QoreJavaCompilerException.java:public class QoreJavaCompilerException extends Exception {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    private static final long serialVersionUID = 1L;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    /**
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     * The fully qualified name of the class that was being compiled.
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     */
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    private Set<String> classNames;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    // Unfortunately, Diagnostic and Collector are not Serializable, so we can't
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    // serialize the collector.
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    transient private DiagnosticCollector<JavaFileObject> diagnostics;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    public QoreJavaCompilerException(String message,
java/org/qore/jni/compiler/QoreJavaCompilerException.java:                                         Set<String> qualifiedClassNames, Throwable cause,
java/org/qore/jni/compiler/QoreJavaCompilerException.java:                                         DiagnosticCollector<JavaFileObject> diagnostics) {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        super(message, cause);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        setClassNames(qualifiedClassNames);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        setDiagnostics(diagnostics);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    public QoreJavaCompilerException(String message,
java/org/qore/jni/compiler/QoreJavaCompilerException.java:                                         Set<String> qualifiedClassNames,
java/org/qore/jni/compiler/QoreJavaCompilerException.java:                                         DiagnosticCollector<JavaFileObject> diagnostics) {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        super(message);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        setClassNames(qualifiedClassNames);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        setDiagnostics(diagnostics);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    public QoreJavaCompilerException(Set<String> qualifiedClassNames,
java/org/qore/jni/compiler/QoreJavaCompilerException.java:                                         Throwable cause, DiagnosticCollector<JavaFileObject> diagnostics) {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        super(cause);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        setClassNames(qualifiedClassNames);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        setDiagnostics(diagnostics);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    private void setClassNames(Set<String> qualifiedClassNames) {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        // create a new HashSet because the set passed in may not
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        // be Serializable. For example, Map.keySet() returns a non-Serializable
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        // set.
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        classNames = new HashSet<String>(qualifiedClassNames);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    private void setDiagnostics(DiagnosticCollector<JavaFileObject> diagnostics) {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        this.diagnostics = diagnostics;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    /**
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     * Gets the diagnostics collected by this exception.
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     *
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     * @return this exception's diagnostics
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     */
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    public DiagnosticCollector<JavaFileObject> getDiagnostics() {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        return diagnostics;
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    /**
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     * @return The name of the classes whose compilation caused the compile
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     * exception
java/org/qore/jni/compiler/QoreJavaCompilerException.java:     */
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    public Collection<String> getClassNames() {
java/org/qore/jni/compiler/QoreJavaCompilerException.java:        return Collections.unmodifiableSet(classNames);
java/org/qore/jni/compiler/QoreJavaCompilerException.java:    }
java/org/qore/jni/compiler/QoreJavaCompilerException.java:}
java/org/qore/jni/compiler/QoreJavaClassObject.java:package org.qore.jni.compiler;
java/org/qore/jni/compiler/QoreJavaClassObject.java:import java.net.URI;
java/org/qore/jni/compiler/QoreJavaClassObject.java:import java.io.*;
java/org/qore/jni/compiler/QoreJavaClassObject.java:import javax.tools.JavaFileObject;
java/org/qore/jni/compiler/QoreJavaClassObject.java:import javax.lang.model.element.NestingKind;
java/org/qore/jni/compiler/QoreJavaClassObject.java:import javax.lang.model.element.Modifier;
java/org/qore/jni/compiler/QoreJavaClassObject.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/compiler/QoreJavaClassObject.java:/**
java/org/qore/jni/compiler/QoreJavaClassObject.java: * based on source code by:
java/org/qore/jni/compiler/QoreJavaClassObject.java: * @author atamur
java/org/qore/jni/compiler/QoreJavaClassObject.java: * @since 15-Oct-2009
java/org/qore/jni/compiler/QoreJavaClassObject.java: *
java/org/qore/jni/compiler/QoreJavaClassObject.java: * @author adapted for %Qore by <a href="mailto:david@qore.org">David Nichols</a>
java/org/qore/jni/compiler/QoreJavaClassObject.java: * @since 07-Feb-2021
java/org/qore/jni/compiler/QoreJavaClassObject.java: */
java/org/qore/jni/compiler/QoreJavaClassObject.java:class QoreJavaClassObject implements JavaFileObject {
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public static final int OT_NORMAL = 0;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public static final int OT_PENDING = 1;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public static final int OT_INTERNAL = 2;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    private final String binaryName;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    private final QoreURLClassLoader classLoader;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    private final int type;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public QoreJavaClassObject(String binaryName, QoreURLClassLoader classLoader, int type) {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        this.binaryName = binaryName;
java/org/qore/jni/compiler/QoreJavaClassObject.java:        this.classLoader = classLoader;
java/org/qore/jni/compiler/QoreJavaClassObject.java:        this.type = type;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public URI toUri() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public InputStream openInputStream() throws IOException {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        //System.out.printf("openInputStream: %s cl: %s (type: %d)\n", binaryName, classLoader, type);
java/org/qore/jni/compiler/QoreJavaClassObject.java:        try {
java/org/qore/jni/compiler/QoreJavaClassObject.java:            byte[] byte_code;
java/org/qore/jni/compiler/QoreJavaClassObject.java:            if (type == OT_PENDING) {
java/org/qore/jni/compiler/QoreJavaClassObject.java:                byte_code = classLoader.removePendingByteCode(binaryName);
java/org/qore/jni/compiler/QoreJavaClassObject.java:            } else if (type == OT_INTERNAL) {
java/org/qore/jni/compiler/QoreJavaClassObject.java:                byte_code = classLoader.getInternalClass(binaryName);
java/org/qore/jni/compiler/QoreJavaClassObject.java:            } else {
java/org/qore/jni/compiler/QoreJavaClassObject.java:                byte_code = classLoader.generateByteCode(binaryName);
java/org/qore/jni/compiler/QoreJavaClassObject.java:            }
java/org/qore/jni/compiler/QoreJavaClassObject.java:            //System.out.printf("openInputStream: '%s': got %d bytes\n", binaryName,
java/org/qore/jni/compiler/QoreJavaClassObject.java:            //  byte_code == null ? -1 : byte_code.length);
java/org/qore/jni/compiler/QoreJavaClassObject.java:            return new ByteArrayInputStream(byte_code);
java/org/qore/jni/compiler/QoreJavaClassObject.java:        } catch (ClassNotFoundException e) {
java/org/qore/jni/compiler/QoreJavaClassObject.java:            throw new RuntimeException(e);
java/org/qore/jni/compiler/QoreJavaClassObject.java:        }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public OutputStream openOutputStream() throws IOException {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public String getName() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        return binaryName;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public Reader openReader(boolean ignoreEncodingErrors) throws IOException {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public Writer openWriter() throws IOException {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public long getLastModified() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        return 0;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public boolean delete() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public Kind getKind() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        return Kind.CLASS;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override // copied from SimpleJavaFileManager
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public boolean isNameCompatible(String simpleName, Kind kind) {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        String baseName = simpleName + kind.extension;
java/org/qore/jni/compiler/QoreJavaClassObject.java:        return kind.equals(getKind())
java/org/qore/jni/compiler/QoreJavaClassObject.java:            && (baseName.equals(getName())
java/org/qore/jni/compiler/QoreJavaClassObject.java:            || getName().endsWith("/" + baseName));
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public NestingKind getNestingKind() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public Modifier getAccessLevel() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        throw new UnsupportedOperationException();
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public String binaryName() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        return binaryName;
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:    @Override
java/org/qore/jni/compiler/QoreJavaClassObject.java:    public String toString() {
java/org/qore/jni/compiler/QoreJavaClassObject.java:        return String.format("QoreJavaClassObject{binaryName=%s,type=%s}", binaryName,
java/org/qore/jni/compiler/QoreJavaClassObject.java:            type == OT_NORMAL ? "NORMAL" : (type == OT_PENDING ? "PENDING" : "INTERNAL"));
java/org/qore/jni/compiler/QoreJavaClassObject.java:    }
java/org/qore/jni/compiler/QoreJavaClassObject.java:}
java/org/qore/jni/QoreJavaClassBase.java:package org.qore.jni;
java/org/qore/jni/QoreJavaClassBase.java://! marker base class for a %Qore classes imported dynamically into Java
java/org/qore/jni/QoreJavaClassBase.java:/**
java/org/qore/jni/QoreJavaClassBase.java:    @since 2.0
java/org/qore/jni/QoreJavaClassBase.java: */
java/org/qore/jni/QoreJavaClassBase.java:public abstract class QoreJavaClassBase extends QoreObject {
java/org/qore/jni/QoreJavaClassBase.java:    //! Default constructor
java/org/qore/jni/QoreJavaClassBase.java:    public QoreJavaClassBase(long cptr, long mptr, long vptr, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaClassBase.java:        super(cptr, mptr, vptr, args);
java/org/qore/jni/QoreJavaClassBase.java:    }
java/org/qore/jni/QoreJavaClassBase.java:    //! creates the wrapper object with a pointer to an object; this Java object holds a weak reference to the Qore object passed here
java/org/qore/jni/QoreJavaClassBase.java:    public QoreJavaClassBase(QoreJavaObjectPtr obj) {
java/org/qore/jni/QoreJavaClassBase.java:        super(obj.ptr);
java/org/qore/jni/QoreJavaClassBase.java:    }
java/org/qore/jni/QoreJavaClassBase.java:}
java/org/qore/jni/QoreURLClassLoader.java:/**
java/org/qore/jni/QoreURLClassLoader.java:    QoreURLClassLoader.java
java/org/qore/jni/QoreURLClassLoader.java:    Qore Programming Language JNI Module
java/org/qore/jni/QoreURLClassLoader.java:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
java/org/qore/jni/QoreURLClassLoader.java:    This library is free software; you can redistribute it and/or
java/org/qore/jni/QoreURLClassLoader.java:    modify it under the terms of the GNU Lesser General Public
java/org/qore/jni/QoreURLClassLoader.java:    License as published by the Free Software Foundation; either
java/org/qore/jni/QoreURLClassLoader.java:    version 2.1 of the License, or (at your option) any later version.
java/org/qore/jni/QoreURLClassLoader.java:    This library is distributed in the hope that it will be useful,
java/org/qore/jni/QoreURLClassLoader.java:    but WITHOUT ANY WARRANTY; without even the implied warranty of
java/org/qore/jni/QoreURLClassLoader.java:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
java/org/qore/jni/QoreURLClassLoader.java:    Lesser General Public License for more details.
java/org/qore/jni/QoreURLClassLoader.java:    You should have received a copy of the GNU Lesser General Public
java/org/qore/jni/QoreURLClassLoader.java:    License along with this library; if not, write to the Free Software
java/org/qore/jni/QoreURLClassLoader.java:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
java/org/qore/jni/QoreURLClassLoader.java:*/
java/org/qore/jni/QoreURLClassLoader.java:package org.qore.jni;
java/org/qore/jni/QoreURLClassLoader.java:import java.net.URLClassLoader;
java/org/qore/jni/QoreURLClassLoader.java:import java.net.MalformedURLException;
java/org/qore/jni/QoreURLClassLoader.java:import java.net.URL;
java/org/qore/jni/QoreURLClassLoader.java:import java.io.File;
java/org/qore/jni/QoreURLClassLoader.java:import java.io.IOException;
java/org/qore/jni/QoreURLClassLoader.java:import java.io.FilenameFilter;
java/org/qore/jni/QoreURLClassLoader.java:import java.io.InputStream;
java/org/qore/jni/QoreURLClassLoader.java:import java.io.ByteArrayInputStream;
java/org/qore/jni/QoreURLClassLoader.java:import java.nio.file.Files;
java/org/qore/jni/QoreURLClassLoader.java:import java.nio.file.FileSystems;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.Hashtable;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.StringTokenizer;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.HashSet;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.Arrays;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.HashMap;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.Enumeration;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.ArrayList;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.Collection;
java/org/qore/jni/QoreURLClassLoader.java:import java.util.Collections;
java/org/qore/jni/QoreURLClassLoader.java://! Main ClassLoader for Java <-> %Qore and Java <-> Python integration
java/org/qore/jni/QoreURLClassLoader.java:/** This ClassLoader supports dynamic imports from %Qore and Java using the following special packages:
java/org/qore/jni/QoreURLClassLoader.java:    - <b><tt>python.</tt></b><i>[path...]</i>: indicates that the given path should be imported from Python to Java (after being
java/org/qore/jni/QoreURLClassLoader.java:      imported to %Qore if necessary).
java/org/qore/jni/QoreURLClassLoader.java:    - <b><tt>pythonmod.</tt></b><i>mod</i><tt>.</tt><i>[path...]</i>: indicates that the given path should be mapped to %Qore
java/org/qore/jni/QoreURLClassLoader.java:      namespaces and/or classes after loading the Python module <i>mod</i> and importing into %Qore; the Java package
java/org/qore/jni/QoreURLClassLoader.java:      segments after <tt><b>pythonmod.</b></tt><i>mod</i><tt>.</tt> are then converted to the equivalent %Qore namespace path
java/org/qore/jni/QoreURLClassLoader.java:    - \c \b qore: indicates that the given path should be mapped to %Qore namespaces and/or classes; the Java package
java/org/qore/jni/QoreURLClassLoader.java:      segments after <tt><b>qore.</b></tt> are then converted to the equivalent %Qore namespace path
java/org/qore/jni/QoreURLClassLoader.java:    - <b><tt>qoremod.</tt></b><i>mod</i><tt>.</tt><i>[path...]</i>: indicates that the given path should be mapped to %Qore
java/org/qore/jni/QoreURLClassLoader.java:      namespaces and/or classes after loading the %Qore module <i>mod</i>; the Java package
java/org/qore/jni/QoreURLClassLoader.java:      segments after <tt><b>qoremod.</b></tt><i>mod</i><tt>.</tt> are then converted to the equivalent %Qore namespace path
java/org/qore/jni/QoreURLClassLoader.java: */
java/org/qore/jni/QoreURLClassLoader.java:public class QoreURLClassLoader extends URLClassLoader {
java/org/qore/jni/QoreURLClassLoader.java:    public static String INIT_PROP_NAME = "qore.QoreURLClassLoader.init";
java/org/qore/jni/QoreURLClassLoader.java:    private static InheritableThreadLocal<QoreURLClassLoader> current =
java/org/qore/jni/QoreURLClassLoader.java:        new InheritableThreadLocal<QoreURLClassLoader>();
java/org/qore/jni/QoreURLClassLoader.java:    private HashSet<String> classPathElements = new HashSet<String>();
java/org/qore/jni/QoreURLClassLoader.java:    private String classPath = new String();
java/org/qore/jni/QoreURLClassLoader.java:    private long pgm_ptr = 0;
java/org/qore/jni/QoreURLClassLoader.java:    private boolean enable_cache = false;
java/org/qore/jni/QoreURLClassLoader.java:    // when used as the system class loader
java/org/qore/jni/QoreURLClassLoader.java:    /** if true, we need to ensure that this object loads classes to make dynamic imports work
java/org/qore/jni/QoreURLClassLoader.java:    */
java/org/qore/jni/QoreURLClassLoader.java:    private boolean startup = false;
java/org/qore/jni/QoreURLClassLoader.java:    //! for caching files during compilation
java/org/qore/jni/QoreURLClassLoader.java:    private final HashMap<String, QoreJavaFileObject> classes = new HashMap<String, QoreJavaFileObject>();
java/org/qore/jni/QoreURLClassLoader.java:    //! used to mark java class creation in progress; binary names used
java/org/qore/jni/QoreURLClassLoader.java:    private HashSet<String> classInProgress = new HashSet<String>();
java/org/qore/jni/QoreURLClassLoader.java:    //! cache of inner classes to resolve circular dependencies when injecting classes
java/org/qore/jni/QoreURLClassLoader.java:    private HashMap<String, byte[]> pendingClasses = new HashMap<String, byte[]>();
java/org/qore/jni/QoreURLClassLoader.java:    //! cache of classes when running as the boot classloader
java/org/qore/jni/QoreURLClassLoader.java:    private HashMap<String, Class<?>> classCache = new HashMap<String, Class<?>>();
java/org/qore/jni/QoreURLClassLoader.java:    // when used to bootstrap Java
java/org/qore/jni/QoreURLClassLoader.java:    static private boolean static_bootstrap = false;
java/org/qore/jni/QoreURLClassLoader.java:    //! static initialization
java/org/qore/jni/QoreURLClassLoader.java:    static {
java/org/qore/jni/QoreURLClassLoader.java:        // check if we are using this class as the system class loader
java/org/qore/jni/QoreURLClassLoader.java:        if ("org.qore.jni.QoreURLClassLoader".equals(System.getProperty("java.system.class.loader"))) {
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("setting static_bootstrap = true\n");
java/org/qore/jni/QoreURLClassLoader.java:            static_bootstrap = true;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        System.setProperty(INIT_PROP_NAME, "true");
java/org/qore/jni/QoreURLClassLoader.java:        // loads and initializes the Qore library and the jni module (if necessary)
java/org/qore/jni/QoreURLClassLoader.java:        try {
java/org/qore/jni/QoreURLClassLoader.java:            dummy0();
java/org/qore/jni/QoreURLClassLoader.java:        } catch (UnsatisfiedLinkError e0) {
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                //debugLog("about to call initQore(): " + e0.toString());
java/org/qore/jni/QoreURLClassLoader.java:                if (static_bootstrap) {
java/org/qore/jni/QoreURLClassLoader.java:                    QoreJavaApi.initQoreBootstrap();
java/org/qore/jni/QoreURLClassLoader.java:                } else {
java/org/qore/jni/QoreURLClassLoader.java:                    QoreJavaApi.initQore();
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:            } catch (ExceptionInInitializerError e1) {
java/org/qore/jni/QoreURLClassLoader.java:                throw e1;
java/org/qore/jni/QoreURLClassLoader.java:            } catch (Throwable e1) {
java/org/qore/jni/QoreURLClassLoader.java:                throw new ExceptionInInitializerError(e1);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        } catch (Throwable e0) {
java/org/qore/jni/QoreURLClassLoader.java:            throw new ExceptionInInitializerError(e0);
java/org/qore/jni/QoreURLClassLoader.java:        } finally {
java/org/qore/jni/QoreURLClassLoader.java:            System.clearProperty(INIT_PROP_NAME);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! constructor for using this class as the boot classloader
java/org/qore/jni/QoreURLClassLoader.java:    public QoreURLClassLoader(ClassLoader parent) {
java/org/qore/jni/QoreURLClassLoader.java:        super("QoreURLClassLoader", new URL[]{}, parent);
java/org/qore/jni/QoreURLClassLoader.java:        enable_cache = true;
java/org/qore/jni/QoreURLClassLoader.java:        setContextProgram(this);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader(ClassLoader parent: %s) this: %x (pgm: %x)\n",
java/org/qore/jni/QoreURLClassLoader.java:        //    (parent == null ? "null" : parent.getClass().getCanonicalName()), hashCode(), pgm_ptr);
java/org/qore/jni/QoreURLClassLoader.java:        startup = true;
java/org/qore/jni/QoreURLClassLoader.java:        // set classpath from system classpath
java/org/qore/jni/QoreURLClassLoader.java:        String cp = System.getProperty("java.class.path");
java/org/qore/jni/QoreURLClassLoader.java:        if (cp != null && !cp.isEmpty()) {
java/org/qore/jni/QoreURLClassLoader.java:            addPath(cp);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! constructor for using this class as the boot classloader for the module
java/org/qore/jni/QoreURLClassLoader.java:    public QoreURLClassLoader() {
java/org/qore/jni/QoreURLClassLoader.java:        super("QoreURLClassLoader", new URL[]{}, ClassLoader.getSystemClassLoader());
java/org/qore/jni/QoreURLClassLoader.java:        setContext();
java/org/qore/jni/QoreURLClassLoader.java:        enable_cache = true;
java/org/qore/jni/QoreURLClassLoader.java:        setContextProgram(this);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader() this: %x (pgm: %x)\n", hashCode(), pgm_ptr);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! constructor for using this class as the boot classloader for the module
java/org/qore/jni/QoreURLClassLoader.java:    public QoreURLClassLoader(long p_ptr) {
java/org/qore/jni/QoreURLClassLoader.java:        //super("QoreURLClassLoader", new URL[]{}, ClassLoader.getSystemClassLoader());
java/org/qore/jni/QoreURLClassLoader.java:        super("QoreURLClassLoader", new URL[]{}, ClassLoader.getPlatformClassLoader());
java/org/qore/jni/QoreURLClassLoader.java:        setContext();
java/org/qore/jni/QoreURLClassLoader.java:        pgm_ptr = p_ptr;
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader(long p_ptr: %x) this: %x\n", p_ptr, hashCode());
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! constructor with a QoreProgram pointer and a parent
java/org/qore/jni/QoreURLClassLoader.java:    public QoreURLClassLoader(long p_ptr, ClassLoader parent) {
java/org/qore/jni/QoreURLClassLoader.java:        super("QoreURLClassLoader", new URL[]{}, parent);
java/org/qore/jni/QoreURLClassLoader.java:        // set the current classloader as the thread context classloader
java/org/qore/jni/QoreURLClassLoader.java:        pgm_ptr = p_ptr;
java/org/qore/jni/QoreURLClassLoader.java:        setContext();
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader(long p_ptr: %x, ClassLoader parent: %s: %x) this: %x\n",
java/org/qore/jni/QoreURLClassLoader.java:        //    p_ptr, (parent == null ? "null" : parent.getClass().getCanonicalName()),
java/org/qore/jni/QoreURLClassLoader.java:        //    parent == null ? 0 : parent.hashCode(), hashCode());
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! constructor with a name and a parent
java/org/qore/jni/QoreURLClassLoader.java:    public QoreURLClassLoader(String name, ClassLoader parent) {
java/org/qore/jni/QoreURLClassLoader.java:        super(name, new URL[]{}, parent);
java/org/qore/jni/QoreURLClassLoader.java:        setContext();
java/org/qore/jni/QoreURLClassLoader.java:        enable_cache = true;
java/org/qore/jni/QoreURLClassLoader.java:        setContextProgram(this);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader(name: '%s', ClassLoader parent: %s) this: %x (pgm: %x)\n",
java/org/qore/jni/QoreURLClassLoader.java:        //    name, (parent == null ? "null" : parent.getClass().getCanonicalName()) + ")", hashCode(), pgm_ptr);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    /**
java/org/qore/jni/QoreURLClassLoader.java:     * Add a class name/JavaFileObject mapping
java/org/qore/jni/QoreURLClassLoader.java:     *
java/org/qore/jni/QoreURLClassLoader.java:     * @param qualifiedClassName the name
java/org/qore/jni/QoreURLClassLoader.java:     * @param javaFile           the file associated with the name
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public void add(final String qualifiedClassName, final QoreJavaFileObject javaFile) {
java/org/qore/jni/QoreURLClassLoader.java:        classes.put(qualifiedClassName, javaFile);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    /**
java/org/qore/jni/QoreURLClassLoader.java:     * @return An collection of QoreJavaFileObject instances for the classes in the
java/org/qore/jni/QoreURLClassLoader.java:     * class loader.
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public Collection<QoreJavaFileObject> files() {
java/org/qore/jni/QoreURLClassLoader.java:        return Collections.unmodifiableCollection(classes.values());
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    @Override
java/org/qore/jni/QoreURLClassLoader.java:    public InputStream getResourceAsStream(final String name) {
java/org/qore/jni/QoreURLClassLoader.java:        if (name.endsWith(".class")) {
java/org/qore/jni/QoreURLClassLoader.java:            String qualifiedClassName = name.substring(0,
java/org/qore/jni/QoreURLClassLoader.java:                    name.length() - ".class".length()).replace('/', '.');
java/org/qore/jni/QoreURLClassLoader.java:            QoreJavaFileObject file = classes.get(qualifiedClassName);
java/org/qore/jni/QoreURLClassLoader.java:            if (file != null) {
java/org/qore/jni/QoreURLClassLoader.java:                return new ByteArrayInputStream(file.getByteCode());
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        return super.getResourceAsStream(name);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public void addPathOrig(String path) throws Exception {
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog("QoreURLClassLoader.addPath(): file://" + path);
java/org/qore/jni/QoreURLClassLoader.java:        super.addURL(new URL("file", null, 0, path));
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! adds byte code for an inner class to the byte code cache; requires a binary name (ex: \c my.package.MyClass$1)
java/org/qore/jni/QoreURLClassLoader.java:    public void addPendingClass(String bin_name, byte[] byte_code) {
java/org/qore/jni/QoreURLClassLoader.java:        if (byte_code == null) {
java/org/qore/jni/QoreURLClassLoader.java:            throw new RuntimeException("QoreURLClassLoader.addPendingClass() called with null byte_code");
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        pendingClasses.put(bin_name, byte_code);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("addPendingClass() this: %x '%s' len: %d hm size: %d\n", hashCode(), bin_name,
java/org/qore/jni/QoreURLClassLoader.java:        //  byte_code.length, pendingClasses.size());
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> getResolveClass(String name) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv = tryGetPendingClass(name);
java/org/qore/jni/QoreURLClassLoader.java:        if (rv == null) {
java/org/qore/jni/QoreURLClassLoader.java:            rv = super.findClass(name);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        resolveClass(rv);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("returning resolved %s\n", name);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public void clearCache() {
java/org/qore/jni/QoreURLClassLoader.java:        pendingClasses.clear();
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public byte[] removePendingByteCode(String bin_name) {
java/org/qore/jni/QoreURLClassLoader.java:        byte[] rv = pendingClasses.get(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public ArrayList<String> getPendingClassesForPackage(String packageName) {
java/org/qore/jni/QoreURLClassLoader.java:        ArrayList<String> rv = new ArrayList<String>();
java/org/qore/jni/QoreURLClassLoader.java:        pendingClasses.forEach((k, v) -> {
java/org/qore/jni/QoreURLClassLoader.java:            // see if binary name matches the package name
java/org/qore/jni/QoreURLClassLoader.java:            int dot = k.indexOf(".");
java/org/qore/jni/QoreURLClassLoader.java:            if (dot == -1 && packageName.isEmpty()
java/org/qore/jni/QoreURLClassLoader.java:                || (dot > 0 && k.startsWith(packageName + ".") && k.indexOf(".", packageName.length() + 1) == -1)) {
java/org/qore/jni/QoreURLClassLoader.java:                rv.add(k);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        });
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("getPendingClassesForPackage(%s) this: %x rv: %s (cache: %s)\n", packageName, hashCode(),
java/org/qore/jni/QoreURLClassLoader.java:        //  rv, pendingClasses);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! for resolving circular dependencies when defining inner classes
java/org/qore/jni/QoreURLClassLoader.java:    private Class<?> tryGetPendingClass(String name) {
java/org/qore/jni/QoreURLClassLoader.java:        byte[] byte_code = pendingClasses.remove(name);
java/org/qore/jni/QoreURLClassLoader.java:        if (byte_code == null) {
java/org/qore/jni/QoreURLClassLoader.java:            if (enable_cache) {
java/org/qore/jni/QoreURLClassLoader.java:                Class<?> rv = classCache.remove(name);
java/org/qore/jni/QoreURLClassLoader.java:                if (rv == null) {
java/org/qore/jni/QoreURLClassLoader.java:                    ClassLoader parent = getParent();
java/org/qore/jni/QoreURLClassLoader.java:                    if (parent != null && (parent instanceof QoreURLClassLoader)) {
java/org/qore/jni/QoreURLClassLoader.java:                        rv = ((QoreURLClassLoader)parent).tryGetPendingClass(name);
java/org/qore/jni/QoreURLClassLoader.java:                    }
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:                return rv;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            return null;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        // create the class and return it
java/org/qore/jni/QoreURLClassLoader.java:        return defineClassIntern(name, byte_code, 0, byte_code.length);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! Supports generating classes from byte code as well as returning classes built in to the jni module
java/org/qore/jni/QoreURLClassLoader.java:    protected Class<?> findClass(String bin_name) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("findClass() this: %x %s\n", hashCode(), bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        try {
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv;
java/org/qore/jni/QoreURLClassLoader.java:        if (bin_name.startsWith("net.bytebuddy.")) {
java/org/qore/jni/QoreURLClassLoader.java:            byte[] byte_code = getCachedClass0(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("findClass() %s: %s\n", bin_name, byte_code);
java/org/qore/jni/QoreURLClassLoader.java:            if (byte_code != null) {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("findClass() %s returning cached\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                return defineClassIntern(bin_name, byte_code, 0, byte_code.length);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        } else if (bin_name.startsWith("org.qore.")) {
java/org/qore/jni/QoreURLClassLoader.java:            byte[] byte_code = getInternalClass0(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("findClass() %s: %s\n", bin_name, byte_code);
java/org/qore/jni/QoreURLClassLoader.java:            if (byte_code != null) {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("findClass() %s returning internal\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                return defineClassIntern(bin_name, byte_code, 0, byte_code.length);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("findClass() %s calling super\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        //return super.findClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        rv = super.findClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("findClass() %x %s: returning super: %s\n", hashCode(), bin_name, rv);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:        } catch (ClassNotFoundException e) {
java/org/qore/jni/QoreURLClassLoader.java:            //e.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:            throw e;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public byte[] getInternalClass(String bin_name) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        byte[] rv = getInternalClass0(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:            return rv;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        throw new ClassNotFoundException(String.format("unknown internal class '%s'", bin_name));
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public ArrayList<String> getInternalClassesForPackage(String packageName) {
java/org/qore/jni/QoreURLClassLoader.java:        ArrayList<String> rv = new ArrayList<String>();
java/org/qore/jni/QoreURLClassLoader.java:        getInternalClassesForPackage0(pgm_ptr, packageName, rv);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("getInternalClassesForPackage(%s) rv: '%s'\n", packageName, rv);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public synchronized boolean checkInProgress(String bin_name) {
java/org/qore/jni/QoreURLClassLoader.java:        return classInProgress.contains(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    private synchronized boolean markInProgress(String bin_name) {
java/org/qore/jni/QoreURLClassLoader.java:        if (classInProgress.contains(bin_name)) {
java/org/qore/jni/QoreURLClassLoader.java:            return true;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        classInProgress.add(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog("marked in progress " + bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        return false;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    private synchronized void removeInProgress(String bin_name) {
java/org/qore/jni/QoreURLClassLoader.java:        classInProgress.remove(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog("removed in progress " + bin_name);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> loadResolveClass(String name) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        return loadClass(name);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    /** Check if the class is loaded in this class loader or in the parent if it's a QoreURLClassLoader
java/org/qore/jni/QoreURLClassLoader.java:     *
java/org/qore/jni/QoreURLClassLoader.java:     * @param bin_name the class to check
java/org/qore/jni/QoreURLClassLoader.java:     * @return the class if it's loaded
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> checkLoadedClass(String bin_name) {
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv = findLoadedClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:            return rv;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        ClassLoader parent = getParent();
java/org/qore/jni/QoreURLClassLoader.java:        if (parent instanceof QoreURLClassLoader) {
java/org/qore/jni/QoreURLClassLoader.java:            return ((QoreURLClassLoader)parent).checkLoadedClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        return null;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    // NOTE: loadClass(String, boolean) performs synchronization
java/org/qore/jni/QoreURLClassLoader.java:    /**
java/org/qore/jni/QoreURLClassLoader.java:     * Loads classes; returns pending classes injected by the jni module or the compiler
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> loadClass(String bin_name) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader.loadClass() this: %x '%s' pgm: %x (startup: %s)\n",
java/org/qore/jni/QoreURLClassLoader.java:        //    hashCode(), bin_name, pgm_ptr, startup);
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv = checkLoadedClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("loadClass() %s returning loaded\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            return rv;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        rv = tryGetPendingClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("loadClass() %s returning pending\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            return rv;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        QoreJavaFileObject file = classes.get(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        if (file != null) {
java/org/qore/jni/QoreURLClassLoader.java:            byte[] bytes = file.getByteCode();
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("QoreURLClassLoader.loadClass() %x: %s returning defineClass()\n", hashCode(),
java/org/qore/jni/QoreURLClassLoader.java:            //    bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            return defineClass(bin_name, bytes, 0, bytes.length);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        if (bin_name.startsWith("java.")
java/org/qore/jni/QoreURLClassLoader.java:            || bin_name.startsWith("javax.")
java/org/qore/jni/QoreURLClassLoader.java:            || bin_name.startsWith("sun.")
java/org/qore/jni/QoreURLClassLoader.java:            || bin_name.startsWith("org.qore.jni.")
java/org/qore/jni/QoreURLClassLoader.java:            || bin_name.startsWith("org.qore.lang.")) {
java/org/qore/jni/QoreURLClassLoader.java:            //return super.loadClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            rv = super.loadClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("loadClass() %s resolved %s with super: %s\n", bin_name, rv, rv.getClass().getClassLoader());
java/org/qore/jni/QoreURLClassLoader.java:            return rv;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        if (isDynamic(bin_name)) {
java/org/qore/jni/QoreURLClassLoader.java:            // only remove from set if successful
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                byte[] bytes = generateByteCode(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                // have to check if the class was loaded in the meantime
java/org/qore/jni/QoreURLClassLoader.java:                rv = checkLoadedClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:                    //System.out.printf("loadClass() %s returning loaded after bytecode generation\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                    return rv;
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:                rv = defineClassIntern(bin_name, bytes, 0, bytes.length);
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("loadClass() this: %x pgm: %x dyn %s returning generated %s\n", hashCode(),
java/org/qore/jni/QoreURLClassLoader.java:                //    pgm_ptr, bin_name, rv);
java/org/qore/jni/QoreURLClassLoader.java:                return rv;
java/org/qore/jni/QoreURLClassLoader.java:            } catch (ClassNotFoundException e1) {
java/org/qore/jni/QoreURLClassLoader.java:                //e1.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                // block left empty on purpose
java/org/qore/jni/QoreURLClassLoader.java:            } catch (RuntimeException e1) {
java/org/qore/jni/QoreURLClassLoader.java:                //e1.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                throw e1;
java/org/qore/jni/QoreURLClassLoader.java:            } catch (Throwable e1) {
java/org/qore/jni/QoreURLClassLoader.java:                //e1.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                throw new RuntimeException(e1);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        if (!startup) {
java/org/qore/jni/QoreURLClassLoader.java:            ClassLoader parent = getParent();
java/org/qore/jni/QoreURLClassLoader.java:            if (parent == null) {
java/org/qore/jni/QoreURLClassLoader.java:                parent = getSystemClassLoader();
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (parent != null) {
java/org/qore/jni/QoreURLClassLoader.java:                try {
java/org/qore/jni/QoreURLClassLoader.java:                    //return parent.loadClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                    rv = parent.loadClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                    //System.out.printf("loadClass() %s returning parent: %s\n", bin_name, rv);
java/org/qore/jni/QoreURLClassLoader.java:                    return rv;
java/org/qore/jni/QoreURLClassLoader.java:                } catch (ClassNotFoundException e) {
java/org/qore/jni/QoreURLClassLoader.java:                    // ignore
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        } else {
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                // we must load classes first when we are a "startup" class loader, so that referenced dynamic
java/org/qore/jni/QoreURLClassLoader.java:                // classes will be loadable
java/org/qore/jni/QoreURLClassLoader.java:                rv = super.findClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:                    //System.out.printf("loadClass() %s returning super.findClass()\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                    return rv;
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:            } catch (ClassNotFoundException e) {
java/org/qore/jni/QoreURLClassLoader.java:                // ignore
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader.loadClass() %s call super... (classes: %s)\n", bin_name,
java/org/qore/jni/QoreURLClassLoader.java:        //    classes.keySet());
java/org/qore/jni/QoreURLClassLoader.java:        return super.loadClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! Returns the Java class from the given Qore class with a Qore class ptr
java/org/qore/jni/QoreURLClassLoader.java:    /**
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> loadClassWithPtr(String bin_name, long class_ptr) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog(String.format("loadClassWithPtr() %s: %x", bin_name, class_ptr));
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv;
java/org/qore/jni/QoreURLClassLoader.java:        synchronized(getClassLoadingLock(bin_name)) {
java/org/qore/jni/QoreURLClassLoader.java:            rv = checkLoadedClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("loadClassWithPtr() %s returning loaded\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                return rv;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            rv = tryGetPendingClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("loadClassWithPtr() %s returning pending\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                return rv;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            QoreJavaFileObject file = classes.get(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            if (file != null) {
java/org/qore/jni/QoreURLClassLoader.java:                byte[] bytes = file.getByteCode();
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("QoreURLClassLoader.loadClassWithPtr() %x: %s returning defineClass()\n",
java/org/qore/jni/QoreURLClassLoader.java:                //    hashCode(), bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                return defineClass(bin_name, bytes, 0, bytes.length);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            // only remove from set if successful
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("loadClassWithPtr() this: %x %s about to call generateByteCode(%s, %x)\n",
java/org/qore/jni/QoreURLClassLoader.java:                //    hashCode(), bin_name, bin_name, class_ptr);
java/org/qore/jni/QoreURLClassLoader.java:                byte[] bytes = generateByteCode(bin_name, class_ptr);
java/org/qore/jni/QoreURLClassLoader.java:                // have to check if the class was loaded in the meantime
java/org/qore/jni/QoreURLClassLoader.java:                rv = checkLoadedClass(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                if (rv != null) {
java/org/qore/jni/QoreURLClassLoader.java:                    //System.out.printf("loadClassWithPtr() %s returning loaded after bytecode generation\n", bin_name);
java/org/qore/jni/QoreURLClassLoader.java:                    return rv;
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:                rv = defineClassIntern(bin_name, bytes, 0, bytes.length);
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("loadClassWithPtr() this: %x pgm: %x dyn %s returning generated %s\n", hashCode(),
java/org/qore/jni/QoreURLClassLoader.java:                //    pgm_ptr, bin_name, rv);
java/org/qore/jni/QoreURLClassLoader.java:            } catch (RuntimeException e1) {
java/org/qore/jni/QoreURLClassLoader.java:                //e1.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                throw e1;
java/org/qore/jni/QoreURLClassLoader.java:            } catch (Throwable e1) {
java/org/qore/jni/QoreURLClassLoader.java:                //e1.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                throw new RuntimeException(e1);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! Returns true if the given package name is dynamic
java/org/qore/jni/QoreURLClassLoader.java:    static public boolean isDynamic(String bin_name) {
java/org/qore/jni/QoreURLClassLoader.java:        return bin_name.equals("qore") || bin_name.equals("python")
java/org/qore/jni/QoreURLClassLoader.java:            || (bin_name.startsWith("qore.") && bin_name.length() > 5)
java/org/qore/jni/QoreURLClassLoader.java:            || (bin_name.startsWith("qoremod.") && bin_name.length() > 8)
java/org/qore/jni/QoreURLClassLoader.java:            || (bin_name.startsWith("python.") && bin_name.length() > 7)
java/org/qore/jni/QoreURLClassLoader.java:            || (bin_name.startsWith("pythonmod.") && bin_name.length() > 10);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    protected Class<?> defineClassIntern(String name, byte[] byte_code, int off, int len) throws ClassFormatError {
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv = defineClass(name, byte_code, off, len);
java/org/qore/jni/QoreURLClassLoader.java:        if (enable_cache) {
java/org/qore/jni/QoreURLClassLoader.java:            classCache.put(name, rv);
java/org/qore/jni/QoreURLClassLoader.java:            //debugLog("QoreURLClassLoader.defineClassIntern() caching " + name);
java/org/qore/jni/QoreURLClassLoader.java:        } else {
java/org/qore/jni/QoreURLClassLoader.java:            //debugLog("QoreURLClassLoader.defineClassIntern() not caching " + name);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> defineClassUnconditional(String name, byte[] byte_code) throws ClassFormatError {
java/org/qore/jni/QoreURLClassLoader.java:        // create the class and return it
java/org/qore/jni/QoreURLClassLoader.java:        return defineClassIntern(name, byte_code, 0, byte_code.length);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public Class<?> defineResolveClass(String name, byte[] b, int off, int len) throws ClassFormatError {
java/org/qore/jni/QoreURLClassLoader.java:        Class<?> rv = defineClassIntern(name, b, off, len);
java/org/qore/jni/QoreURLClassLoader.java:        resolveClass(rv);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public long getPtr() {
java/org/qore/jni/QoreURLClassLoader.java:        return pgm_ptr;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public void clearProgramPtr() {
java/org/qore/jni/QoreURLClassLoader.java:        pgm_ptr = 0;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public static long getProgramPtr() {
java/org/qore/jni/QoreURLClassLoader.java:        return current.get().pgm_ptr;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public static void setProgramPtr(long ptr) {
java/org/qore/jni/QoreURLClassLoader.java:        current.get().pgm_ptr = ptr;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public static QoreURLClassLoader getCurrent() {
java/org/qore/jni/QoreURLClassLoader.java:        return current.get();
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    // sets the current classloader as the thread's contextual class loader
java/org/qore/jni/QoreURLClassLoader.java:    public void setContext() {
java/org/qore/jni/QoreURLClassLoader.java:        Thread.currentThread().setContextClassLoader(this);
java/org/qore/jni/QoreURLClassLoader.java:        current.set(this);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! Adds a path to the classpath
java/org/qore/jni/QoreURLClassLoader.java:    public void addPath(String classpath) {
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog(String.format("%x: addPath: %s", hashCode(), classpath));
java/org/qore/jni/QoreURLClassLoader.java:        String seps = File.pathSeparator; // separators
java/org/qore/jni/QoreURLClassLoader.java:        // want to accept both system separator and ';'
java/org/qore/jni/QoreURLClassLoader.java:        if (!File.pathSeparator.equals(";")) {
java/org/qore/jni/QoreURLClassLoader.java:            seps += ";";
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        for (StringTokenizer st = new StringTokenizer(classpath, seps, false); st.hasMoreTokens();) {
java/org/qore/jni/QoreURLClassLoader.java:            String pathentry = st.nextToken();
java/org/qore/jni/QoreURLClassLoader.java:            //debugLog("addPath(): " + pathentry);
java/org/qore/jni/QoreURLClassLoader.java:            String basename = null;
java/org/qore/jni/QoreURLClassLoader.java:            if (pathentry.length() == 0) {
java/org/qore/jni/QoreURLClassLoader.java:                continue;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            File fileentry = new File(pathentry);
java/org/qore/jni/QoreURLClassLoader.java:            if (fileentry.getName().indexOf('*') != -1) {
java/org/qore/jni/QoreURLClassLoader.java:                basename = fileentry.getName();
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = fileentry.getParentFile();
java/org/qore/jni/QoreURLClassLoader.java:                if (fileentry.getName().indexOf('*') != -1) {
java/org/qore/jni/QoreURLClassLoader.java:                    errorLog("Ignoring wildcard in classpath directory element '" + pathentry + "'");
java/org/qore/jni/QoreURLClassLoader.java:                    continue;
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (!fileentry.isAbsolute() && pathentry.charAt(0) != '/' && pathentry.charAt(0) != '\\') {
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = new File(fileentry.getPath());
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = fileentry.getCanonicalFile();
java/org/qore/jni/QoreURLClassLoader.java:            } catch (IOException thr) {
java/org/qore/jni/QoreURLClassLoader.java:                errorLog("Ignoring non-existent classpath element '" + fileentry + "' (" + thr + ").");
java/org/qore/jni/QoreURLClassLoader.java:                continue;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (basename != null && !basename.isEmpty()) {
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = new File(fileentry, basename);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (classPathElements.contains(fileentry.getPath())) {
java/org/qore/jni/QoreURLClassLoader.java:                //errorLog("Skipping duplicate classpath element '" + fileentry + "'.");
java/org/qore/jni/QoreURLClassLoader.java:                continue;
java/org/qore/jni/QoreURLClassLoader.java:            } else {
java/org/qore/jni/QoreURLClassLoader.java:                classPathElements.add(fileentry.getPath());
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (basename != null && !basename.isEmpty()) {
java/org/qore/jni/QoreURLClassLoader.java:                //debugLog("addWildcard() parent: " + fileentry.getParentFile().getPath() + " basename: " + basename);
java/org/qore/jni/QoreURLClassLoader.java:                addWildcard(fileentry.getParentFile(), basename);
java/org/qore/jni/QoreURLClassLoader.java:            } else if (!fileentry.exists()) { // s/never be due getCanonicalFile() above
java/org/qore/jni/QoreURLClassLoader.java:                //errorLog("Could not find classpath element '" + fileentry + "'");
java/org/qore/jni/QoreURLClassLoader.java:            } else if (fileentry.isDirectory()) {
java/org/qore/jni/QoreURLClassLoader.java:                //debugLog("adding dir: " + fileentry.getName() + " (" + fileentry.toString() + ")");
java/org/qore/jni/QoreURLClassLoader.java:                addURL(createUrl(fileentry));
java/org/qore/jni/QoreURLClassLoader.java:            } else if (isLoadable(fileentry.getName())) {
java/org/qore/jni/QoreURLClassLoader.java:                //debugLog("adding jar: " + fileentry.getName() + " (" + fileentry.toString() + ")");
java/org/qore/jni/QoreURLClassLoader.java:                addURL(createUrl(fileentry));
java/org/qore/jni/QoreURLClassLoader.java:            } else {
java/org/qore/jni/QoreURLClassLoader.java:                errorLog("ClassPath element '" + fileentry + "' is not an existing directory and is not a file " +
java/org/qore/jni/QoreURLClassLoader.java:                    "ending with '.zip' or '.jar'");
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        //infoLog("Class loader is using classpath: \"" + classPath + "\".");
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    //! Returns a list of classes in the given dynamic package
java/org/qore/jni/QoreURLClassLoader.java:    public ArrayList<String> getClassesInNamespace(String packageName) {
java/org/qore/jni/QoreURLClassLoader.java:        ArrayList<String> rv = new ArrayList<String>();
java/org/qore/jni/QoreURLClassLoader.java:        ClassModInfo info = new ClassModInfo(packageName, true);
java/org/qore/jni/QoreURLClassLoader.java:        getClassesInNamespace0(pgm_ptr, info.cls, info.mod, info.python, rv);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("getClassesInNamespace(%s) pgm: %x cls: '%s' mod: '%s' rv: %s\n", packageName, pgm_ptr,
java/org/qore/jni/QoreURLClassLoader.java:        //    info.cls, info.mod, rv);
java/org/qore/jni/QoreURLClassLoader.java:        if (rv.size() == 0) {
java/org/qore/jni/QoreURLClassLoader.java:            ClassLoader parent = getParent();
java/org/qore/jni/QoreURLClassLoader.java:            //System.out.printf("getClassesInNamespace() %s; parent is %s\n", packageName, parent.getClass().getName());
java/org/qore/jni/QoreURLClassLoader.java:            if (parent instanceof QoreURLClassLoader) {
java/org/qore/jni/QoreURLClassLoader.java:                return ((QoreURLClassLoader)parent).getClassesInNamespace(packageName);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public static ArrayList<File> splitClassPath(String classpath) {
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog("addPath: " + classpath);
java/org/qore/jni/QoreURLClassLoader.java:        String seps = File.pathSeparator; // separators
java/org/qore/jni/QoreURLClassLoader.java:        ArrayList<File> rv = new ArrayList<File>();
java/org/qore/jni/QoreURLClassLoader.java:        // want to accept both system separator and ';'
java/org/qore/jni/QoreURLClassLoader.java:        if (!File.pathSeparator.equals(";")) {
java/org/qore/jni/QoreURLClassLoader.java:            seps += ";";
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        for (StringTokenizer st = new StringTokenizer(classpath, seps, false); st.hasMoreTokens();) {
java/org/qore/jni/QoreURLClassLoader.java:            String pathentry = st.nextToken();
java/org/qore/jni/QoreURLClassLoader.java:            String basename = null;
java/org/qore/jni/QoreURLClassLoader.java:            if (pathentry.length() == 0) {
java/org/qore/jni/QoreURLClassLoader.java:                continue;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            File fileentry = new File(pathentry);
java/org/qore/jni/QoreURLClassLoader.java:            if (fileentry.getName().indexOf('*') != -1) {
java/org/qore/jni/QoreURLClassLoader.java:                basename = fileentry.getName();
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = fileentry.getParentFile();
java/org/qore/jni/QoreURLClassLoader.java:                if (fileentry.getName().indexOf('*') != -1) {
java/org/qore/jni/QoreURLClassLoader.java:                    errorLog("Ignoring wildcard in classpath directory element '" + pathentry + "'");
java/org/qore/jni/QoreURLClassLoader.java:                    continue;
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (!fileentry.isAbsolute() && pathentry.charAt(0) != '/' && pathentry.charAt(0) != '\\') {
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = new File(fileentry.getPath());
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = fileentry.getCanonicalFile();
java/org/qore/jni/QoreURLClassLoader.java:            } catch (IOException thr) {
java/org/qore/jni/QoreURLClassLoader.java:                errorLog("Ignoring non-existent classpath element '" + fileentry + "' (" + thr + ").");
java/org/qore/jni/QoreURLClassLoader.java:                continue;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            if (basename != null && !basename.isEmpty()) {
java/org/qore/jni/QoreURLClassLoader.java:                fileentry = new File(fileentry, basename);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            rv.add(fileentry);
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    static boolean isLoadable(String name) {
java/org/qore/jni/QoreURLClassLoader.java:        name = name.toLowerCase();
java/org/qore/jni/QoreURLClassLoader.java:        return (name.endsWith(".zip") || name.endsWith(".jar")) ? true : false;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    static private void infoLog(String msg) {
java/org/qore/jni/QoreURLClassLoader.java:        System.out.println("QoreURLClassLoader INFO: " + msg);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    static private void debugLog(String msg) {
java/org/qore/jni/QoreURLClassLoader.java:        System.out.println("QoreURLClassLoader DEBUG: " + msg);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    static private void errorLog(String msg) {
java/org/qore/jni/QoreURLClassLoader.java:        System.out.println("QoreURLClassLoader ERROR: " + msg);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    /**
java/org/qore/jni/QoreURLClassLoader.java:     * Adds a set of files using a generic base name to this loader's classpath.  See @link:addClassPath(String) for
java/org/qore/jni/QoreURLClassLoader.java:     * details of the generic base name.
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public void addWildcard(File dir, String nam) {
java/org/qore/jni/QoreURLClassLoader.java:        if (!dir.exists()) {
java/org/qore/jni/QoreURLClassLoader.java:            errorLog("Cannot find directory for classpath element '" + dir + File.separator + nam + "'");
java/org/qore/jni/QoreURLClassLoader.java:            return;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        if (!dir.canRead()) {
java/org/qore/jni/QoreURLClassLoader.java:            errorLog("Cannot read directory for classpath element '" + dir + File.separator + nam + "'");
java/org/qore/jni/QoreURLClassLoader.java:            return;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        // make a regex pattern from the glob pattern
java/org/qore/jni/QoreURLClassLoader.java:        final String pattern = nam.replace(new StringBuffer("*"), new StringBuffer(".*"));
java/org/qore/jni/QoreURLClassLoader.java:        //debugLog("dir: " + dir + " pattern: " + pattern);
java/org/qore/jni/QoreURLClassLoader.java:        File[] files = dir.listFiles(new FilenameFilter() {
java/org/qore/jni/QoreURLClassLoader.java:            @Override
java/org/qore/jni/QoreURLClassLoader.java:            public boolean accept(File dir, String name) {
java/org/qore/jni/QoreURLClassLoader.java:                return name.matches("^" + pattern + "$");
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        });
java/org/qore/jni/QoreURLClassLoader.java:        if (files == null) {
java/org/qore/jni/QoreURLClassLoader.java:            errorLog("Error accessing directory for classpath element '" + dir + File.separator + nam + "'");
java/org/qore/jni/QoreURLClassLoader.java:            return;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        if (files.length == 0) {
java/org/qore/jni/QoreURLClassLoader.java:            debugLog("no matching files for classpath element '" + dir + File.separator + nam + "'");
java/org/qore/jni/QoreURLClassLoader.java:            return;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        for (File f : files) {
java/org/qore/jni/QoreURLClassLoader.java:            if (isLoadable(f.getName())) {
java/org/qore/jni/QoreURLClassLoader.java:                //debugLog("adding file: " + f.getName());
java/org/qore/jni/QoreURLClassLoader.java:                addURL(createUrl(f));
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    /**
java/org/qore/jni/QoreURLClassLoader.java:     *  Clears the compilation cache after compiling
java/org/qore/jni/QoreURLClassLoader.java:     */
java/org/qore/jni/QoreURLClassLoader.java:    public void clearCompilationCache() {
java/org/qore/jni/QoreURLClassLoader.java:        classCache.clear();
java/org/qore/jni/QoreURLClassLoader.java:        clearCompilationCache0(pgm_ptr);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public synchronized byte[] generateByteCode(String bin_name) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        return generateByteCode(bin_name, 0);
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    public synchronized byte[] generateByteCode(String bin_name, long class_ptr) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        byte[] rv = pendingClasses.get(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader.generateByteCode() this: %x class: '%s' ptr: %x (pend: %s)\n",
java/org/qore/jni/QoreURLClassLoader.java:        //    hashCode(), bin_name, class_ptr, rv == null ? "false" : "true");
java/org/qore/jni/QoreURLClassLoader.java:        if (rv == null) {
java/org/qore/jni/QoreURLClassLoader.java:            if (markInProgress(bin_name)) {
java/org/qore/jni/QoreURLClassLoader.java:                throw new ClassNotFoundException(String.format("%s is already being created", bin_name));
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("QoreURLClassLoader.generateByteCode() this: %x class: '%s' ptr: %x about to call " +
java/org/qore/jni/QoreURLClassLoader.java:                //    "generateByteCodeIntern()\n", hashCode(), bin_name, class_ptr);
java/org/qore/jni/QoreURLClassLoader.java:                rv = generateByteCodeIntern(bin_name, class_ptr);
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("QoreURLClassLoader.generateByteCode() this: %x class: '%s' ptr: %x rv: %s\n",
java/org/qore/jni/QoreURLClassLoader.java:                //    hashCode(), bin_name, class_ptr, rv);
java/org/qore/jni/QoreURLClassLoader.java:            } finally {
java/org/qore/jni/QoreURLClassLoader.java:                removeInProgress(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("generateByteCode() this: %x '%s': %s\n", hashCode(), bin_name, rv);
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    private byte[] generateByteCodeIntern(String bin_name, long class_ptr) throws ClassNotFoundException {
java/org/qore/jni/QoreURLClassLoader.java:        ClassModInfo info = new ClassModInfo(bin_name);
java/org/qore/jni/QoreURLClassLoader.java:        if (info.cls == null) {
java/org/qore/jni/QoreURLClassLoader.java:            throw new ClassNotFoundException(String.format("invalid dynamic import path '%s'", bin_name));
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        byte[] rv = null;
java/org/qore/jni/QoreURLClassLoader.java:        if (pgm_ptr != 0) {
java/org/qore/jni/QoreURLClassLoader.java:            try {
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("QoreURLClassLoader.generateByteCodeIntern() this: %x pgm: %x '%s' cptr: %x\n",
java/org/qore/jni/QoreURLClassLoader.java:                //    hashCode(), pgm_ptr, bin_name, class_ptr);
java/org/qore/jni/QoreURLClassLoader.java:                rv = generateByteCode0(pgm_ptr, info.cls, bin_name, info.mod, info.python, class_ptr);
java/org/qore/jni/QoreURLClassLoader.java:                //System.out.printf("QoreURLClassLoader.generateByteCodeIntern() this: %x pgm: %x '%s' cptr: %x " +
java/org/qore/jni/QoreURLClassLoader.java:                //    "rv: %s\n", hashCode(), pgm_ptr, bin_name, class_ptr, rv);
java/org/qore/jni/QoreURLClassLoader.java:            } catch (ClassNotFoundException e) {
java/org/qore/jni/QoreURLClassLoader.java:                throw e;
java/org/qore/jni/QoreURLClassLoader.java:            } catch (RuntimeException e) {
java/org/qore/jni/QoreURLClassLoader.java:                //e.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                throw e;
java/org/qore/jni/QoreURLClassLoader.java:            } catch (Throwable e) {
java/org/qore/jni/QoreURLClassLoader.java:                //e.printStackTrace();
java/org/qore/jni/QoreURLClassLoader.java:                throw new RuntimeException(e);
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        if (rv == null) {
java/org/qore/jni/QoreURLClassLoader.java:            throw new ClassNotFoundException(String.format("could not find a Qore source class matching '%s' to " +
java/org/qore/jni/QoreURLClassLoader.java:                "create Java class '%s'", info.cls, bin_name));
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:        // only put in the cache if the byte code is present
java/org/qore/jni/QoreURLClassLoader.java:        pendingClasses.put(bin_name, rv);
java/org/qore/jni/QoreURLClassLoader.java:        //System.out.printf("QoreURLClassLoader.generateByteCodeIntern() this: %x created/cached %s: %s\n",
java/org/qore/jni/QoreURLClassLoader.java:        //    hashCode(), bin_name, rv.toString());
java/org/qore/jni/QoreURLClassLoader.java:        return rv;
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    private URL createUrl(File fileentry) {
java/org/qore/jni/QoreURLClassLoader.java:        try {
java/org/qore/jni/QoreURLClassLoader.java:            URL url = fileentry.toURI().toURL();
java/org/qore/jni/QoreURLClassLoader.java:            String path = url.getPath();
java/org/qore/jni/QoreURLClassLoader.java:            if (url.getPath().endsWith(".jar")) {
java/org/qore/jni/QoreURLClassLoader.java:                url = new URL("jar:file:" + path + "!/");
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            //infoLog("Added URL: '" + url.toString() + "'");
java/org/qore/jni/QoreURLClassLoader.java:            if (classPath.length() > 0) {
java/org/qore/jni/QoreURLClassLoader.java:                classPath += File.pathSeparator;
java/org/qore/jni/QoreURLClassLoader.java:            }
java/org/qore/jni/QoreURLClassLoader.java:            classPath += fileentry.getPath();
java/org/qore/jni/QoreURLClassLoader.java:            return url;
java/org/qore/jni/QoreURLClassLoader.java:        } catch (MalformedURLException thr) {
java/org/qore/jni/QoreURLClassLoader.java:            errorLog("classpath element '" + fileentry + "' could not be used to create a valid file system URL (" +
java/org/qore/jni/QoreURLClassLoader.java:                thr + ")");
java/org/qore/jni/QoreURLClassLoader.java:            return null;
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    private void setContextProgram(QoreURLClassLoader new_syscl) {
java/org/qore/jni/QoreURLClassLoader.java:        BooleanWrapper created = new BooleanWrapper();
java/org/qore/jni/QoreURLClassLoader.java:        pgm_ptr = getContextProgram0(this, created, static_bootstrap);
java/org/qore/jni/QoreURLClassLoader.java:        if (created.val) {
java/org/qore/jni/QoreURLClassLoader.java:            Runtime.getRuntime().addShutdownHook(new Thread() {
java/org/qore/jni/QoreURLClassLoader.java:                public void run() {
java/org/qore/jni/QoreURLClassLoader.java:                    shutdownContext0();
java/org/qore/jni/QoreURLClassLoader.java:                }
java/org/qore/jni/QoreURLClassLoader.java:            });
java/org/qore/jni/QoreURLClassLoader.java:        }
java/org/qore/jni/QoreURLClassLoader.java:    }
java/org/qore/jni/QoreURLClassLoader.java:    static private native void finalizeModuleInit0();
java/org/qore/jni/QoreURLClassLoader.java:    static private native byte[] getCachedClass0(String bin_name);
java/org/qore/jni/QoreURLClassLoader.java:    static private native byte[] getInternalClass0(String name);
java/org/qore/jni/QoreURLClassLoader.java:    private native byte[] generateByteCode0(long ptr, String qname, String name, String qore_module, boolean python,
java/org/qore/jni/QoreURLClassLoader.java:        long class_ptr) throws Throwable;
java/org/qore/jni/QoreURLClassLoader.java:    static private native void getClassesInNamespace0(long ptr, String packageName, String mod, boolean python,
java/org/qore/jni/QoreURLClassLoader.java:        ArrayList<String> result);
java/org/qore/jni/QoreURLClassLoader.java:    static private native void getInternalClassesForPackage0(long ptr, String packageName, ArrayList<String> result);
java/org/qore/jni/QoreURLClassLoader.java:    static private native long getContextProgram0(QoreURLClassLoader syscl, BooleanWrapper created, boolean finalize_init);
java/org/qore/jni/QoreURLClassLoader.java:    static private native void shutdownContext0();
java/org/qore/jni/QoreURLClassLoader.java:    static private native void clearCompilationCache0(long ptr);
java/org/qore/jni/QoreURLClassLoader.java:    static private native void dummy0();
java/org/qore/jni/QoreURLClassLoader.java:    static private native void debug0(long ptr);
java/org/qore/jni/QoreURLClassLoader.java:}
java/org/qore/jni/QoreJavaApi.java:package org.qore.jni;
java/org/qore/jni/QoreJavaApi.java:import org.qore.jni.QoreURLClassLoader;
java/org/qore/jni/QoreJavaApi.java:import java.util.Arrays;
java/org/qore/jni/QoreJavaApi.java://! This class provides methods that allow Java to interface with Qore code
java/org/qore/jni/QoreJavaApi.java:/**
java/org/qore/jni/QoreJavaApi.java: */
java/org/qore/jni/QoreJavaApi.java:public class QoreJavaApi {
java/org/qore/jni/QoreJavaApi.java:    //! Initialize the \c qore library and the \c jni module from a native Java thread
java/org/qore/jni/QoreJavaApi.java:    /** This method allows \c Qore functionality or Java APIs backed by \c %Qore APIs to be used from native Java
java/org/qore/jni/QoreJavaApi.java:        threads in an existing JVM process not started by \c %Qore itself.
java/org/qore/jni/QoreJavaApi.java:        This requires the platform-dependent \c qore library to be found in a directory set in the
java/org/qore/jni/QoreJavaApi.java:        \c java.library.path or by setting the \c QORE_LIBRARY environment variable to the absolute path of the
java/org/qore/jni/QoreJavaApi.java:        \c qore library.
java/org/qore/jni/QoreJavaApi.java:        If neither of these are set, then calling this method will result in a \c java.lang.UnsatisfiedLinkError
java/org/qore/jni/QoreJavaApi.java:        exception being raised.
java/org/qore/jni/QoreJavaApi.java:        This method is also safe to call when the Qore library and the jni module have been initialized already.
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static void initQore() throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("DBG: QoreJavaApi::initQore()");
java/org/qore/jni/QoreJavaApi.java:        try {
java/org/qore/jni/QoreJavaApi.java:            QoreURLClassLoader.getProgramPtr();
java/org/qore/jni/QoreJavaApi.java:        } catch (NullPointerException e0) {
java/org/qore/jni/QoreJavaApi.java:            //ClassLoader ldr = QoreJavaApi.class.getClassLoader();
java/org/qore/jni/QoreJavaApi.java:            //System.out.printf("QoreJavaApi.initQore() cl: %x (%s)\n", ldr.hashCode(),
java/org/qore/jni/QoreJavaApi.java:            //  ldr.getClass().getCanonicalName());
java/org/qore/jni/QoreJavaApi.java:            // initialize jni module
java/org/qore/jni/QoreJavaApi.java:            long ptr;
java/org/qore/jni/QoreJavaApi.java:            try {
java/org/qore/jni/QoreJavaApi.java:                // try to get a Qore context for a Java thread not associated with a Qore Program object
java/org/qore/jni/QoreJavaApi.java:                // but within a process initialized by the Qore library and the jni module
java/org/qore/jni/QoreJavaApi.java:                ptr = initQore0();
java/org/qore/jni/QoreJavaApi.java:            } catch (UnsatisfiedLinkError e1) {
java/org/qore/jni/QoreJavaApi.java:                // check for environment variable to Qore lib
java/org/qore/jni/QoreJavaApi.java:                String qore_lib_loc = System.getenv("QORE_LIBRARY");
java/org/qore/jni/QoreJavaApi.java:                if (qore_lib_loc != null) {
java/org/qore/jni/QoreJavaApi.java:                    // load the qore library dynamically, which will result in the jni module being loaded automatically
java/org/qore/jni/QoreJavaApi.java:                    // do to a JNI_OnLoad() function in libqore that initializes the Qore library and loads the jni
java/org/qore/jni/QoreJavaApi.java:                    // module
java/org/qore/jni/QoreJavaApi.java:                    System.load(qore_lib_loc);
java/org/qore/jni/QoreJavaApi.java:                } else {
java/org/qore/jni/QoreJavaApi.java:                    // load the qore library from \c java.library.path
java/org/qore/jni/QoreJavaApi.java:                    System.loadLibrary("qore");
java/org/qore/jni/QoreJavaApi.java:                }
java/org/qore/jni/QoreJavaApi.java:                // now we can run our native methods
java/org/qore/jni/QoreJavaApi.java:                ptr = initQore0();
java/org/qore/jni/QoreJavaApi.java:            }
java/org/qore/jni/QoreJavaApi.java:            QoreURLClassLoader.setProgramPtr(ptr);
java/org/qore/jni/QoreJavaApi.java:        }
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Initialize the \c qore library and the \c jni module in memory only from a native Java thread
java/org/qore/jni/QoreJavaApi.java:    /** This method ensures that the qore library is loaded when the jni module is bootstrapped from Java
java/org/qore/jni/QoreJavaApi.java:        This requires the platform-dependent \c qore library to be found in a directory set in the
java/org/qore/jni/QoreJavaApi.java:        \c java.library.path or by setting the \c QORE_LIBRARY environment variable to the absolute path of the
java/org/qore/jni/QoreJavaApi.java:        \c qore library.
java/org/qore/jni/QoreJavaApi.java:        If neither of these are set, then calling this method will result in a \c java.lang.UnsatisfiedLinkError
java/org/qore/jni/QoreJavaApi.java:        exception being raised.
java/org/qore/jni/QoreJavaApi.java:        This method is also safe to call when the Qore library and the jni module have been initialized already.
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static void initQoreBootstrap() throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("DBG: QoreJavaApi::initQoreBootstrap()");
java/org/qore/jni/QoreJavaApi.java:        try {
java/org/qore/jni/QoreJavaApi.java:            QoreURLClassLoader.getProgramPtr();
java/org/qore/jni/QoreJavaApi.java:        } catch (NullPointerException e0) {
java/org/qore/jni/QoreJavaApi.java:            // initialize jni module
java/org/qore/jni/QoreJavaApi.java:            try {
java/org/qore/jni/QoreJavaApi.java:                // try to get a Qore context for a Java thread not associated with a Qore Program object
java/org/qore/jni/QoreJavaApi.java:                // but within a process initialized by the Qore library and the jni module
java/org/qore/jni/QoreJavaApi.java:                initQoreBootstrap0();
java/org/qore/jni/QoreJavaApi.java:            } catch (UnsatisfiedLinkError e1) {
java/org/qore/jni/QoreJavaApi.java:                // check for environment variable to Qore lib
java/org/qore/jni/QoreJavaApi.java:                String qore_lib_loc = System.getenv("QORE_LIBRARY");
java/org/qore/jni/QoreJavaApi.java:                if (qore_lib_loc != null) {
java/org/qore/jni/QoreJavaApi.java:                    // load the qore library dynamically, which will result in the jni module being loaded automatically
java/org/qore/jni/QoreJavaApi.java:                    // do to a JNI_OnLoad() function in libqore that initializes the Qore library and loads the jni
java/org/qore/jni/QoreJavaApi.java:                    // module
java/org/qore/jni/QoreJavaApi.java:                    System.load(qore_lib_loc);
java/org/qore/jni/QoreJavaApi.java:                } else {
java/org/qore/jni/QoreJavaApi.java:                    // load the qore library from \c java.library.path
java/org/qore/jni/QoreJavaApi.java:                    System.loadLibrary("qore");
java/org/qore/jni/QoreJavaApi.java:                }
java/org/qore/jni/QoreJavaApi.java:                initQoreBootstrap0();
java/org/qore/jni/QoreJavaApi.java:            }
java/org/qore/jni/QoreJavaApi.java:        }
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls the given Qore function with the given arguments and returns the result
java/org/qore/jni/QoreJavaApi.java:    public static Object callFunction(String name, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.format("cl: %s func: '%s' pgm: %x\n", (cl != null ? cl.toString() : "null"), name,
java/org/qore/jni/QoreJavaApi.java:        //    cl.getProgramPtr());
java/org/qore/jni/QoreJavaApi.java:        return callFunction0(QoreURLClassLoader.getProgramPtr(), name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls a Qore function and returns the result as a Java Object, takes a variable number of arguments
java/org/qore/jni/QoreJavaApi.java:    public static Object callFunctionArgs(String name, Object[] args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.format("cl: %s func: '%s' pgm: %x\n", (cl != null ? cl.toString() : "null"), name,
java/org/qore/jni/QoreJavaApi.java:        //    cl.getProgramPtr());
java/org/qore/jni/QoreJavaApi.java:        return callFunction0(QoreURLClassLoader.getProgramPtr(), name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls the given Qore function with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreJavaApi.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @param name the name of the function to call
java/org/qore/jni/QoreJavaApi.java:     * @param args argument to the function call
java/org/qore/jni/QoreJavaApi.java:     * @return the result of the call
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @see @ref jni_qore_object_lifecycle_management
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static Object callFunctionSave(String name, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("cl: " + (cl != null ? cl.toString() : "null"));
java/org/qore/jni/QoreJavaApi.java:        return callFunctionSave0(QoreURLClassLoader.getProgramPtr(), name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls the given Qore function with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data, takes a variable number of arguments
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreJavaApi.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @param name the name of the function to call
java/org/qore/jni/QoreJavaApi.java:     * @param args argument to the function call
java/org/qore/jni/QoreJavaApi.java:     * @return the result of the call
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @see @ref jni_qore_object_lifecycle_management
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static Object callFunctionSaveArgs(String name, Object[] args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("cl: " + (cl != null ? cl.toString() : "null"));
java/org/qore/jni/QoreJavaApi.java:        return callFunctionSave0(QoreURLClassLoader.getProgramPtr(), name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls the given Qore static method with the given arguments and returns the result
java/org/qore/jni/QoreJavaApi.java:    public static Object callStaticMethod(String class_name, String method_name, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("cl: " + (cl != null ? cl.toString() : "null"));
java/org/qore/jni/QoreJavaApi.java:        return callStaticMethod0(QoreURLClassLoader.getProgramPtr(), class_name, method_name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls a Qore static method and returns the result as a Java Object, takes a variable number of arguments
java/org/qore/jni/QoreJavaApi.java:    public static Object callStaticMethodArgs(String class_name, String method_name, Object[] args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("cl: " + (cl != null ? cl.toString() : "null"));
java/org/qore/jni/QoreJavaApi.java:        return callStaticMethod0(QoreURLClassLoader.getProgramPtr(), class_name, method_name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls the given Qore static method with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreJavaApi.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @param class_name the name of the class where the static method is defined; can have a namespace-justified path
java/org/qore/jni/QoreJavaApi.java:     * (ex: \c "Namespace::ClassName")
java/org/qore/jni/QoreJavaApi.java:     * @param method_name the static method name to call
java/org/qore/jni/QoreJavaApi.java:     * @param args argument to the static method call
java/org/qore/jni/QoreJavaApi.java:     * @return the result of the call
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @see @ref jni_qore_object_lifecycle_management
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static Object callStaticMethodSave(String class_name, String method_name, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("cl: " + (cl != null ? cl.toString() : "null"));
java/org/qore/jni/QoreJavaApi.java:        return callStaticMethodSave0(QoreURLClassLoader.getProgramPtr(), class_name, method_name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Calls the given Qore static method with the given arguments and returns the result; if an object is returned, then a strong reference to the object is stored in thread-local data, takes a variable number of arguments
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreJavaApi.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @param class_name the name of the class where the static method is defined; can have a namespace-justified path
java/org/qore/jni/QoreJavaApi.java:     * (ex: \c "Namespace::ClassName")
java/org/qore/jni/QoreJavaApi.java:     * @param method_name the static method name to call
java/org/qore/jni/QoreJavaApi.java:     * @param args argument to the static method call
java/org/qore/jni/QoreJavaApi.java:     * @return the result of the call
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @see @ref jni_qore_object_lifecycle_management
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static Object callStaticMethodSaveArgs(String class_name, String method_name, Object[] args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        //QoreURLClassLoader cl = QoreURLClassLoader.getCurrent();
java/org/qore/jni/QoreJavaApi.java:        //System.out.println("cl: " + (cl != null ? cl.toString() : "null"));
java/org/qore/jni/QoreJavaApi.java:        return callStaticMethodSave0(QoreURLClassLoader.getProgramPtr(), class_name, method_name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Creates a new QoreObject from the class name and constructor arguments; a strong reference to the object is stored in thread-local data
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreJavaApi.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @param class_name the class name or namespace-justified path (ex: \c "Qore::SQL::SQLStatement") of the object to create
java/org/qore/jni/QoreJavaApi.java:     * @param args optional arguments to the constructor
java/org/qore/jni/QoreJavaApi.java:     * @return the object created
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @see @ref jni_qore_object_lifecycle_management
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static QoreObject newObjectSave(String class_name, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        return newObjectSave0(QoreURLClassLoader.getProgramPtr(), class_name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Creates a new QoreObject from the class name and constructor arguments; a strong reference to the object is stored in thread-local data under the given key
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     * This method can be used to save objects in thread-local data that would otherwise go out of scope; see
java/org/qore/jni/QoreJavaApi.java:     * @ref jni_qore_object_lifecycle_management for more information
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @param class_name the class name or namespace-justified path (ex: \c "Qore::SQL::SQLStatement") of the object to create
java/org/qore/jni/QoreJavaApi.java:     * @param args optional arguments to the constructor
java/org/qore/jni/QoreJavaApi.java:     * @return the object created
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable any Qore-language exception is rethrown here
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @see @ref jni_qore_object_lifecycle_management
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static QoreObject newObjectSaveArgs(String class_name, Object[] args) throws Throwable {
java/org/qore/jni/QoreJavaApi.java:        return newObjectSave0(QoreURLClassLoader.getProgramPtr(), class_name, args);
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Registers the current Java thread as a Qore thread
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @return true if the thread was registered, false if not (i.e. the current thread is already a valid Qore
java/org/qore/jni/QoreJavaApi.java:     * thread)
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @since jni module v2.0.6
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static boolean registerJavaThread() {
java/org/qore/jni/QoreJavaApi.java:        return registerJavaThread0();
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Deregisters the current thread as a Qore thread
java/org/qore/jni/QoreJavaApi.java:    /**
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @throws Throwable if there is an internal Qore library error deregistering the thread; if the current thread
java/org/qore/jni/QoreJavaApi.java:     * is not a valid Qore thread, no error is raised
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @note only call this in the same thread as a successful call to registerJavaThread()
java/org/qore/jni/QoreJavaApi.java:     *
java/org/qore/jni/QoreJavaApi.java:     * @since jni module v2.0.6
java/org/qore/jni/QoreJavaApi.java:     */
java/org/qore/jni/QoreJavaApi.java:    public static void deregisterJavaThread() {
java/org/qore/jni/QoreJavaApi.java:        deregisterJavaThread0();
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    //! Returns the current stack trace, not including the call to this method
java/org/qore/jni/QoreJavaApi.java:    public static StackTraceElement[] getStackTrace() {
java/org/qore/jni/QoreJavaApi.java:        StackTraceElement[] stack = new Exception().getStackTrace();
java/org/qore/jni/QoreJavaApi.java:        return stack.length > 0 ? Arrays.copyOfRange(stack, 1, stack.length) : null;
java/org/qore/jni/QoreJavaApi.java:    }
java/org/qore/jni/QoreJavaApi.java:    private native static long initQore0() throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static void initQoreBootstrap0() throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static Object callFunction0(long pgm_ptr, String name, Object... args) throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static Object callFunctionSave0(long pgm_ptr, String name, Object... args) throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static Object callStaticMethod0(long pgm_ptr, String class_name, String method_name, Object... args) throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static Object callStaticMethodSave0(long pgm_ptr, String class_name, String method_name, Object... args) throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static QoreObject newObjectSave0(long pgm_ptr, String class_name, Object...args) throws Throwable;
java/org/qore/jni/QoreJavaApi.java:    private native static boolean registerJavaThread0();
java/org/qore/jni/QoreJavaApi.java:    private native static void deregisterJavaThread0();
java/org/qore/jni/QoreJavaApi.java:}
java/org/qore/jni/QoreJavaDynamicApi.java:/*
java/org/qore/jni/QoreJavaDynamicApi.java:    QoreJavaDynamicApoi.java
java/org/qore/jni/QoreJavaDynamicApi.java:    Qore Programming Language JNI Module
java/org/qore/jni/QoreJavaDynamicApi.java:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
java/org/qore/jni/QoreJavaDynamicApi.java:    This library is free software; you can redistribute it and/or
java/org/qore/jni/QoreJavaDynamicApi.java:    modify it under the terms of the GNU Lesser General Public
java/org/qore/jni/QoreJavaDynamicApi.java:    License as published by the Free Software Foundation; either
java/org/qore/jni/QoreJavaDynamicApi.java:    version 2.1 of the License, or (at your option) any later version.
java/org/qore/jni/QoreJavaDynamicApi.java:    This library is distributed in the hope that it will be useful,
java/org/qore/jni/QoreJavaDynamicApi.java:    but WITHOUT ANY WARRANTY; without even the implied warranty of
java/org/qore/jni/QoreJavaDynamicApi.java:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
java/org/qore/jni/QoreJavaDynamicApi.java:    Lesser General Public License for more details.
java/org/qore/jni/QoreJavaDynamicApi.java:    You should have received a copy of the GNU Lesser General Public
java/org/qore/jni/QoreJavaDynamicApi.java:    License along with this library; if not, write to the Free Software
java/org/qore/jni/QoreJavaDynamicApi.java:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
java/org/qore/jni/QoreJavaDynamicApi.java:*/
java/org/qore/jni/QoreJavaDynamicApi.java:package org.qore.jni;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.lang.reflect.InvocationTargetException;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.lang.reflect.Method;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.lang.reflect.Constructor;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.lang.reflect.Field;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.util.ServiceLoader;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.lang.invoke.MethodHandle;
java/org/qore/jni/QoreJavaDynamicApi.java:import java.lang.invoke.MethodHandles;
java/org/qore/jni/QoreJavaDynamicApi.java://! This class provides methods that allow Java to interface with Qore code
java/org/qore/jni/QoreJavaDynamicApi.java:/**
java/org/qore/jni/QoreJavaDynamicApi.java: */
java/org/qore/jni/QoreJavaDynamicApi.java:public class QoreJavaDynamicApi {
java/org/qore/jni/QoreJavaDynamicApi.java:    //! creates an instance of the given class
java/org/qore/jni/QoreJavaDynamicApi.java:    public static Object newInstance(Constructor<?> c, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaDynamicApi.java:        try {
java/org/qore/jni/QoreJavaDynamicApi.java:            c.trySetAccessible();
java/org/qore/jni/QoreJavaDynamicApi.java:            return c.newInstance(args);
java/org/qore/jni/QoreJavaDynamicApi.java:        } catch (InvocationTargetException e) {
java/org/qore/jni/QoreJavaDynamicApi.java:            Throwable e0 = e;
java/org/qore/jni/QoreJavaDynamicApi.java:            while (e0 instanceof InvocationTargetException) {
java/org/qore/jni/QoreJavaDynamicApi.java:                e0 = e0.getCause();
java/org/qore/jni/QoreJavaDynamicApi.java:            }
java/org/qore/jni/QoreJavaDynamicApi.java:            throw e0;
java/org/qore/jni/QoreJavaDynamicApi.java:        }
java/org/qore/jni/QoreJavaDynamicApi.java:    }
java/org/qore/jni/QoreJavaDynamicApi.java:    //! invokes the given method on the given object and returns the return value
java/org/qore/jni/QoreJavaDynamicApi.java:    public static Object invokeMethod(Method m, Object obj, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaDynamicApi.java:        try {
java/org/qore/jni/QoreJavaDynamicApi.java:            m.trySetAccessible();
java/org/qore/jni/QoreJavaDynamicApi.java:            return m.invoke(obj, args);
java/org/qore/jni/QoreJavaDynamicApi.java:        } catch (InvocationTargetException e) {
java/org/qore/jni/QoreJavaDynamicApi.java:            Throwable e0 = e;
java/org/qore/jni/QoreJavaDynamicApi.java:            while (e0 instanceof InvocationTargetException) {
java/org/qore/jni/QoreJavaDynamicApi.java:                e0 = e0.getCause();
java/org/qore/jni/QoreJavaDynamicApi.java:            }
java/org/qore/jni/QoreJavaDynamicApi.java:            throw e0;
java/org/qore/jni/QoreJavaDynamicApi.java:        }
java/org/qore/jni/QoreJavaDynamicApi.java:    }
java/org/qore/jni/QoreJavaDynamicApi.java:    //! invokes the given method on the given object and returns the return value
java/org/qore/jni/QoreJavaDynamicApi.java:    public static Object invokeMethodNonvirtual(Method m, Object obj, Object... args) throws Throwable {
java/org/qore/jni/QoreJavaDynamicApi.java:        Class<?> c = m.getDeclaringClass();
java/org/qore/jni/QoreJavaDynamicApi.java:        m.trySetAccessible();
java/org/qore/jni/QoreJavaDynamicApi.java:        // works for all cases but generates a warning on the console if used with system classes
java/org/qore/jni/QoreJavaDynamicApi.java:        return MethodHandles.privateLookupIn(c, MethodHandles.lookup()).unreflectSpecial(m,
java/org/qore/jni/QoreJavaDynamicApi.java:            c).bindTo(obj).invokeWithArguments(args);
java/org/qore/jni/QoreJavaDynamicApi.java:    }
java/org/qore/jni/QoreJavaDynamicApi.java:    //! invokes the given method on the given object and returns the return value
java/org/qore/jni/QoreJavaDynamicApi.java:    public static Object getField(Field f, Object obj) throws Throwable {
java/org/qore/jni/QoreJavaDynamicApi.java:        f.setAccessible(true);
java/org/qore/jni/QoreJavaDynamicApi.java:        return f.get(obj);
java/org/qore/jni/QoreJavaDynamicApi.java:    }
java/org/qore/jni/QoreJavaDynamicApi.java:    //! returns a lookup object for the program's context
java/org/qore/jni/QoreJavaDynamicApi.java:    public static MethodHandles.Lookup lookup() {
java/org/qore/jni/QoreJavaDynamicApi.java:        return MethodHandles.lookup();
java/org/qore/jni/QoreJavaDynamicApi.java:    }
java/org/qore/jni/QoreJavaDynamicApi.java:    //! sets the Java caller context and runs ServiceLoader.load()
java/org/qore/jni/QoreJavaDynamicApi.java:    public static <S> ServiceLoader<S> loadServiceLoader(Class<S> c, ClassLoader cl) {
java/org/qore/jni/QoreJavaDynamicApi.java:        return ServiceLoader.load(c, cl);
java/org/qore/jni/QoreJavaDynamicApi.java:    }
java/org/qore/jni/QoreJavaDynamicApi.java:}
java/org/qore/jni/QoreInvocationHandler.java:package org.qore.jni;
java/org/qore/jni/QoreInvocationHandler.java:import java.lang.reflect.InvocationHandler;
java/org/qore/jni/QoreInvocationHandler.java:import java.lang.reflect.Method;
java/org/qore/jni/QoreInvocationHandler.java:public class QoreInvocationHandler implements InvocationHandler {
java/org/qore/jni/QoreInvocationHandler.java:    private long ptr;
java/org/qore/jni/QoreInvocationHandler.java:    private int counter;
java/org/qore/jni/QoreInvocationHandler.java:    QoreInvocationHandler(long ptr) {
java/org/qore/jni/QoreInvocationHandler.java:        this.ptr = ptr;
java/org/qore/jni/QoreInvocationHandler.java:        counter = 1;
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    @Override
java/org/qore/jni/QoreInvocationHandler.java:    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
java/org/qore/jni/QoreInvocationHandler.java:        long p = ref();
java/org/qore/jni/QoreInvocationHandler.java:        try {
java/org/qore/jni/QoreInvocationHandler.java:            return invoke0(p, proxy, method, args);
java/org/qore/jni/QoreInvocationHandler.java:        } finally {
java/org/qore/jni/QoreInvocationHandler.java:            deref();
java/org/qore/jni/QoreInvocationHandler.java:        }
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    @SuppressWarnings("deprecation")
java/org/qore/jni/QoreInvocationHandler.java:    @Override
java/org/qore/jni/QoreInvocationHandler.java:    protected void finalize() throws Throwable {
java/org/qore/jni/QoreInvocationHandler.java:        cleanup();
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    private synchronized long ref() {
java/org/qore/jni/QoreInvocationHandler.java:        if (counter == 0) {
java/org/qore/jni/QoreInvocationHandler.java:            throw new IllegalStateException("Invocation handler has already been destroyed");
java/org/qore/jni/QoreInvocationHandler.java:        }
java/org/qore/jni/QoreInvocationHandler.java:        ++counter;
java/org/qore/jni/QoreInvocationHandler.java:        return ptr;
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    private synchronized void deref() {
java/org/qore/jni/QoreInvocationHandler.java:        --counter;
java/org/qore/jni/QoreInvocationHandler.java:        if (counter == 1) {
java/org/qore/jni/QoreInvocationHandler.java:            notify();
java/org/qore/jni/QoreInvocationHandler.java:        }
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    private synchronized void destroy() {
java/org/qore/jni/QoreInvocationHandler.java:        while (true) {
java/org/qore/jni/QoreInvocationHandler.java:            if (counter == 0) {
java/org/qore/jni/QoreInvocationHandler.java:                return;
java/org/qore/jni/QoreInvocationHandler.java:            }
java/org/qore/jni/QoreInvocationHandler.java:            if (counter == 1) {
java/org/qore/jni/QoreInvocationHandler.java:                cleanup();
java/org/qore/jni/QoreInvocationHandler.java:                return;
java/org/qore/jni/QoreInvocationHandler.java:            }
java/org/qore/jni/QoreInvocationHandler.java:            try {
java/org/qore/jni/QoreInvocationHandler.java:                wait();
java/org/qore/jni/QoreInvocationHandler.java:            } catch (InterruptedException e) {
java/org/qore/jni/QoreInvocationHandler.java:                // ignored
java/org/qore/jni/QoreInvocationHandler.java:            }
java/org/qore/jni/QoreInvocationHandler.java:        }
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    private void cleanup() {
java/org/qore/jni/QoreInvocationHandler.java:        long p = ptr;
java/org/qore/jni/QoreInvocationHandler.java:        counter = 0;
java/org/qore/jni/QoreInvocationHandler.java:        ptr = 0;
java/org/qore/jni/QoreInvocationHandler.java:        finalize0(p);
java/org/qore/jni/QoreInvocationHandler.java:    }
java/org/qore/jni/QoreInvocationHandler.java:    private native static void finalize0(long ptr);
java/org/qore/jni/QoreInvocationHandler.java:    private native Object invoke0(long ptr, Object proxy, Method method, Object[] args) throws Throwable;
java/org/qore/jni/QoreInvocationHandler.java:}
java/org/qore/jni/QoreClosureMarker.java:package org.qore.jni;
java/org/qore/jni/QoreClosureMarker.java://! This marks a class that must have a \c call() method
java/org/qore/jni/QoreClosureMarker.java:/** The call() method can be declared with any argument and return types and will be called when this object is
java/org/qore/jni/QoreClosureMarker.java: * converted to a Qore closure and the closure is called
java/org/qore/jni/QoreClosureMarker.java:*/
java/org/qore/jni/QoreClosureMarker.java:public interface QoreClosureMarker {
java/org/qore/jni/QoreClosureMarker.java:}
java/org/qore/jni/Hash.java:/** Java wrapper for the %Qore HTTPClient class
java/org/qore/jni/Hash.java: *
java/org/qore/jni/Hash.java: */
java/org/qore/jni/Hash.java:package org.qore.jni;
java/org/qore/jni/Hash.java:// java imports
java/org/qore/jni/Hash.java:import java.util.Map;
java/org/qore/jni/Hash.java:import java.util.LinkedHashMap;
java/org/qore/jni/Hash.java:import java.util.ArrayList;
java/org/qore/jni/Hash.java:import java.time.ZonedDateTime;
java/org/qore/jni/Hash.java:import java.math.BigDecimal;
java/org/qore/jni/Hash.java:// qore jni imports
java/org/qore/jni/Hash.java:import org.qore.jni.QoreRelativeTime;
java/org/qore/jni/Hash.java:import org.qore.jni.QoreClosureMarker;
java/org/qore/jni/Hash.java://! Java Hash class to make it easier to work with %Qore hash data
java/org/qore/jni/Hash.java:/**
java/org/qore/jni/Hash.java: */
java/org/qore/jni/Hash.java:public class Hash extends LinkedHashMap<String, Object> {
java/org/qore/jni/Hash.java:    //! Creates the object
java/org/qore/jni/Hash.java:    public Hash() {
java/org/qore/jni/Hash.java:        super();
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Creates the object
java/org/qore/jni/Hash.java:    public Hash(Map<String, Object> m) {
java/org/qore/jni/Hash.java:        super(m);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a boolean
java/org/qore/jni/Hash.java:    /** @see getAsBool()
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public boolean getBool(String key) {
java/org/qore/jni/Hash.java:        return (Boolean)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a byte
java/org/qore/jni/Hash.java:    /** @see getAsByte()
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public int getByte(String key) {
java/org/qore/jni/Hash.java:        return (Integer)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a char
java/org/qore/jni/Hash.java:    public char getChar(String key) {
java/org/qore/jni/Hash.java:        return (Character)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a short
java/org/qore/jni/Hash.java:    public short getShort(String key) {
java/org/qore/jni/Hash.java:        return (Short)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as an int
java/org/qore/jni/Hash.java:    public int getInt(String key) {
java/org/qore/jni/Hash.java:        return (Integer)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a long
java/org/qore/jni/Hash.java:    public long getLong(String key) {
java/org/qore/jni/Hash.java:        return (Long)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a float
java/org/qore/jni/Hash.java:    public float getFloat(String key) {
java/org/qore/jni/Hash.java:        return (Float)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a double
java/org/qore/jni/Hash.java:    public double getDouble(String key) {
java/org/qore/jni/Hash.java:        return (Double)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a String
java/org/qore/jni/Hash.java:    public String getString(String key) {
java/org/qore/jni/Hash.java:        return (String)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as an array
java/org/qore/jni/Hash.java:    public ArrayList<Object> getList(String key) {
java/org/qore/jni/Hash.java:        ArrayList<Object> rv = new ArrayList<Object>();
java/org/qore/jni/Hash.java:        for (Object elem : (Object[])get(key)) {
java/org/qore/jni/Hash.java:            rv.add(elem);
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        return rv;
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as an absolute date/time value
java/org/qore/jni/Hash.java:    public ZonedDateTime getADate(String key) {
java/org/qore/jni/Hash.java:        return (ZonedDateTime)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a relative date/time value
java/org/qore/jni/Hash.java:    public QoreRelativeTime getRDate(String key) {
java/org/qore/jni/Hash.java:        return (QoreRelativeTime)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as an arbitrary-precision numeric value
java/org/qore/jni/Hash.java:    public BigDecimal getNumber(String key) {
java/org/qore/jni/Hash.java:        return (BigDecimal)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a byte array
java/org/qore/jni/Hash.java:    public byte[] getBinary(String key) {
java/org/qore/jni/Hash.java:        return (byte[])get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a hash
java/org/qore/jni/Hash.java:    public Hash getHash(String key) {
java/org/qore/jni/Hash.java:        return (Hash)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a callable value
java/org/qore/jni/Hash.java:    public QoreClosureMarker getCode(String key) {
java/org/qore/jni/Hash.java:        return (QoreClosureMarker)get(key);
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a boolean
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public boolean getAsBool(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (Boolean)rv;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).longValue() != 0 ? true : false;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        String val = String.valueOf(rv);
java/org/qore/jni/Hash.java:        if (val.equalsIgnoreCase("true")) {
java/org/qore/jni/Hash.java:            return true;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        return Long.parseLong(val) != 0 ? true : false;
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a byte
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public byte getAsByte(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).byteValue();
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (byte)((Boolean)rv ? 1 : 0);
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        // try to convert to a String and then a number
java/org/qore/jni/Hash.java:        return Byte.parseByte(String.valueOf(rv));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a short
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public short getAsShort(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).shortValue();
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (short)((Boolean)rv ? 1 : 0);
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        // try to convert to a String and then a number
java/org/qore/jni/Hash.java:        return Short.parseShort(String.valueOf(rv));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as an int
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public int getAsInt(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).intValue();
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (Boolean)rv ? 1 : 0;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        // try to convert to a String and then a number
java/org/qore/jni/Hash.java:        return Integer.parseInt(String.valueOf(rv));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a long
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public long getAsLong(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).longValue();
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (Boolean)rv ? 1 : 0;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        // try to convert to a String and then a number
java/org/qore/jni/Hash.java:        return Long.parseLong(String.valueOf(rv));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a float
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public float getAsFloat(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).floatValue();
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (Boolean)rv ? 1 : 0;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        // try to convert to a String and then a number
java/org/qore/jni/Hash.java:        return Float.parseFloat(String.valueOf(rv));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a double
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public double getAsDouble(String key) {
java/org/qore/jni/Hash.java:        Object rv = get(key);
java/org/qore/jni/Hash.java:        if (rv instanceof Number) {
java/org/qore/jni/Hash.java:            return ((Number)rv).doubleValue();
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        if (rv instanceof Boolean) {
java/org/qore/jni/Hash.java:            return (Boolean)rv ? 1 : 0;
java/org/qore/jni/Hash.java:        }
java/org/qore/jni/Hash.java:        // try to convert to a String and then a number
java/org/qore/jni/Hash.java:        return Double.parseDouble(String.valueOf(rv));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns the given key as a String
java/org/qore/jni/Hash.java:    /** Converts the type of the value if possible before returning
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public String getAsString(String key) {
java/org/qore/jni/Hash.java:        return String.valueOf(get(key));
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of zero entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of() {
java/org/qore/jni/Hash.java:        return new Hash();
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of one entry
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of two entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of three entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of four entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of five entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3,
java/org/qore/jni/Hash.java:            String k4, Object v4) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:                put(k4, v4);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of six entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3,
java/org/qore/jni/Hash.java:            String k4, Object v4,
java/org/qore/jni/Hash.java:            String k5, Object v5) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:                put(k4, v4);
java/org/qore/jni/Hash.java:                put(k5, v5);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of seven entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3,
java/org/qore/jni/Hash.java:            String k4, Object v4,
java/org/qore/jni/Hash.java:            String k5, Object v5,
java/org/qore/jni/Hash.java:            String k6, Object v6) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:                put(k4, v4);
java/org/qore/jni/Hash.java:                put(k5, v5);
java/org/qore/jni/Hash.java:                put(k6, v6);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of eight entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3,
java/org/qore/jni/Hash.java:            String k4, Object v4,
java/org/qore/jni/Hash.java:            String k5, Object v5,
java/org/qore/jni/Hash.java:            String k6, Object v6,
java/org/qore/jni/Hash.java:            String k7, Object v7) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:                put(k4, v4);
java/org/qore/jni/Hash.java:                put(k5, v5);
java/org/qore/jni/Hash.java:                put(k6, v6);
java/org/qore/jni/Hash.java:                put(k7, v7);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of nine entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3,
java/org/qore/jni/Hash.java:            String k4, Object v4,
java/org/qore/jni/Hash.java:            String k5, Object v5,
java/org/qore/jni/Hash.java:            String k6, Object v6,
java/org/qore/jni/Hash.java:            String k7, Object v7,
java/org/qore/jni/Hash.java:            String k8, Object v8) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:                put(k4, v4);
java/org/qore/jni/Hash.java:                put(k5, v5);
java/org/qore/jni/Hash.java:                put(k6, v6);
java/org/qore/jni/Hash.java:                put(k7, v7);
java/org/qore/jni/Hash.java:                put(k8, v8);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:    //! Returns a modifiable map of ten entries
java/org/qore/jni/Hash.java:    /** @since jni 2.0
java/org/qore/jni/Hash.java:     */
java/org/qore/jni/Hash.java:    public static Hash of(String k0, Object v0,
java/org/qore/jni/Hash.java:            String k1, Object v1,
java/org/qore/jni/Hash.java:            String k2, Object v2,
java/org/qore/jni/Hash.java:            String k3, Object v3,
java/org/qore/jni/Hash.java:            String k4, Object v4,
java/org/qore/jni/Hash.java:            String k5, Object v5,
java/org/qore/jni/Hash.java:            String k6, Object v6,
java/org/qore/jni/Hash.java:            String k7, Object v7,
java/org/qore/jni/Hash.java:            String k8, Object v8,
java/org/qore/jni/Hash.java:            String k9, Object v9) {
java/org/qore/jni/Hash.java:        return new Hash() {
java/org/qore/jni/Hash.java:            {
java/org/qore/jni/Hash.java:                put(k0, v0);
java/org/qore/jni/Hash.java:                put(k1, v1);
java/org/qore/jni/Hash.java:                put(k2, v2);
java/org/qore/jni/Hash.java:                put(k3, v3);
java/org/qore/jni/Hash.java:                put(k4, v4);
java/org/qore/jni/Hash.java:                put(k5, v5);
java/org/qore/jni/Hash.java:                put(k6, v6);
java/org/qore/jni/Hash.java:                put(k7, v7);
java/org/qore/jni/Hash.java:                put(k8, v8);
java/org/qore/jni/Hash.java:                put(k9, v9);
java/org/qore/jni/Hash.java:            }
java/org/qore/jni/Hash.java:        };
java/org/qore/jni/Hash.java:    }
java/org/qore/jni/Hash.java:}
Class.h://--------------------------------------------------------------------*- C++ -*-
Class.h://
Class.h://  Qore Programming Language
Class.h://
Class.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Class.h://
Class.h://  Permission is hereby granted, free of charge, to any person obtaining a
Class.h://  copy of this software and associated documentation files (the "Software"),
Class.h://  to deal in the Software without restriction, including without limitation
Class.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Class.h://  and/or sell copies of the Software, and to permit persons to whom the
Class.h://  Software is furnished to do so, subject to the following conditions:
Class.h://
Class.h://  The above copyright notice and this permission notice shall be included in
Class.h://  all copies or substantial portions of the Software.
Class.h://
Class.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Class.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Class.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Class.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Class.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Class.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Class.h://  DEALINGS IN THE SOFTWARE.
Class.h://
Class.h://------------------------------------------------------------------------------
Class.h:///
Class.h:/// \file
Class.h:/// \brief Defines the Class class.
Class.h:///
Class.h://------------------------------------------------------------------------------
Class.h:#ifndef QORE_JNI_CLASS_H_
Class.h:#define QORE_JNI_CLASS_H_
Class.h:#include <qore/Qore.h>
Class.h:#include <vector>
Class.h:#include "LocalReference.h"
Class.h:#include "Object.h"
Class.h:#include <classfile_constants.h>
Class.h:namespace jni {
Class.h:class Field;
Class.h:class Method;
Class.h:class BaseMethod;
Class.h:/**
Class.h: * \brief Represents a Java class.
Class.h: */
Class.h:class Class : public ObjectBase, public AbstractQoreClassUserData {
Class.h:private:
Class.h:    DLLLOCAL ~Class();
Class.h:public:
Class.h:    /**
Class.h:     * \brief Constructor.
Class.h:     * \param cls a local reference to a Java class
Class.h:     * \throws JavaException if a global reference cannot be created
Class.h:     */
Class.h:    DLLLOCAL Class(const LocalReference<jclass>& cls) : cls(cls.makeGlobal()), mods(getModifiersIntern()) {
Class.h:        printd(LogLevel, "Class::Class() this: %p cls: %p\n", this, static_cast<jclass>(this->cls));
Class.h:        assert(static_cast<jclass>(this->cls));
Class.h:    }
Class.h:    DLLLOCAL jclass getJavaObject() const override {
Class.h:        return cls;
Class.h:    }
Class.h:    DLLLOCAL LocalReference<jclass> getJavaObjectRef() const {
Class.h:        return cls.toLocal();
Class.h:    }
Class.h:    DLLLOCAL virtual Class* copy() const override {
Class.h:        const_cast<Class*>(this)->ref();
Class.h:        return const_cast<Class*>(this);
Class.h:    }
Class.h:    DLLLOCAL virtual void doDeref() override {
Class.h:        deref();
Class.h:    }
Class.h:    // returns the parent class or nullptr if there is none
Class.h:    DLLLOCAL Class* getSuperClass();
Class.h:    // returns an array of interface classes
Class.h:    DLLLOCAL LocalReference<jobjectArray> getInterfaces();
Class.h:    // returns an array of constructors
Class.h:    DLLLOCAL LocalReference<jobjectArray> getDeclaredConstructors();
Class.h:    // returns an array of methods
Class.h:    DLLLOCAL LocalReference<jobjectArray> getDeclaredMethods();
Class.h:    // returns an arry of fields
Class.h:    DLLLOCAL LocalReference<jobjectArray> getDeclaredFields();
Class.h:    // returns class modifiers as an integer
Class.h:    DLLLOCAL int getModifiers() const {
Class.h:        return mods;
Class.h:    }
Class.h:    DLLLOCAL void trackMethod(BaseMethod* m);
Class.h:    // returns a local reference to the jclass
Class.h:    DLLLOCAL jclass toLocal() {
Class.h:        return cls.toLocal();
Class.h:    }
Class.h:    DLLLOCAL bool isAbstract() const {
Class.h:        return mods & JVM_ACC_ABSTRACT;
Class.h:    }
Class.h:private:
Class.h:    GlobalReference<jclass> cls;
Class.h:    // for tracking Method objects associated with this Class
Class.h:    typedef std::vector<BaseMethod*> mlist_t;
Class.h:    mlist_t mlist;
Class.h:    int mods;
Class.h:    DLLLOCAL int getModifiersIntern() const;
Class.h:};
Class.h:} // namespace jni
Class.h:#endif // QORE_JNI_CLASS_H_
Array.h://--------------------------------------------------------------------*- C++ -*-
Array.h://
Array.h://  Qore Programming Language
Array.h://
Array.h://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
Array.h://
Array.h://  Permission is hereby granted, free of charge, to any person obtaining a
Array.h://  copy of this software and associated documentation files (the "Software"),
Array.h://  to deal in the Software without restriction, including without limitation
Array.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Array.h://  and/or sell copies of the Software, and to permit persons to whom the
Array.h://  Software is furnished to do so, subject to the following conditions:
Array.h://
Array.h://  The above copyright notice and this permission notice shall be included in
Array.h://  all copies or substantial portions of the Software.
Array.h://
Array.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Array.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Array.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Array.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Array.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Array.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Array.h://  DEALINGS IN THE SOFTWARE.
Array.h://
Array.h://------------------------------------------------------------------------------
Array.h:///
Array.h:/// \file
Array.h:/// \brief Defines the Array class.
Array.h:///
Array.h://------------------------------------------------------------------------------
Array.h:#ifndef QORE_JNI_ARRAY_H_
Array.h:#define QORE_JNI_ARRAY_H_
Array.h:#include <qore/Qore.h>
Array.h:#include "LocalReference.h"
Array.h:#include "QoreJniPrivateData.h"
Array.h:#include "Globals.h"
Array.h:#include "Env.h"
Array.h:extern QoreClass* QC_JAVAARRAY;
Array.h:extern qore_classid_t CID_JAVAARRAY;
Array.h:namespace jni {
Array.h:// forward reference
Array.h:class JniExternalProgramData;
Array.h:/**
Array.h: * \brief Represents a Java array instance.
Array.h: */
Array.h:class Array : public QoreJniPrivateData {
Array.h:    public:
Array.h:    /**
Array.h:     * \brief Constructor.
Array.h:     * \param array a local reference to a Java array instance
Array.h:     * \throws JavaException if a global reference cannot be created
Array.h:     */
Array.h:    DLLLOCAL Array(jarray array);
Array.h:    /**
Array.h:     * \brief Constructor
Array.h:     * \param elementClass a local reference to the component class
Array.h:     * \param size the size of the array
Array.h:     */
Array.h:    DLLLOCAL Array(jclass elementClass, int size);
Array.h:    DLLLOCAL ~Array() {
Array.h:        printd(LogLevel, "Array::~Array(), this: %p, object: %p\n", this, jobj.cast<jarray>());
Array.h:    }
Array.h:    DLLLOCAL int64 length() const;
Array.h:    DLLLOCAL QoreValue get(int64 index, QoreProgram* pgm, bool compat_types) const;
Array.h:    DLLLOCAL void set(int64 index, const QoreValue &value, JniExternalProgramData* jpc = nullptr);
Array.h:    DLLLOCAL QoreStringNodeHolder deepToString() const;
Array.h:    DLLLOCAL static void getArgList(ReferenceHolder<QoreListNode>& return_value, Env& env, jarray array,
Array.h:            QoreProgram* pgm, bool varargs = false);
Array.h:    DLLLOCAL static void set(jarray array, Type elementType, jclass elementClass, int64 index,
Array.h:            const QoreValue &value, JniExternalProgramData* jpc = nullptr);
Array.h:    DLLLOCAL static QoreStringNodeHolder deepToString(Env& env, jarray array);
Array.h:    DLLLOCAL static void getList(ReferenceHolder<>& return_value, Env& env, jarray array,
Array.h:            jclass arrayClass, QoreProgram* pgm, bool compat_types = false, bool varargs = false);
Array.h:    DLLLOCAL static QoreValue get(Env& env, jarray array, Type elementType, jclass elementClass, int64 index,
Array.h:            QoreProgram* pgm, bool compat_types);
Array.h:    DLLLOCAL static LocalReference<jarray> getNew(Type elementType, jclass elementClass, jsize size);
Array.h:    DLLLOCAL static LocalReference<jarray> toJava(const QoreListNode* l, size_t start = 0,
Array.h:            JniExternalProgramData* jpc = nullptr);
Array.h:    DLLLOCAL static LocalReference<jarray> toObjectArray(const QoreListNode* l, jclass elementClass,
Array.h:            size_t start = 0, JniExternalProgramData* jpc = nullptr);
Array.h:    DLLLOCAL static LocalReference<jclass> getClassForValue(QoreValue v, JniExternalProgramData* jpc = nullptr);
Array.h:    DLLLOCAL static SimpleRefHolder<BinaryNode> getBinary(Env& env, jarray array);
Array.h:private:
Array.h:    GlobalReference<jclass> elementClass;
Array.h:    Type elementType;
Array.h:};
Array.h:} // namespace jni
Array.h:#endif // QORE_JNI_ARRAY_H_
JniQoreClass.cpp:/* -*- mode: c++; indent-tabs-mode: nil -*- */
JniQoreClass.cpp:/*
JniQoreClass.cpp:    JniQoreClass.h
JniQoreClass.cpp:    Qore Programming Language JNI Module
JniQoreClass.cpp:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
JniQoreClass.cpp:    This library is free software; you can redistribute it and/or
JniQoreClass.cpp:    modify it under the terms of the GNU Lesser General Public
JniQoreClass.cpp:    License as published by the Free Software Foundation; either
JniQoreClass.cpp:    version 2.1 of the License, or (at your option) any later version.
JniQoreClass.cpp:    This library is distributed in the hope that it will be useful,
JniQoreClass.cpp:    but WITHOUT ANY WARRANTY; without even the implied warranty of
JniQoreClass.cpp:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
JniQoreClass.cpp:    Lesser General Public License for more details.
JniQoreClass.cpp:    You should have received a copy of the GNU Lesser General Public
JniQoreClass.cpp:    License along with this library; if not, write to the Free Software
JniQoreClass.cpp:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
JniQoreClass.cpp:*/
JniQoreClass.cpp:#include <qore/Qore.h>
JniQoreClass.cpp:#include <string.h>
JniQoreClass.cpp:#include "defs.h"
JniQoreClass.cpp:#include "Jvm.h"
JniQoreClass.cpp:#include "Env.h"
JniQoreClass.cpp:#include "QoreJniPrivateData.h"
JniQoreClass.cpp:#include "JavaToQore.h"
JniQoreClass.cpp:#include "JniQoreClass.h"
JniQoreClass.cpp:#include "ModifiedUtf8String.h"
JniQoreClass.cpp:#include "QoreJniClassMap.h"
JniQoreClass.cpp:#include <classfile_constants.h>
JniQoreClass.cpp:namespace jni {
JniQoreClass.cpp:type_vec_t JniQoreClass::paramTypeInfo = { stringTypeInfo, boolTypeInfo };
JniQoreClass.cpp:// static method
JniQoreClass.cpp:QoreValue JniQoreClass::memberGate(const QoreMethod& meth, void* m, QoreObject* self, QoreJniPrivateData* jd,
JniQoreClass.cpp:        const QoreListNode* args, q_rt_flags_t rtflags, ExceptionSink* xsink) {
JniQoreClass.cpp:    if (!args || args->size() != 2)
JniQoreClass.cpp:        return QoreValue();
JniQoreClass.cpp:    bool cls_access;
JniQoreClass.cpp:    const QoreStringNode* mname;
JniQoreClass.cpp:    {
JniQoreClass.cpp:        QoreValue qv = args->retrieveEntry(0);
JniQoreClass.cpp:        if (qv.getType() != NT_STRING)
JniQoreClass.cpp:            return QoreValue();
JniQoreClass.cpp:        mname = qv.get<QoreStringNode>();
JniQoreClass.cpp:        qv = args->retrieveEntry(1);
JniQoreClass.cpp:        if (qv.getType() != NT_BOOLEAN)
JniQoreClass.cpp:            return QoreValue();
JniQoreClass.cpp:        cls_access = qv.getAsBool();
JniQoreClass.cpp:    }
JniQoreClass.cpp:    //printd(LogLevel, "JniQoreClass::memberGate: '%s'\n", mname->c_str());
JniQoreClass.cpp:    jobject jobj = jd->getObject();
JniQoreClass.cpp:    try {
JniQoreClass.cpp:        Env env;
JniQoreClass.cpp:        LocalReference<jobject> cls = env.callObjectMethod(jobj, Globals::methodObjectGetClass, nullptr);
JniQoreClass.cpp:        ModifiedUtf8String str(*mname);
JniQoreClass.cpp:        LocalReference<jstring> fname = env.newString(str.c_str());
JniQoreClass.cpp:        std::vector<jvalue> jargs(2);
JniQoreClass.cpp:        jargs[0].l = fname;
JniQoreClass.cpp:        LocalReference<jobject> field = env.callObjectMethod(cls, Globals::methodClassGetDeclaredField, &jargs[0]);
JniQoreClass.cpp:        // check access here
JniQoreClass.cpp:        int mods = env.callIntMethod(field, Globals::methodFieldGetModifiers, nullptr);
JniQoreClass.cpp:        if (mods & JVM_ACC_PROTECTED) {
JniQoreClass.cpp:            if (!cls_access) {
JniQoreClass.cpp:                LocalReference<jstring> clsName =
JniQoreClass.cpp:                    env.callObjectMethod(cls, Globals::methodClassGetName, nullptr).as<jstring>();
JniQoreClass.cpp:                jni::Env::GetStringUtfChars cname(env, clsName);
JniQoreClass.cpp:                xsink->raiseException("JNI-ACCESS-ERROR",
JniQoreClass.cpp:                    "cannot access private (Java 'protected') member '%s' of class '%s'",
JniQoreClass.cpp:                    mname->c_str(), cname.c_str());
JniQoreClass.cpp:                return QoreValue();
JniQoreClass.cpp:            }
JniQoreClass.cpp:        } else if (mods & JVM_ACC_PRIVATE) {
JniQoreClass.cpp:            LocalReference<jstring> clsName =
JniQoreClass.cpp:                env.callObjectMethod(cls, Globals::methodClassGetName, nullptr).as<jstring>();
JniQoreClass.cpp:            jni::Env::GetStringUtfChars cname(env, clsName);
JniQoreClass.cpp:            xsink->raiseException("JNI-ACCESS-ERROR",
JniQoreClass.cpp:                "cannot access private:internal (Java 'private') member '%s' of class '%s'",
JniQoreClass.cpp:                mname->c_str(), cname.c_str());
JniQoreClass.cpp:            return QoreValue();
JniQoreClass.cpp:        }
JniQoreClass.cpp:        // get thread-local compat types flag before setting program ctx from method
JniQoreClass.cpp:        bool compat_types;
JniQoreClass.cpp:        QoreProgram* current_pgm = ::getProgram();
JniQoreClass.cpp:        {
JniQoreClass.cpp:            JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(current_pgm->getExternalData("jni"));
JniQoreClass.cpp:            if (jpc) {
JniQoreClass.cpp:                compat_types = jpc->getCompatTypes();
JniQoreClass.cpp:            } else {
JniQoreClass.cpp:                compat_types = false;
JniQoreClass.cpp:            }
JniQoreClass.cpp:        }
JniQoreClass.cpp:        jargs[0].l = field;
JniQoreClass.cpp:        jargs[1].l = jobj;
JniQoreClass.cpp:        QoreProgram* pgm = meth.getClass()->getProgram();
JniQoreClass.cpp:        if (!pgm) {
JniQoreClass.cpp:            pgm = current_pgm;
JniQoreClass.cpp:        }
JniQoreClass.cpp:        QoreExternalProgramContextHelper qepch(xsink, pgm);
JniQoreClass.cpp:        if (*xsink) {
JniQoreClass.cpp:            return QoreValue();
JniQoreClass.cpp:        }
JniQoreClass.cpp:        JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
JniQoreClass.cpp:        assert(jpc);
JniQoreClass.cpp:        return JavaToQore::convertToQore(env.callStaticObjectMethod(jpc->getDynamicApi(), jpc->getFieldId(),
JniQoreClass.cpp:            &jargs[0]), pgm, compat_types);
JniQoreClass.cpp:    } catch (jni::JavaException& e) {
JniQoreClass.cpp:        e.convert(xsink);
JniQoreClass.cpp:        return QoreValue();
JniQoreClass.cpp:    }
JniQoreClass.cpp:}
JniQoreClass.cpp:}
QoreJdbcStatement.cpp:/* -*- indent-tabs-mode: nil -*- */
QoreJdbcStatement.cpp:/*
QoreJdbcStatement.cpp:    QoreJdbcStatement.cpp
QoreJdbcStatement.cpp:    Qore Programming Language JNI Module
QoreJdbcStatement.cpp:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcStatement.cpp:    This library is free software; you can redistribute it and/or
QoreJdbcStatement.cpp:    modify it under the terms of the GNU Lesser General Public
QoreJdbcStatement.cpp:    License as published by the Free Software Foundation; either
QoreJdbcStatement.cpp:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcStatement.cpp:    This library is distributed in the hope that it will be useful,
QoreJdbcStatement.cpp:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcStatement.cpp:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcStatement.cpp:    Lesser General Public License for more details.
QoreJdbcStatement.cpp:    You should have received a copy of the GNU Lesser General Public
QoreJdbcStatement.cpp:    License along with this library; if not, write to the Free Software
QoreJdbcStatement.cpp:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcStatement.cpp:*/
QoreJdbcStatement.cpp:#include "QoreJdbcStatement.h"
QoreJdbcStatement.cpp:#include "Globals.h"
QoreJdbcStatement.cpp:#include "QoreToJava.h"
QoreJdbcStatement.cpp:#include "JavaToQore.h"
QoreJdbcStatement.cpp:#include <set>
QoreJdbcStatement.cpp:namespace jni {
QoreJdbcStatement.cpp:QoreJdbcColumn::QoreJdbcColumn(std::string&& name, std::string&& qname, jint ctype) : name(name), qname(qname),
QoreJdbcStatement.cpp:        strip(ctype == Globals::typeChar) {
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreJdbcStatement::~QoreJdbcStatement() {
QoreJdbcStatement.cpp:    if (stmt) {
QoreJdbcStatement.cpp:        Env env;
QoreJdbcStatement.cpp:        close(env);
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:bool QoreJdbcStatement::exec(Env& env, ExceptionSink* xsink, const QoreString& qstr, const QoreListNode* args) {
QoreJdbcStatement.cpp:    assert(!stmt);
QoreJdbcStatement.cpp:    // Convert string to required character encoding.
QoreJdbcStatement.cpp:    TempEncodingHelper str(qstr, QCS_UTF8, xsink);
QoreJdbcStatement.cpp:    if (*xsink) {
QoreJdbcStatement.cpp:        return false;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    str.makeTemp();
QoreJdbcStatement.cpp:    if (parse(const_cast<QoreString*>(*str), args, xsink)) {
QoreJdbcStatement.cpp:        return false;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    prepareAndBindStatement(env, xsink, **str);
QoreJdbcStatement.cpp:    return execIntern(env, **str, xsink);
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:void QoreJdbcStatement::prepareAndBindStatement(Env& env, ExceptionSink* xsink, const QoreString& str) {
QoreJdbcStatement.cpp:    prepareStatement(env, str);
QoreJdbcStatement.cpp:    bindQueryArguments(env, xsink);
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:void QoreJdbcStatement::prepareStatement(Env& env, const QoreString& str) {
QoreJdbcStatement.cpp:    assert(!stmt);
QoreJdbcStatement.cpp:    // no exception handling needed; calls must be wrapped in a try/catch block
QoreJdbcStatement.cpp:    std::vector<jvalue> jargs(1);
QoreJdbcStatement.cpp:    LocalReference<jstring> jstr = env.newString(str.c_str());
QoreJdbcStatement.cpp:    jargs[0].l = jstr;
QoreJdbcStatement.cpp:    stmt = env.callObjectMethod(conn->getConnectionObject(), Globals::methodConnectionPrepareStatement, &jargs[0])
QoreJdbcStatement.cpp:        .makeGlobal();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::bindQueryArguments(Env& env, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    if (hasArrayBind()) {
QoreJdbcStatement.cpp:        if (bindInternArray(env, *params, xsink)) {
QoreJdbcStatement.cpp:            return -1;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    } else if (bindIntern(env, *params, xsink)) {
QoreJdbcStatement.cpp:        return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:bool QoreJdbcStatement::execIntern(Env& env, const QoreString& qstr, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    do {
QoreJdbcStatement.cpp:        // check for a lost connection
QoreJdbcStatement.cpp:        try {
QoreJdbcStatement.cpp:            if (do_batch_execute) {
QoreJdbcStatement.cpp:                // ignore return value
QoreJdbcStatement.cpp:                env.callObjectMethod(stmt, Globals::methodPreparedStatementExecuteBatch, nullptr);
QoreJdbcStatement.cpp:                return false;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            return env.callBooleanMethod(stmt, Globals::methodPreparedStatementExecute, nullptr);
QoreJdbcStatement.cpp:        } catch (JavaException& e) {
QoreJdbcStatement.cpp:            LocalReference<jthrowable> throwable = e.save();
QoreJdbcStatement.cpp:            assert(throwable);
QoreJdbcStatement.cpp:            if (env.isInstanceOf(throwable, Globals::classSQLException)) {
QoreJdbcStatement.cpp:                // check if connection is still valid; 1 second timeout
QoreJdbcStatement.cpp:                jvalue jarg;
QoreJdbcStatement.cpp:                jarg.i = 1;
QoreJdbcStatement.cpp:                bool connected = env.callBooleanMethod(conn->getConnectionObject(), Globals::methodConnectionIsValid,
QoreJdbcStatement.cpp:                    &jarg);
QoreJdbcStatement.cpp:                //printd(5, "QoreJdbcStatement::execIntern() connected: %d\n", connected);
QoreJdbcStatement.cpp:                if (!connected && !reconnectLostConnection(env, xsink)) {
QoreJdbcStatement.cpp:                    assert(!*xsink);
QoreJdbcStatement.cpp:                    // repeat statement execution after reconnection when not in a transaction
QoreJdbcStatement.cpp:                    prepareAndBindStatement(env, xsink, qstr);
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            e.restore(throwable.release());
QoreJdbcStatement.cpp:            throw;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    } while (false);
QoreJdbcStatement.cpp:    return false;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:void QoreJdbcStatement::close(Env& env_obj) {
QoreJdbcStatement.cpp:    // not using the Env wrapper because we don't want any C++ exceptions here
QoreJdbcStatement.cpp:    JNIEnv* env = *env_obj;
QoreJdbcStatement.cpp:    bool active_java_exception = env->ExceptionCheck();
QoreJdbcStatement.cpp:    if (rs) {
QoreJdbcStatement.cpp:        env->CallVoidMethodA(rs, Globals::methodResultSetClose, nullptr);
QoreJdbcStatement.cpp:        rs = nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    if (stmt) {
QoreJdbcStatement.cpp:        env->CallVoidMethodA(stmt, Globals::methodPreparedStatementClose, nullptr);
QoreJdbcStatement.cpp:        stmt = nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    if (!active_java_exception && env->ExceptionCheck()) {
QoreJdbcStatement.cpp:        throw new JavaException;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:void QoreJdbcStatement::reset(Env& env) {
QoreJdbcStatement.cpp:    close(env);
QoreJdbcStatement.cpp:    bind_size = 0;
QoreJdbcStatement.cpp:    array_bind_size = 0;
QoreJdbcStatement.cpp:    do_batch_execute = false;
QoreJdbcStatement.cpp:    params = nullptr;
QoreJdbcStatement.cpp:    cvec.clear();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::reconnectLostConnection(Env& env, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    if (conn->getDatasource()->activeTransaction()) {
QoreJdbcStatement.cpp:        printd(0, "QoreJdbcStatement::reconnectLostConnection() connection lost while in a transaction\n");
QoreJdbcStatement.cpp:        xsink->raiseException("ODBC-TRANSACTION-ERROR", "connection to database server lost while in a "
QoreJdbcStatement.cpp:            "transaction; transaction has been lost");
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    // Reset current statement state while the driver-specific context data is still present
QoreJdbcStatement.cpp:    close(env);
QoreJdbcStatement.cpp:    // Free and reset statement states for all active statements while the driver-specific context data is still
QoreJdbcStatement.cpp:    // present
QoreJdbcStatement.cpp:    conn->getDatasource()->connectionLost(xsink);
QoreJdbcStatement.cpp:    // Disconnect first
QoreJdbcStatement.cpp:    conn->close(env);
QoreJdbcStatement.cpp:    // try to reconnect
QoreJdbcStatement.cpp:    if (conn->reconnect(env, xsink)) {
QoreJdbcStatement.cpp:        // Free state completely.
QoreJdbcStatement.cpp:        reset(env);
QoreJdbcStatement.cpp:        // Reconnect failed; marking connection as closed
QoreJdbcStatement.cpp:        // The following call will close any open statements and then the datasource
QoreJdbcStatement.cpp:        conn->getDatasource()->connectionAborted();
QoreJdbcStatement.cpp:        return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    // Don't execute again if any exceptions have occured
QoreJdbcStatement.cpp:    if (*xsink) {
QoreJdbcStatement.cpp:        // Close all statements and remove private data but leave datasource open
QoreJdbcStatement.cpp:        conn->getDatasource()->connectionRecovered(xsink);
QoreJdbcStatement.cpp:        return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::describeResultSet(Env& env, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    assert(rs);
QoreJdbcStatement.cpp:    LocalReference<jobject> info = env.callObjectMethod(rs, Globals::methodResultSetGetMetaData,
QoreJdbcStatement.cpp:        nullptr);
QoreJdbcStatement.cpp:    assert(info);
QoreJdbcStatement.cpp:    jint count = env.callIntMethod(info, Globals::methodResultSetMetaDataGetColumnCount, nullptr);
QoreJdbcStatement.cpp:    //printd(5, "QoreJdbcStatement::describeResultSet() column count: %d\n", count);
QoreJdbcStatement.cpp:    if (!count) {
QoreJdbcStatement.cpp:        return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    assert(cvec.empty());
QoreJdbcStatement.cpp:    cvec.reserve(count);
QoreJdbcStatement.cpp:    // detect duplicate column names in the output
QoreJdbcStatement.cpp:    typedef std::set<std::string> strset_t;
QoreJdbcStatement.cpp:    strset_t strset;
QoreJdbcStatement.cpp:    ReferenceHolder<QoreHashNode> rv(new QoreHashNode(autoTypeInfo), xsink);
QoreJdbcStatement.cpp:    for (jint i = 0; i < count; ++i) {
QoreJdbcStatement.cpp:        jvalue jarg;
QoreJdbcStatement.cpp:        jarg.i = i + 1;
QoreJdbcStatement.cpp:        // NOTE: if we use ResultSetMetaData.getColumnName() it will ignore column aliases
QoreJdbcStatement.cpp:        LocalReference<jstring> cname = env.callObjectMethod(info, Globals::methodResultSetMetaDataGetColumnLabel,
QoreJdbcStatement.cpp:            &jarg).as<jstring>();
QoreJdbcStatement.cpp:        Env::GetStringUtfChars name(env, cname);
QoreJdbcStatement.cpp:        // convert to lower case
QoreJdbcStatement.cpp:        QoreString qname(name.c_str());
QoreJdbcStatement.cpp:        qname.tolwr();
QoreJdbcStatement.cpp:        std::string unique_qname;
QoreJdbcStatement.cpp:        strset_t::iterator it = strset.find(qname.c_str());
QoreJdbcStatement.cpp:        if (it == strset.end()) {
QoreJdbcStatement.cpp:            unique_qname = qname.c_str();
QoreJdbcStatement.cpp:        } else {
QoreJdbcStatement.cpp:            // Find a unique column name.
QoreJdbcStatement.cpp:            unsigned num = 1;
QoreJdbcStatement.cpp:            while (true) {
QoreJdbcStatement.cpp:                QoreStringMaker tmp("%s_%d", name.c_str(), num);
QoreJdbcStatement.cpp:                it = strset.find(tmp.c_str());
QoreJdbcStatement.cpp:                if (it == strset.end()) {
QoreJdbcStatement.cpp:                    unique_qname = tmp.c_str();
QoreJdbcStatement.cpp:                    break;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                ++num;
QoreJdbcStatement.cpp:                continue;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        strset.insert(it, unique_qname);
QoreJdbcStatement.cpp:        // get column type
QoreJdbcStatement.cpp:        jint ctype = env.callIntMethod(info, Globals::methodResultSetMetaDataGetColumnType, &jarg);
QoreJdbcStatement.cpp:        cvec.emplace_back(QoreJdbcColumn(qname.c_str(), std::move(unique_qname), ctype));
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:bool QoreJdbcStatement::next(Env& env) {
QoreJdbcStatement.cpp:    assert(rs);
QoreJdbcStatement.cpp:    return env.callBooleanMethod(rs, Globals::methodResultSetNext, nullptr);
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::acquireResultSet(Env& env, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    assert(!rs);
QoreJdbcStatement.cpp:    rs = env.callObjectMethod(stmt, Globals::methodPreparedStatementGetResultSet, nullptr);
QoreJdbcStatement.cpp:    if (!rs) {
QoreJdbcStatement.cpp:        xsink->raiseException("JDBC-RESULTSET-ERROR", "no result set available from query");
QoreJdbcStatement.cpp:        return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreHashNode* QoreJdbcStatement::getOutputHash(Env& env, ExceptionSink* xsink, bool empty_hash_if_nothing,
QoreJdbcStatement.cpp:        int max_rows) {
QoreJdbcStatement.cpp:    if (acquireResultSet(env, xsink) || describeResultSet(env, xsink)) {
QoreJdbcStatement.cpp:        return nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return getOutputHashIntern(env, xsink, empty_hash_if_nothing, max_rows);
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:void QoreJdbcStatement::populateOutputHash(QoreHashNode& h, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    for (auto& i : cvec) {
QoreJdbcStatement.cpp:        h.setKeyValue(i.qname.c_str(), new QoreListNode(autoTypeInfo), xsink);
QoreJdbcStatement.cpp:        assert(!*xsink);
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:typedef std::vector<QoreListNode*> lvec_t;
QoreJdbcStatement.cpp:class QoreListArray {
QoreJdbcStatement.cpp:public:
QoreJdbcStatement.cpp:    DLLLOCAL QoreListArray(ExceptionSink* xsink, cvec_t& cvec) : xsink(xsink), cvec(cvec) {
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    DLLLOCAL ~QoreListArray() {
QoreJdbcStatement.cpp:        for (auto& i : l) {
QoreJdbcStatement.cpp:            i->deref(xsink);
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        l.clear();
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    DLLLOCAL void populate() {
QoreJdbcStatement.cpp:        assert(l.empty());
QoreJdbcStatement.cpp:        for (size_t i = 0, e = cvec.size(); i < e; ++i) {
QoreJdbcStatement.cpp:            l.push_back(new QoreListNode(autoTypeInfo));
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    DLLLOCAL lvec_t& get() {
QoreJdbcStatement.cpp:        return l;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    DLLLOCAL QoreHashNode* getHash() {
QoreJdbcStatement.cpp:        ReferenceHolder<QoreHashNode> rv(new QoreHashNode(autoTypeInfo), xsink);
QoreJdbcStatement.cpp:        if (!l.empty()) {
QoreJdbcStatement.cpp:            for (size_t i = 0, e = cvec.size(); i < e; ++i) {
QoreJdbcStatement.cpp:                rv->setKeyValue(cvec[i].qname.c_str(), l[i], xsink);
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            l.clear();
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        return rv.release();
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:protected:
QoreJdbcStatement.cpp:    lvec_t l;
QoreJdbcStatement.cpp:    ExceptionSink* xsink;
QoreJdbcStatement.cpp:    cvec_t& cvec;
QoreJdbcStatement.cpp:};
QoreJdbcStatement.cpp:QoreHashNode* QoreJdbcStatement::getOutputHashIntern(Env& env, ExceptionSink* xsink, bool empty_hash_if_nothing,
QoreJdbcStatement.cpp:        int max_rows) {
QoreJdbcStatement.cpp:    // we have to populate the lists and then assign the hash in case we have Java objects returned for DB values
QoreJdbcStatement.cpp:    QoreListArray l(xsink, cvec);
QoreJdbcStatement.cpp:    size_t row_count = 0;
QoreJdbcStatement.cpp:    while (true) {
QoreJdbcStatement.cpp:        // get next row
QoreJdbcStatement.cpp:        if (!next(env)) {
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        if (!row_count) {
QoreJdbcStatement.cpp:            l.populate();
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        //! get column data
QoreJdbcStatement.cpp:        for (jint c = 0, e = (jint)cvec.size(); c < e; ++c) {
QoreJdbcStatement.cpp:            QoreJdbcColumn& col = cvec[c];
QoreJdbcStatement.cpp:            ValueHolder val(getColumnValue(env, c + 1, col, xsink), xsink);
QoreJdbcStatement.cpp:            if (*xsink) {
QoreJdbcStatement.cpp:                return nullptr;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            l.get()[c]->push(val.release(), xsink);
QoreJdbcStatement.cpp:            assert(!*xsink);
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        ++row_count;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    if (!row_count && !empty_hash_if_nothing) {
QoreJdbcStatement.cpp:        l.populate();
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return l.getHash();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreListNode* QoreJdbcStatement::getOutputList(Env& env, ExceptionSink* xsink, int max_rows) {
QoreJdbcStatement.cpp:    if (acquireResultSet(env, xsink) || describeResultSet(env, xsink)) {
QoreJdbcStatement.cpp:        return nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return getOutputListIntern(env, xsink, max_rows);
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreListNode* QoreJdbcStatement::getOutputListIntern(Env& env, ExceptionSink* xsink, int max_rows) {
QoreJdbcStatement.cpp:    ReferenceHolder<QoreListNode> l(new QoreListNode(autoTypeInfo), xsink);
QoreJdbcStatement.cpp:    int rowCount = 0;
QoreJdbcStatement.cpp:    while (true) {
QoreJdbcStatement.cpp:        // make sure there is at least one row
QoreJdbcStatement.cpp:        if (!next(env)) {
QoreJdbcStatement.cpp:            // if not, return NOTHING
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        ReferenceHolder<QoreHashNode> h(getSingleRowIntern(env, xsink), xsink);
QoreJdbcStatement.cpp:        if (!h) {
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        l->push(h.release(), xsink);
QoreJdbcStatement.cpp:        ++rowCount;
QoreJdbcStatement.cpp:        if (max_rows > 0 && rowCount == max_rows) {
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return l.release();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreHashNode* QoreJdbcStatement::getSingleRow(Env& env, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    assert(!rs);
QoreJdbcStatement.cpp:    rs = env.callObjectMethod(stmt, Globals::methodPreparedStatementGetResultSet, nullptr);
QoreJdbcStatement.cpp:    if (!rs) {
QoreJdbcStatement.cpp:        return nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    // make sure there is at least one row
QoreJdbcStatement.cpp:    if (!next(env)) {
QoreJdbcStatement.cpp:        // if not, return NOTHING
QoreJdbcStatement.cpp:        return nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    if (describeResultSet(env, xsink)) {
QoreJdbcStatement.cpp:        return nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    ReferenceHolder<QoreHashNode> rv(getSingleRowIntern(env, xsink), xsink);
QoreJdbcStatement.cpp:    // make sure there's not another row
QoreJdbcStatement.cpp:    if (next(env)) {
QoreJdbcStatement.cpp:        xsink->raiseException("JDBC-SELECT-ROW-ERROR", "SQL passed to selectRow() returned more than 1 row");
QoreJdbcStatement.cpp:        return nullptr;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return rv.release();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreHashNode* QoreJdbcStatement::getSingleRowIntern(Env& env, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    assert(rs);
QoreJdbcStatement.cpp:    // get the row to return
QoreJdbcStatement.cpp:    ReferenceHolder<QoreHashNode> rv(new QoreHashNode(autoTypeInfo), xsink);
QoreJdbcStatement.cpp:    jint c = 0;
QoreJdbcStatement.cpp:    for (auto& col : cvec) {
QoreJdbcStatement.cpp:        ValueHolder val(getColumnValue(env, c + 1, col, xsink), xsink);
QoreJdbcStatement.cpp:        if (*xsink) {
QoreJdbcStatement.cpp:            return nullptr;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        HashAssignmentHelper hah(**rv, col.qname.c_str());
QoreJdbcStatement.cpp:        hah.assign(val.release(), xsink);
QoreJdbcStatement.cpp:        assert(!*xsink);
QoreJdbcStatement.cpp:        ++c;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return rv.release();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:QoreValue QoreJdbcStatement::getColumnValue(Env& env, int column, QoreJdbcColumn& col, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    // get column value for this row
QoreJdbcStatement.cpp:    jvalue jarg;
QoreJdbcStatement.cpp:    jarg.i = column;
QoreJdbcStatement.cpp:    LocalReference<jobject> val = env.callObjectMethod(rs, Globals::methodResultSetGetObject, &jarg);
QoreJdbcStatement.cpp:    if (!val) {
QoreJdbcStatement.cpp:        return &Null;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    // return Qore value
QoreJdbcStatement.cpp:    ValueHolder rv(JavaToQore::convertToQore(val.release(), conn->getProgram(), false, conn->getNumericOption()),
QoreJdbcStatement.cpp:        xsink);
QoreJdbcStatement.cpp:    // strip trailing spaces in CHAR columns if necessary
QoreJdbcStatement.cpp:    if (col.strip && rv->getType() == NT_STRING) {
QoreJdbcStatement.cpp:        rv->get<QoreStringNode>()->trim_trailing(' ');
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return rv.release();
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::rowsAffected(Env& env) {
QoreJdbcStatement.cpp:    return env.callIntMethod(stmt, Globals::methodPreparedStatementGetUpdateCount, nullptr);
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::parse(QoreString* str, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    char quote = 0;
QoreJdbcStatement.cpp:    const char *p = str->c_str();
QoreJdbcStatement.cpp:    QoreString tmp;
QoreJdbcStatement.cpp:    int index = 0;
QoreJdbcStatement.cpp:    SQLCommentType comment = ESCT_NONE;
QoreJdbcStatement.cpp:    params = nullptr;
QoreJdbcStatement.cpp:    bind_size = 0;
QoreJdbcStatement.cpp:    while (*p) {
QoreJdbcStatement.cpp:        if (!quote) {
QoreJdbcStatement.cpp:            if (comment == ESCT_NONE) {
QoreJdbcStatement.cpp:                if ((*p) == '-' && (*(p+1)) == '-') {
QoreJdbcStatement.cpp:                    comment = ESCT_LINE;
QoreJdbcStatement.cpp:                    p += 2;
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                if ((*p) == '/' && (*(p+1)) == '*') {
QoreJdbcStatement.cpp:                    comment = ESCT_BLOCK;
QoreJdbcStatement.cpp:                    p += 2;
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:            } else {
QoreJdbcStatement.cpp:                if (comment == ESCT_LINE) {
QoreJdbcStatement.cpp:                    if ((*p) == '\n' || ((*p) == '\r')) {
QoreJdbcStatement.cpp:                        comment = ESCT_NONE;
QoreJdbcStatement.cpp:                    }
QoreJdbcStatement.cpp:                    ++p;
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                assert(comment == ESCT_BLOCK);
QoreJdbcStatement.cpp:                if ((*p) == '*' && (*(p+1)) == '/') {
QoreJdbcStatement.cpp:                    comment = ESCT_NONE;
QoreJdbcStatement.cpp:                    p += 2;
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                ++p;
QoreJdbcStatement.cpp:                continue;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            if ((*p) == '%' && (p == str->c_str() || !isalnum(*(p-1)))) { // Found value marker.
QoreJdbcStatement.cpp:                int offset = p - str->c_str();
QoreJdbcStatement.cpp:                ++p;
QoreJdbcStatement.cpp:                QoreValue v = args ? args->retrieveEntry(index++) : QoreValue();
QoreJdbcStatement.cpp:                if ((*p) == 'd') {
QoreJdbcStatement.cpp:                    DBI_concat_numeric(&tmp, v);
QoreJdbcStatement.cpp:                    str->replace(offset, 2, tmp.c_str());
QoreJdbcStatement.cpp:                    p = str->c_str() + offset + tmp.strlen();
QoreJdbcStatement.cpp:                    tmp.clear();
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                if ((*p) == 's') {
QoreJdbcStatement.cpp:                    if (DBI_concat_string(&tmp, v, xsink)) {
QoreJdbcStatement.cpp:                        return -1;
QoreJdbcStatement.cpp:                    }
QoreJdbcStatement.cpp:                    str->replace(offset, 2, tmp.c_str());
QoreJdbcStatement.cpp:                    p = str->c_str() + offset + tmp.strlen();
QoreJdbcStatement.cpp:                    tmp.clear();
QoreJdbcStatement.cpp:                    continue;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                if ((*p) != 'v') {
QoreJdbcStatement.cpp:                    xsink->raiseException("JDBC-PARSE-ERROR", "invalid value specification (expecting '%%v' or "
QoreJdbcStatement.cpp:                        "'%%d', got %%%c)", *p);
QoreJdbcStatement.cpp:                    return -1;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                ++p;
QoreJdbcStatement.cpp:                if (isalpha(*p)) {
QoreJdbcStatement.cpp:                    xsink->raiseException("JDBC-PARSE-ERROR", "invalid value specification (expecting '%%v' or "
QoreJdbcStatement.cpp:                        "'%%d', got %%v%c*)", *p);
QoreJdbcStatement.cpp:                    return -1;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                str->replace(offset, 2, "?");
QoreJdbcStatement.cpp:                p = str->c_str() + offset + 1;
QoreJdbcStatement.cpp:                ++bind_size;
QoreJdbcStatement.cpp:                if (!params) {
QoreJdbcStatement.cpp:                    params = new QoreListNode(autoTypeInfo);
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                params->push(v.refSelf(), xsink);
QoreJdbcStatement.cpp:                continue;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            // Allow escaping of '%' characters.
QoreJdbcStatement.cpp:            if ((*p) == '\\' && (*(p+1) == ':' || *(p+1) == '%')) {
QoreJdbcStatement.cpp:                str->splice(p - str->c_str(), 1, xsink);
QoreJdbcStatement.cpp:                p += 2;
QoreJdbcStatement.cpp:                continue;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        if (((*p) == '\'') || ((*p) == '\"')) {
QoreJdbcStatement.cpp:            if (!quote) {
QoreJdbcStatement.cpp:                quote = *p;
QoreJdbcStatement.cpp:            } else if (quote == (*p)) {
QoreJdbcStatement.cpp:                quote = 0;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            ++p;
QoreJdbcStatement.cpp:            continue;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        ++p;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:size_t QoreJdbcStatement::findArraySizeOfArgs(const QoreListNode* args) const {
QoreJdbcStatement.cpp:    size_t count = args ? args->size() : 0;
QoreJdbcStatement.cpp:    for (unsigned int i = 0; i < count; ++i) {
QoreJdbcStatement.cpp:        QoreValue arg = args->retrieveEntry(i);
QoreJdbcStatement.cpp:        qore_type_t ntype = arg.getType();
QoreJdbcStatement.cpp:        if (ntype == NT_LIST) {
QoreJdbcStatement.cpp:            return arg.get<const QoreListNode>()->size();
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::bindIntern(Env& env, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    size_t count = args ? args->size() : 0;
QoreJdbcStatement.cpp:    // ignore excess arguments
QoreJdbcStatement.cpp:    if (count > bind_size) {
QoreJdbcStatement.cpp:        count = bind_size;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    for (unsigned int i = 0; i < count; ++i) {
QoreJdbcStatement.cpp:        QoreValue arg = args->retrieveEntry(i);
QoreJdbcStatement.cpp:        if (bindParamSingleValue(env, i + 1, arg, xsink)) {
QoreJdbcStatement.cpp:            return -1;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    // bind excess positions with NULL
QoreJdbcStatement.cpp:    for (unsigned i = count; i < bind_size; ++i) {
QoreJdbcStatement.cpp:        if (bindParamSingleValue(env, i + 1, QoreValue(), xsink)) {
QoreJdbcStatement.cpp:            return -1;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::bindParamSingleValue(Env& env, int column, QoreValue arg, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    std::vector<jvalue> jargs(2);
QoreJdbcStatement.cpp:    jargs[0].i = column;
QoreJdbcStatement.cpp:    switch (arg.getType()) {
QoreJdbcStatement.cpp:        case NT_NULL:
QoreJdbcStatement.cpp:        case NT_NOTHING: {
QoreJdbcStatement.cpp:            jargs[1].i = Globals::typeNull;
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetNull, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_INT: {
QoreJdbcStatement.cpp:            int64 i = arg.getAsBigInt();
QoreJdbcStatement.cpp:            if (i <= 127 && i >= -128) {
QoreJdbcStatement.cpp:                jargs[1].b = (int8_t)i;
QoreJdbcStatement.cpp:                env.callVoidMethod(stmt, Globals::methodPreparedStatementSetByte, &jargs[0]);
QoreJdbcStatement.cpp:            } else if (i <= 32767 && i >= -32768) {
QoreJdbcStatement.cpp:                jargs[1].s = (int16_t)i;
QoreJdbcStatement.cpp:                env.callVoidMethod(stmt, Globals::methodPreparedStatementSetShort, &jargs[0]);
QoreJdbcStatement.cpp:            } else if (i <= 2147483647 && i >= -2147483648) {
QoreJdbcStatement.cpp:                jargs[1].i = (int32_t)i;
QoreJdbcStatement.cpp:                env.callVoidMethod(stmt, Globals::methodPreparedStatementSetInt, &jargs[0]);
QoreJdbcStatement.cpp:            } else {
QoreJdbcStatement.cpp:                jargs[1].j = i;
QoreJdbcStatement.cpp:                env.callVoidMethod(stmt, Globals::methodPreparedStatementSetLong, &jargs[0]);
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_FLOAT: {
QoreJdbcStatement.cpp:            jargs[1].d = arg.getAsFloat();
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetDouble, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_BOOLEAN: {
QoreJdbcStatement.cpp:            jargs[1].z = arg.getAsBool();
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetBoolean, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_STRING: {
QoreJdbcStatement.cpp:            LocalReference<jstring> jstr = env.newString(arg.get<const QoreStringNode>()->c_str());
QoreJdbcStatement.cpp:            jargs[1].l = jstr;
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetString, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_BINARY: {
QoreJdbcStatement.cpp:            LocalReference<jbyteArray> array = QoreToJava::makeByteArray(env, *arg.get<const BinaryNode>());
QoreJdbcStatement.cpp:            jargs[1].l = array;
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetBytes, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_DATE: {
QoreJdbcStatement.cpp:            const DateTimeNode* dt = arg.get<const DateTimeNode>();
QoreJdbcStatement.cpp:            jvalue jarg;
QoreJdbcStatement.cpp:            int64 epoch_s = dt->getEpochSecondsUTC();
QoreJdbcStatement.cpp:            int us = dt->getMicrosecond();
QoreJdbcStatement.cpp:            // set milliseconds from seconds value
QoreJdbcStatement.cpp:            jarg.j = epoch_s * 1000;
QoreJdbcStatement.cpp:            LocalReference<jobject> ts = env.newObject(Globals::classTimestamp, Globals::ctorTimestamp, &jarg);
QoreJdbcStatement.cpp:            // set nanoseconds
QoreJdbcStatement.cpp:            jint ns = us * 1000;
QoreJdbcStatement.cpp:            jarg.i = ns;
QoreJdbcStatement.cpp:            env.callVoidMethod(ts, Globals::methodTimestampSetNanos, &jarg);
QoreJdbcStatement.cpp:            // bind timestamp value
QoreJdbcStatement.cpp:            jargs[1].l = ts;
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetTimestamp, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        case NT_NUMBER: {
QoreJdbcStatement.cpp:            LocalReference<jobject> num = QoreToJava::makeBigDecimal(env, *arg.get<const QoreNumberNode>());
QoreJdbcStatement.cpp:            jargs[1].l = num;
QoreJdbcStatement.cpp:            env.callVoidMethod(stmt, Globals::methodPreparedStatementSetBigDecimal, &jargs[0]);
QoreJdbcStatement.cpp:            break;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        default:
QoreJdbcStatement.cpp:            xsink->raiseException("JDBC-BIND-ERROR", "do not know how to bind arguments of type '%s'",
QoreJdbcStatement.cpp:                arg.getFullTypeName());
QoreJdbcStatement.cpp:            return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::bindInternArray(Env& env, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    // Check that enough parameters were passed for binding.
QoreJdbcStatement.cpp:    size_t count = args ? args->size() : 0;
QoreJdbcStatement.cpp:    if (bind_size != count) {
QoreJdbcStatement.cpp:        xsink->raiseException("JDBC-BIND-ERROR",
QoreJdbcStatement.cpp:            "mismatch between the parameter list size and number of parameters in the SQL command; %lu "
QoreJdbcStatement.cpp:            "required, %lu passed", bind_size, args->size());
QoreJdbcStatement.cpp:        return -1;
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return bindInternArrayBatch(env, args, xsink);
QoreJdbcStatement.cpp:#if 0
QoreJdbcStatement.cpp:    if (conn->areArraysSupported(env)) {
QoreJdbcStatement.cpp:        return bindInternArrayNative(env, args, xsink);
QoreJdbcStatement.cpp:    } else {
QoreJdbcStatement.cpp:        return bindInternArrayBatch(env, args, xsink);
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:#endif
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:#if 0
QoreJdbcStatement.cpp:const char* QoreJdbcStatement::getArrayBindType(const QoreListNode* l) const {
QoreJdbcStatement.cpp:    ConstListIterator i(l);
QoreJdbcStatement.cpp:    while (i.next()) {
QoreJdbcStatement.cpp:        switch (i.getValue().getType()) {
QoreJdbcStatement.cpp:            case NT_NOTHING:
QoreJdbcStatement.cpp:            case NT_NULL:
QoreJdbcStatement.cpp:                break;
QoreJdbcStatement.cpp:            case NT_INT:
QoreJdbcStatement.cpp:                return "int";
QoreJdbcStatement.cpp:            case NT_FLOAT:
QoreJdbcStatement.cpp:                return "double";
QoreJdbcStatement.cpp:            case NT_NUMBER:
QoreJdbcStatement.cpp:                return "numeric";
QoreJdbcStatement.cpp:            case NT_STRING:
QoreJdbcStatement.cpp:                return "varchar";
QoreJdbcStatement.cpp:            case NT_BOOLEAN:
QoreJdbcStatement.cpp:                return "boolean";
QoreJdbcStatement.cpp:            case NT_DATE:
QoreJdbcStatement.cpp:                return "timestamp";
QoreJdbcStatement.cpp:            case NT_BINARY:
QoreJdbcStatement.cpp:                return "blob";
QoreJdbcStatement.cpp:            default:
QoreJdbcStatement.cpp:                return i.getValue().getTypeName();
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return "null";
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:int QoreJdbcStatement::bindInternArrayNative(Env& env, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    size_t count = args ? args->size() : 0;
QoreJdbcStatement.cpp:    for (unsigned int i = 0; i < count; ++i) {
QoreJdbcStatement.cpp:        QoreValue arg = args->retrieveEntry(i);
QoreJdbcStatement.cpp:        if (arg.getType() != NT_LIST) {
QoreJdbcStatement.cpp:            if (bindParamSingleValue(env, i + 1, arg, xsink)) {
QoreJdbcStatement.cpp:                return -1;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            continue;
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        const char* bind_type = getArrayBindType(arg.get<const QoreListNode>());
QoreJdbcStatement.cpp:        printd(0, "QoreJdbcStatement::bindInternArray() binding array of SQL type '%s'\n", bind_type);
QoreJdbcStatement.cpp:        std::vector<jvalue> jargs(2);
QoreJdbcStatement.cpp:        LocalReference<jstring> jurl = env.newString(bind_type);
QoreJdbcStatement.cpp:        jargs[0].l = jurl;
QoreJdbcStatement.cpp:        LocalReference<jobject> array_arg = QoreToJava::toAnyObject(env, arg, conn->getQoreJniContext());
QoreJdbcStatement.cpp:        jargs[1].l = array_arg;
QoreJdbcStatement.cpp:        LocalReference<jobject> array = env.callObjectMethod(conn->getConnectionObject(),
QoreJdbcStatement.cpp:            Globals::methodConnectionCreateArrayOf, &jargs[0]);
QoreJdbcStatement.cpp:        jargs[0].l = array;
QoreJdbcStatement.cpp:        env.callVoidMethod(stmt, Globals::methodPreparedStatementSetArray, &jargs[0]);
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:#endif
QoreJdbcStatement.cpp:int QoreJdbcStatement::bindInternArrayBatch(Env& env, const QoreListNode* args, ExceptionSink* xsink) {
QoreJdbcStatement.cpp:    do_batch_execute = true;
QoreJdbcStatement.cpp:    size_t list_size = findArraySizeOfArgs(args);
QoreJdbcStatement.cpp:    size_t arg_count = args ? args->size() : 0;
QoreJdbcStatement.cpp:    for (size_t i = 0; i < list_size; ++i) {
QoreJdbcStatement.cpp:        for (unsigned int j = 0; j < arg_count; ++j) {
QoreJdbcStatement.cpp:            QoreValue arg = args->retrieveEntry(j);
QoreJdbcStatement.cpp:            // get value to bind from the list if necessary
QoreJdbcStatement.cpp:            if (arg.getType() == NT_LIST) {
QoreJdbcStatement.cpp:                const QoreListNode* l = arg.get<const QoreListNode>();
QoreJdbcStatement.cpp:                if (l->size() != list_size) {
QoreJdbcStatement.cpp:                    xsink->raiseException("JDBC-BIND-ERROR", "the array size for bind argument %d (starting from 1) "
QoreJdbcStatement.cpp:                        "is %zu which is inconsistent with the detected array size %zu.  This is an error, because "
QoreJdbcStatement.cpp:                        "all array bind arguments must have the same array / list size.", (int)j, l->size(),
QoreJdbcStatement.cpp:                        list_size);
QoreJdbcStatement.cpp:                    return -1;
QoreJdbcStatement.cpp:                }
QoreJdbcStatement.cpp:                arg = l->retrieveEntry(i);
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:            if (bindParamSingleValue(env, j + 1, arg, xsink)) {
QoreJdbcStatement.cpp:                return -1;
QoreJdbcStatement.cpp:            }
QoreJdbcStatement.cpp:        }
QoreJdbcStatement.cpp:        env.callVoidMethod(stmt, Globals::methodPreparedStatementAddBatch, nullptr);
QoreJdbcStatement.cpp:    }
QoreJdbcStatement.cpp:    return 0;
QoreJdbcStatement.cpp:}
QoreJdbcStatement.cpp:}
InvocationHandler.h://--------------------------------------------------------------------*- C++ -*-
InvocationHandler.h://
InvocationHandler.h://  Qore Programming Language
InvocationHandler.h://
InvocationHandler.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
InvocationHandler.h://
InvocationHandler.h://  Permission is hereby granted, free of charge, to any person obtaining a
InvocationHandler.h://  copy of this software and associated documentation files (the "Software"),
InvocationHandler.h://  to deal in the Software without restriction, including without limitation
InvocationHandler.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
InvocationHandler.h://  and/or sell copies of the Software, and to permit persons to whom the
InvocationHandler.h://  Software is furnished to do so, subject to the following conditions:
InvocationHandler.h://
InvocationHandler.h://  The above copyright notice and this permission notice shall be included in
InvocationHandler.h://  all copies or substantial portions of the Software.
InvocationHandler.h://
InvocationHandler.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
InvocationHandler.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
InvocationHandler.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
InvocationHandler.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
InvocationHandler.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
InvocationHandler.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
InvocationHandler.h://  DEALINGS IN THE SOFTWARE.
InvocationHandler.h://
InvocationHandler.h://------------------------------------------------------------------------------
InvocationHandler.h:///
InvocationHandler.h:/// \file
InvocationHandler.h:/// \brief TODO file description
InvocationHandler.h:///
InvocationHandler.h://------------------------------------------------------------------------------
InvocationHandler.h:#ifndef QORE_JNI_INVOCATIONHANDLER_H_
InvocationHandler.h:#define QORE_JNI_INVOCATIONHANDLER_H_
InvocationHandler.h:#include <memory>
InvocationHandler.h://#include "Object.h"
InvocationHandler.h:#include "QoreJniPrivateData.h"
InvocationHandler.h:#include "Dispatcher.h"
InvocationHandler.h:extern QoreClass* QC_QOREINVOCATIONHANDLER;
InvocationHandler.h:extern qore_classid_t CID_QOREINVOCATIONHANDLER;
InvocationHandler.h:namespace jni {
InvocationHandler.h:class InvocationHandler : public QoreJniPrivateData {
InvocationHandler.h:public:
InvocationHandler.h:   InvocationHandler(std::unique_ptr<Dispatcher> dispatcher);
InvocationHandler.h:   InvocationHandler(const ResolvedCallReferenceNode* callback);
InvocationHandler.h:   void destroy();
InvocationHandler.h:};
InvocationHandler.h:} // namespace jni
InvocationHandler.h:#endif // QORE_JNI_INVOCATIONHANDLER_H_
Class.cpp://--------------------------------------------------------------------*- C++ -*-
Class.cpp://
Class.cpp://  Qore Programming Language
Class.cpp://
Class.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Class.cpp://
Class.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Class.cpp://  copy of this software and associated documentation files (the "Software"),
Class.cpp://  to deal in the Software without restriction, including without limitation
Class.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Class.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Class.cpp://  Software is furnished to do so, subject to the following conditions:
Class.cpp://
Class.cpp://  The above copyright notice and this permission notice shall be included in
Class.cpp://  all copies or substantial portions of the Software.
Class.cpp://
Class.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Class.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Class.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Class.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Class.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Class.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Class.cpp://  DEALINGS IN THE SOFTWARE.
Class.cpp://
Class.cpp://------------------------------------------------------------------------------
Class.cpp:#include "Class.h"
Class.cpp:#include "Env.h"
Class.cpp:#include "Field.h"
Class.cpp:#include "Globals.h"
Class.cpp:#include "ModifiedUtf8String.h"
Class.cpp:#include "Method.h"
Class.cpp:namespace jni {
Class.cpp:Class::~Class() {
Class.cpp:    printd(LogLevel, "Class::~Class() this: %p cls: %p\n", this, static_cast<jclass>(this->cls));
Class.cpp:    for (auto& i : mlist)
Class.cpp:        delete i;
Class.cpp:}
Class.cpp:void Class::trackMethod(BaseMethod* m) {
Class.cpp:    mlist.push_back(m);
Class.cpp:}
Class.cpp:Class* Class::getSuperClass() {
Class.cpp:    Env env;
Class.cpp:    LocalReference<jclass> parentClass = env.callObjectMethod(cls, Globals::methodClassGetSuperClass, nullptr).as<jclass>();
Class.cpp:    if (!parentClass)
Class.cpp:        return nullptr;
Class.cpp:    return new Class(parentClass);
Class.cpp:}
Class.cpp:LocalReference<jobjectArray> Class::getInterfaces() {
Class.cpp:    Env env;
Class.cpp:    return env.callObjectMethod(cls, Globals::methodClassGetInterfaces, nullptr).as<jobjectArray>();
Class.cpp:}
Class.cpp:LocalReference<jobjectArray> Class::getDeclaredConstructors() {
Class.cpp:    Env env;
Class.cpp:    return env.callObjectMethod(cls, Globals::methodClassGetDeclaredConstructors, nullptr).as<jobjectArray>();
Class.cpp:}
Class.cpp:LocalReference<jobjectArray> Class::getDeclaredMethods() {
Class.cpp:    Env env;
Class.cpp:    return env.callObjectMethod(cls, Globals::methodClassGetDeclaredMethods, nullptr).as<jobjectArray>();
Class.cpp:}
Class.cpp:LocalReference<jobjectArray> Class::getDeclaredFields() {
Class.cpp:    Env env;
Class.cpp:    return env.callObjectMethod(cls, Globals::methodClassGetDeclaredFields, nullptr).as<jobjectArray>();
Class.cpp:}
Class.cpp:int Class::getModifiersIntern() const {
Class.cpp:    Env env;
Class.cpp:    return env.callIntMethod(cls, Globals::methodClassGetModifiers, nullptr);
Class.cpp:}
Class.cpp:} // namespace jni
QoreJniClassMap.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QoreJniClassMap.h:/*
QoreJniClassMap.h:    QoreJniClassMap.h
QoreJniClassMap.h:    Qore Programming Language JNI Module
QoreJniClassMap.h:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
QoreJniClassMap.h:    This library is free software; you can redistribute it and/or
QoreJniClassMap.h:    modify it under the terms of the GNU Lesser General Public
QoreJniClassMap.h:    License as published by the Free Software Foundation; either
QoreJniClassMap.h:    version 2.1 of the License, or (at your option) any later version.
QoreJniClassMap.h:    This library is distributed in the hope that it will be useful,
QoreJniClassMap.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJniClassMap.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJniClassMap.h:    Lesser General Public License for more details.
QoreJniClassMap.h:    You should have received a copy of the GNU Lesser General Public
QoreJniClassMap.h:    License along with this library; if not, write to the Free Software
QoreJniClassMap.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJniClassMap.h:*/
QoreJniClassMap.h:#ifndef _QORE_JNI_QOREJAVACLASSMAP_H
QoreJniClassMap.h:#define _QORE_JNI_QOREJAVACLASSMAP_H
QoreJniClassMap.h:#include "QoreJniPrivateData.h"
QoreJniClassMap.h:#include "Env.h"
QoreJniClassMap.h:#include "Class.h"
QoreJniClassMap.h:#include "JniQoreClass.h"
QoreJniClassMap.h:#include <set>
QoreJniClassMap.h:#include <map>
QoreJniClassMap.h:#include <mutex>
QoreJniClassMap.h:#include <condition_variable>
QoreJniClassMap.h:typedef std::set<std::string> strset_t;
QoreJniClassMap.h:DLLLOCAL QoreClass* initJavaArrayClass(QoreNamespace& ns);
QoreJniClassMap.h:DLLLOCAL QoreClass* initQoreInvocationHandlerClass(QoreNamespace& ns);
QoreJniClassMap.h:DLLLOCAL void init_jni_functions(QoreNamespace& ns);
QoreJniClassMap.h:DLLLOCAL QoreClass* jni_class_handler(QoreNamespace* ns, const char* cname);
QoreJniClassMap.h:DLLLOCAL extern bool jni_compat_types;
QoreJniClassMap.h:namespace jni {
QoreJniClassMap.h:// the JniQoreClass for java::lang::Object
QoreJniClassMap.h:extern JniQoreClass* QC_OBJECT;
QoreJniClassMap.h:// the Qore class ID for java::lang::Object
QoreJniClassMap.h:extern qore_classid_t CID_OBJECT;
QoreJniClassMap.h:// the JniQoreClass for java::lang::Class
QoreJniClassMap.h:extern JniQoreClass* QC_CLASS;
QoreJniClassMap.h:// the Qore class ID for java::lang::Class
QoreJniClassMap.h:extern qore_classid_t CID_CLASS;
QoreJniClassMap.h:// the JniQoreClass for java::lang::reflect::Method
QoreJniClassMap.h:extern JniQoreClass* QC_METHOD;
QoreJniClassMap.h:// the Qore class ID for java::reflect::Method
QoreJniClassMap.h:extern qore_classid_t CID_METHOD;
QoreJniClassMap.h:// the JniQoreClass for java::lang::ClassLoader
QoreJniClassMap.h:extern JniQoreClass* QC_CLASSLOADER;
QoreJniClassMap.h:// the Qore class ID for java::lang::ClassLoader
QoreJniClassMap.h:extern qore_classid_t CID_CLASSLOADER;
QoreJniClassMap.h:// the JniQoreClass for java::lang::Throwable
QoreJniClassMap.h:extern JniQoreClass* QC_THROWABLE;
QoreJniClassMap.h:// the Qore class ID for java::lang::Throwable
QoreJniClassMap.h:extern qore_classid_t CID_THROWABLE;
QoreJniClassMap.h:// the JniQoreClass for java::lang::reflect::InvocationHandler
QoreJniClassMap.h:extern JniQoreClass* QC_INVOCATIONHANDLER;
QoreJniClassMap.h:// the Qore class ID for java::lang::reflect::InvocationHandler
QoreJniClassMap.h:extern qore_classid_t CID_INVOCATIONHANDLER;
QoreJniClassMap.h:// forward references
QoreJniClassMap.h:class Class;
QoreJniClassMap.h:class JniExternalProgramData;
QoreJniClassMap.h:class QoreJniClassMapBase {
QoreJniClassMap.h:protected:
QoreJniClassMap.h:    // map of java class names (ex 'java/lang/Object') to JniQoreClass ptrs
QoreJniClassMap.h:    typedef std::map<std::string, JniQoreClass*> jcmap_t;
QoreJniClassMap.h:    // map of java class names (ex 'java/lang/Object') to JniQoreClass ptrs
QoreJniClassMap.h:    jcmap_t jcmap;
QoreJniClassMap.h:public:
QoreJniClassMap.h:    DLLLOCAL void add(const char* name, JniQoreClass* qc) {
QoreJniClassMap.h:        printd(LogLevel, "QoreJniClassMapBase::add() this: %p name: %s qc: %p (%s)\n", this, name, qc, qc->getName());
QoreJniClassMap.h:#ifdef DEBUG
QoreJniClassMap.h:        if (jcmap.find(name) != jcmap.end())
QoreJniClassMap.h:            printd(0, "QoreJniClassMapBase::add() name: %s qc: %p (%s)\n", name, qc, qc->getName());
QoreJniClassMap.h:#endif
QoreJniClassMap.h:        assert(jcmap.find(name) == jcmap.end());
QoreJniClassMap.h:        jcmap[name] = qc;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    // accepts either a dotted name (ex: "java.lang.Object)") or an internal name ("java/lang/Object") as argument
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* find(const char* jpath) const {
QoreJniClassMap.h:        if (strchr(jpath, '.')) {
QoreJniClassMap.h:            QoreString str(jpath);
QoreJniClassMap.h:            str.replaceAll(".", "/");
QoreJniClassMap.h:            jcmap_t::const_iterator i = jcmap.find(str.c_str());
QoreJniClassMap.h:            return i == jcmap.end() ? nullptr : i->second;
QoreJniClassMap.h:        }
QoreJniClassMap.h:        jcmap_t::const_iterator i = jcmap.find(jpath);
QoreJniClassMap.h:        return i == jcmap.end() ? nullptr : i->second;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    // accepts an internal name as argument (ex: "java/lang/Object")
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* findInternal(const char* jpath) const {
QoreJniClassMap.h:        jcmap_t::const_iterator i = jcmap.find(jpath);
QoreJniClassMap.h:        return i == jcmap.end() ? nullptr : i->second;
QoreJniClassMap.h:    }
QoreJniClassMap.h:};
QoreJniClassMap.h:class QoreJniClassMap : public QoreJniClassMapBase {
QoreJniClassMap.h:public:
QoreJniClassMap.h:    static QoreRecursiveThreadLock m;
QoreJniClassMap.h:    DLLLOCAL void init(QoreProgram* pgm, bool already_initialized);
QoreJniClassMap.h:    DLLLOCAL void destroy(ExceptionSink& xsink);
QoreJniClassMap.h:    DLLLOCAL QoreValue getValue(LocalReference<jobject>& jobj, QoreProgram* pgm, bool compat_types);
QoreJniClassMap.h:    DLLLOCAL const QoreTypeInfo* getQoreType(jclass cls, const QoreTypeInfo*& altType,
QoreJniClassMap.h:            QoreProgram* pgm = nullptr, bool literal = false);
QoreJniClassMap.h:    DLLLOCAL const QoreTypeInfo* getQoreType(jclass cls, QoreProgram* pgm = nullptr, bool literal = false) {
QoreJniClassMap.h:        const QoreTypeInfo* altType = nullptr;
QoreJniClassMap.h:        return getQoreType(cls, altType, pgm, literal);
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL QoreNamespace& getJniNs() {
QoreJniClassMap.h:        return *default_jns;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL jobject getJavaObject(const QoreObject* o);
QoreJniClassMap.h:    DLLLOCAL jobject getJavaClosure(const ResolvedCallReferenceNode* call);
QoreJniClassMap.h:    DLLLOCAL jarray getJavaArray(const QoreListNode* l, jclass cls, JniExternalProgramData* jpc = nullptr);
QoreJniClassMap.h:    // takes an internal name (ex: java/lang/Class)
QoreJniClassMap.h:    DLLLOCAL jclass findLoadClass(const char* name, QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    // takes an internal name (ex: java/lang/Class)
QoreJniClassMap.h:    DLLLOCAL jclass findLoadClass(const QoreString& name, QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* findCreateQoreClass(Env& env, LocalReference<jclass>& jc, QoreProgram* pgm);
QoreJniClassMap.h:    // create the Qore class from the Java binary name (ex: java.lang.Object)
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* findCreateQoreClass(Env& env, const char* name, QoreProgram* pgm,
QoreJniClassMap.h:            JniExternalProgramData* jpc = nullptr);
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* findCreateQoreClass(Env& env, QoreString& name, const char* jpath, Class* c, bool base,
QoreJniClassMap.h:            QoreProgram* pgm) {
QoreJniClassMap.h:        //printd(5, "QoreJniClassMap::findCreateQoreClass() '%s' base: %d pgm: %p\n", jpath, base, pgm);
QoreJniClassMap.h:        return base
QoreJniClassMap.h:            ? findCreateQoreClassInBase(env, name, jpath, c, pgm)
QoreJniClassMap.h:            : findCreateQoreClassInProgram(name, jpath, c, pgm);
QoreJniClassMap.h:    }
QoreJniClassMap.h:    /** @param name an input/output variable, on input it is the java name for the class, which could
QoreJniClassMap.h:        be an inner class (ex: MyClass$1), on output it is the Qore name for the class (ex: MyClass_1)
QoreJniClassMap.h:        @param jpath the java path to the class
QoreJniClassMap.h:        @param c the Java class object
QoreJniClassMap.h:        @return the new builtin Qore class object wrapping the Java class
QoreJniClassMap.h:    */
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* findCreateQoreClassInProgram(QoreString& name, const char* jpath, Class* c,
QoreJniClassMap.h:        QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    DLLLOCAL static LocalReference<jclass> getPrimitiveType(qore_type_t t);
QoreJniClassMap.h:protected:
QoreJniClassMap.h:    // map of java class names to const QoreTypeInfo ptrs
QoreJniClassMap.h:    typedef std::map<const std::string, const QoreTypeInfo*> jtmap_t;
QoreJniClassMap.h:    // map for Qore types from Java classes
QoreJniClassMap.h:    static jtmap_t jtmap;
QoreJniClassMap.h:    // struct of type info and primitive type descriptor strings
QoreJniClassMap.h:    struct qore_java_primitive_info_t {
QoreJniClassMap.h:        const QoreTypeInfo* typeInfo;
QoreJniClassMap.h:        const char* descriptor;
QoreJniClassMap.h:    };
QoreJniClassMap.h:    // map of java primitive type names to type and descriptor info
QoreJniClassMap.h:    typedef std::map<const char*, struct qore_java_primitive_info_t, ltstr> jpmap_t;
QoreJniClassMap.h:    static jpmap_t jpmap;
QoreJniClassMap.h:    // map of Qore base types to java classes
QoreJniClassMap.h:    typedef std::map<qore_type_t, GlobalReference<jclass>> qt2jmap_t;
QoreJniClassMap.h:    static qt2jmap_t qt2jmap;
QoreJniClassMap.h:    // parent namespace for jni module functionality
QoreJniClassMap.h:    QoreNamespace* default_jns = new QoreNamespace("Jni");
QoreJniClassMap.h:    // class loader
QoreJniClassMap.h:    GlobalReference<jobject> baseClassLoader;
QoreJniClassMap.h:    DLLLOCAL void doMethods(JniQoreClass& qc, Class* jc, QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    DLLLOCAL void doFields(JniQoreClass& qc, Class* jc, QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    DLLLOCAL void doConstructors(JniQoreClass& qc, Class* jc, QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    // add Java parent classes and interfaces as Qore parent classes
QoreJniClassMap.h:    DLLLOCAL void addSuperClasses(JniQoreClass* qc, Class* jc, const char* jpath, QoreProgram* pgm = nullptr,
QoreJniClassMap.h:        JniExternalProgramData* jpc = nullptr);
QoreJniClassMap.h:    // populate the Qore class with methods and members from the Java class
QoreJniClassMap.h:    DLLLOCAL void populateQoreClass(JniQoreClass& qc, Class* jc, QoreProgram* pgm = nullptr);
QoreJniClassMap.h:    DLLLOCAL void addSuperClass(Env& env, JniQoreClass& qc, Class* parent, bool interface,
QoreJniClassMap.h:        QoreProgram* pgm = nullptr, JniExternalProgramData* jpc = nullptr);
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* createClassInNamespace(QoreNamespace* ns, QoreNamespace& jns, const char* jpath,
QoreJniClassMap.h:        Class* jc, JniQoreClass* qc, QoreJniClassMapBase& map, QoreProgram* pgm);
QoreJniClassMap.h:    DLLLOCAL JniQoreClass* findCreateQoreClassInBase(Env& env, QoreString& name, const char* jpath, Class* c, QoreProgram* pgm);
QoreJniClassMap.h:    DLLLOCAL Class* loadClass(Env& env, const char* name, bool& base, JniExternalProgramData* jpc = nullptr);
QoreJniClassMap.h:private:
QoreJniClassMap.h:    // initialization flag
QoreJniClassMap.h:    static bool init_done;
QoreJniClassMap.h:    static std::mutex init_mutex;
QoreJniClassMap.h:    static std::condition_variable init_cond;
QoreJniClassMap.h:    DLLLOCAL static void staticInitBackground(ExceptionSink* xsink, void* pgm);
QoreJniClassMap.h:    DLLLOCAL void initBackground(QoreProgram* pgm);
QoreJniClassMap.h:    DLLLOCAL jarray getJavaArrayIntern(Env& env, const QoreListNode* l, jclass cls, JniExternalProgramData* jpc);
QoreJniClassMap.h:    DLLLOCAL Class* loadProgramClass(Env& env, const char* name, JniExternalProgramData* jpc);
QoreJniClassMap.h:    class InitSignaler {
QoreJniClassMap.h:    public:
QoreJniClassMap.h:        DLLLOCAL ~InitSignaler() {
QoreJniClassMap.h:            init_cond.notify_one();
QoreJniClassMap.h:        }
QoreJniClassMap.h:        std::lock_guard<std::mutex> init_guard();
QoreJniClassMap.h:    };
QoreJniClassMap.h:};
QoreJniClassMap.h:extern QoreJniClassMap qjcm;
QoreJniClassMap.h://! access code modifiers
QoreJniClassMap.h:enum qore_method_type_t {
QoreJniClassMap.h:    QMT_CONSTRUCTOR = (1 << 0),
QoreJniClassMap.h:    QMT_NORMAL = (1 << 1),
QoreJniClassMap.h:    QMT_STATIC = (1 << 2),
QoreJniClassMap.h:};
QoreJniClassMap.h:class QoreJavaParamHelper {
QoreJniClassMap.h:public:
QoreJniClassMap.h:    DLLLOCAL QoreJavaParamHelper(Env& env, const char* mname, jclass parent_class);
QoreJniClassMap.h:    DLLLOCAL void add(LocalReference<jobject>& params);
QoreJniClassMap.h:    // returns 0 if the types are not equal, -1 (skip) if they are equal
QoreJniClassMap.h:    DLLLOCAL int checkVariant(LocalReference<jobject>& params, qore_method_type_t method_type);
QoreJniClassMap.h:private:
QoreJniClassMap.h:    Env& env;
QoreJniClassMap.h:    const char* mname;
QoreJniClassMap.h:    jclass parent_class;
QoreJniClassMap.h:    LocalReference<jobject> plist;
QoreJniClassMap.h:};
QoreJniClassMap.h:class JniExternalProgramData : public AbstractQoreProgramExternalData, public QoreJniClassMapBase {
QoreJniClassMap.h:public:
QoreJniClassMap.h:    DLLLOCAL JniExternalProgramData(QoreNamespace* n_jni, QoreProgram* pgm);
QoreJniClassMap.h:    DLLLOCAL JniExternalProgramData(const JniExternalProgramData& parent, Env& env, QoreProgram* pgm);
QoreJniClassMap.h:    // delete the copy constructor
QoreJniClassMap.h:    JniExternalProgramData(const JniExternalProgramData& parent) = delete;
QoreJniClassMap.h:    DLLLOCAL virtual ~JniExternalProgramData();
QoreJniClassMap.h:    DLLLOCAL jobject getClassLoader() const {
QoreJniClassMap.h:        return classLoader;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL void setClassLoader(jobject classLoader) {
QoreJniClassMap.h:        this->classLoader = classLoader;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL jclass getDynamicApi() const {
QoreJniClassMap.h:        assert(dynamicApi);
QoreJniClassMap.h:        return dynamicApi;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL jmethodID getNewInstanceId() const {
QoreJniClassMap.h:        assert(methodQoreJavaDynamicApiNewInstance);
QoreJniClassMap.h:        return methodQoreJavaDynamicApiNewInstance;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL jmethodID getInvokeMethodId() const {
QoreJniClassMap.h:        assert(methodQoreJavaDynamicApiInvokeMethod);
QoreJniClassMap.h:        return methodQoreJavaDynamicApiInvokeMethod;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL jmethodID getInvokeMethodNonvirtualId() const {
QoreJniClassMap.h:        assert(methodQoreJavaDynamicApiInvokeMethodNonvirtual);
QoreJniClassMap.h:        return methodQoreJavaDynamicApiInvokeMethodNonvirtual;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL jmethodID getFieldId() const {
QoreJniClassMap.h:        assert(methodQoreJavaDynamicApiGetField);
QoreJniClassMap.h:        return methodQoreJavaDynamicApiGetField;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL QoreNamespace* getJniNamespace() const {
QoreJniClassMap.h:        return jni;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL void addClasspath(const char* path);
QoreJniClassMap.h:    // returns Java byte code (byte[]) for a Qore class
QoreJniClassMap.h:    DLLLOCAL LocalReference<jbyteArray> generateByteCode(Env& env, jobject class_loader,
QoreJniClassMap.h:            const QoreString& qpath, jstring jname, const char* module, const QoreClass* qc);
QoreJniClassMap.h:    // returns a type description for a concrete type or a future type for Java bytecode generation
QoreJniClassMap.h:    DLLLOCAL LocalReference<jobject> getJavaTypeDefinition(Env& env, jobject class_loader, const QoreTypeInfo* ti, bool no_void = false);
QoreJniClassMap.h:    DLLLOCAL void overrideCompatTypes(bool compat_types) {
QoreJniClassMap.h:        override_compat_types = true;
QoreJniClassMap.h:        this->compat_types = compat_types;
QoreJniClassMap.h:        //printd(5, "JniExternalProgramData::overrideCompatTypes(%d) this: %p\n", compat_types, this);
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL bool getCompatTypes() const {
QoreJniClassMap.h:        return override_compat_types ? compat_types : jni_compat_types;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL void setSaveObjectCallback(const ResolvedCallReferenceNode* save_object_callback) {
QoreJniClassMap.h:        if (this->save_object_callback) {
QoreJniClassMap.h:            this->save_object_callback->deref(nullptr);
QoreJniClassMap.h:        }
QoreJniClassMap.h:        this->save_object_callback = save_object_callback ? save_object_callback->refRefSelf() : nullptr;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL ResolvedCallReferenceNode* getSaveObjectCallback() const {
QoreJniClassMap.h:        return save_object_callback;
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL virtual AbstractQoreProgramExternalData* copy(QoreProgram* pgm) const {
QoreJniClassMap.h:        // issue #3862: ensure that the thread is registered for this call
QoreJniClassMap.h:        Env env;
QoreJniClassMap.h:        return new JniExternalProgramData(*this, env, pgm);
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL virtual void doDeref() {
QoreJniClassMap.h:        ExceptionSink xsink;
QoreJniClassMap.h:        if (save_object_callback) {
QoreJniClassMap.h:            save_object_callback->deref(&xsink);
QoreJniClassMap.h:        }
QoreJniClassMap.h:        try {
QoreJniClassMap.h:            delete this;
QoreJniClassMap.h:        } catch () {
QoreJniClassMap.h:        }
QoreJniClassMap.h:        if (xsink) {
QoreJniClassMap.h:            throw new QoreXSinkException(xsink);
QoreJniClassMap.h:        }
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL void clearCompilationCache() {
QoreJniClassMap.h:        //printd(5, "JniExternalProgramData::clearCompilationCache() clearing %d entries\n", (int)q2jmap.size());
QoreJniClassMap.h:        q2jmap.clear();
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL void saveClass(const QoreClass& qc, LocalReference<jclass> jcls);
QoreJniClassMap.h:    DLLLOCAL jclass findJavaClass(const QoreClass& qc);
QoreJniClassMap.h:    DLLLOCAL LocalReference<jclass> getClassForValue(const QoreObject* o);
QoreJniClassMap.h:    DLLLOCAL LocalReference<jclass> getJavaClassForQoreClass(Env& env, const QoreClass* qc);
QoreJniClassMap.h:    // Returns a Java object corresponding to the given Qore object
QoreJniClassMap.h:    /** A Java class for the given Qore class is created dynamically if necessary
QoreJniClassMap.h:     */
QoreJniClassMap.h:    DLLLOCAL LocalReference<jobject> getJavaObject(const QoreObject* o);
QoreJniClassMap.h:    DLLLOCAL LocalReference<jstring> getJavaNameForClass(Env& env, const QoreClass& qc);
QoreJniClassMap.h:    DLLLOCAL bool addInjectedModule(const char* mod);
QoreJniClassMap.h:    DLLLOCAL bool isInjectedModule(const char* mod) const;
QoreJniClassMap.h:    DLLLOCAL static JniExternalProgramData* setContext(QoreProgram*& pgm) {
QoreJniClassMap.h:        Env env;
QoreJniClassMap.h:        return setContext(env, pgm);
QoreJniClassMap.h:    }
QoreJniClassMap.h:    DLLLOCAL static JniExternalProgramData* setContext(Env& env);
QoreJniClassMap.h:    DLLLOCAL static JniExternalProgramData* setContext(Env& env, QoreProgram*& pgm);
QoreJniClassMap.h:    DLLLOCAL static bool compatTypes();
QoreJniClassMap.h:    // get / create JNI program data in the given Qore program
QoreJniClassMap.h:    DLLLOCAL static JniExternalProgramData* getCreateJniProgramData(QoreProgram* pgm);
QoreJniClassMap.h:    // try to get the QoreClass for a dynamically-created JavaClass
QoreJniClassMap.h:    DLLLOCAL static QoreClass* tryGetQoreClass(Env& env, jclass obj, bool inherited);
QoreJniClassMap.h:    // load service loader
QoreJniClassMap.h:    DLLLOCAL LocalReference<jobject> loadServiceLoader(Env& env, jclass jcls);
QoreJniClassMap.h:protected:
QoreJniClassMap.h:    // owning QoreProgram object
QoreJniClassMap.h:    QoreProgram* pgm;
QoreJniClassMap.h:    // Jni namespace pointer for the current Program
QoreJniClassMap.h:    QoreNamespace* jni;
QoreJniClassMap.h:    // class loader
QoreJniClassMap.h:    GlobalReference<jobject> classLoader;
QoreJniClassMap.h:    // dynamic API class
QoreJniClassMap.h:    GlobalReference<jclass> dynamicApi;
QoreJniClassMap.h:    // call reference for saving object references
QoreJniClassMap.h:    ResolvedCallReferenceNode* save_object_callback = nullptr;
QoreJniClassMap.h:    // QoreJavaDynamicApi.newInstance()
QoreJniClassMap.h:    jmethodID methodQoreJavaDynamicApiNewInstance = 0;
QoreJniClassMap.h:    // QoreJavaDynamicApi.invokeNethod()
QoreJniClassMap.h:    jmethodID methodQoreJavaDynamicApiInvokeMethod = 0;
QoreJniClassMap.h:    // QoreJavaDynamicApi.invokeNethodNonvirtual()
QoreJniClassMap.h:    jmethodID methodQoreJavaDynamicApiInvokeMethodNonvirtual = 0;
QoreJniClassMap.h:    // QoreJavaDynamicApi.getField()
QoreJniClassMap.h:    jmethodID methodQoreJavaDynamicApiGetField = 0;
QoreJniClassMap.h:    // QoreJavaDynamicApi.loadServiceLoader()
QoreJniClassMap.h:    jmethodID methodQoreJavaDynamicApiLoadServiceLoader = 0;
QoreJniClassMap.h:    // code generation mutex
QoreJniClassMap.h:    QoreRecursiveThreadLock codeGenLock;
QoreJniClassMap.h:    // map of Qore class hashes to Java classes; class signature hash -> jclass
QoreJniClassMap.h:    /** codeGenLock must be held when accessing this data
QoreJniClassMap.h:     */
QoreJniClassMap.h:    typedef std::map<std::string, GlobalReference<jclass>> q2jmap_t;
QoreJniClassMap.h:    q2jmap_t q2jmap;
QoreJniClassMap.h:    // map of paths to fake "$" Qore classes
QoreJniClassMap.h:    typedef std::map<std::string, QoreBuiltinClass*> fake_cls_map_t;
QoreJniClassMap.h:    fake_cls_map_t fake_cls_map;
QoreJniClassMap.h:    // override compat-types
QoreJniClassMap.h:    bool override_compat_types = false;
QoreJniClassMap.h:    // compat-types values
QoreJniClassMap.h:    bool compat_types = false;
QoreJniClassMap.h:    // injected module set
QoreJniClassMap.h:    typedef std::set<std::string> strset_t;
QoreJniClassMap.h:    strset_t injected_module_set;
QoreJniClassMap.h:    mutable QoreThreadLock injected_module_lock;
QoreJniClassMap.h:    // initializes the dynamic API in the constructor
QoreJniClassMap.h:    DLLLOCAL void initDynamicApi(Env& env);
QoreJniClassMap.h:    // returns Java byte code (byte[]) for the given Qore class
QoreJniClassMap.h:    DLLLOCAL LocalReference<jbyteArray> generateByteCodeIntern(Env& env, jobject class_loader,
QoreJniClassMap.h:        const QoreClass* qcls, jstring jname = nullptr);
QoreJniClassMap.h:    // returns Java byte code (byte[]) for a wrapper class for Qore functions implemneted as static methods
QoreJniClassMap.h:    DLLLOCAL LocalReference<jbyteArray> generateFunctionClassIntern(Env& env, jobject class_loader, QoreProgram* pgm,
QoreJniClassMap.h:        jstring jname, const char* module, const char* ns_path = nullptr);
QoreJniClassMap.h:    // returns Java byte code (byte[]) for a wrapper class for Qore constants implemneted as static fields
QoreJniClassMap.h:    DLLLOCAL LocalReference<jbyteArray> generateConstantClassIntern(Env& env, jobject class_loader, QoreProgram* pgm,
QoreJniClassMap.h:        jstring jname, const char* module, const char* ns_path = nullptr);
QoreJniClassMap.h:    // Returns a param list of Java type corresponding to the Qore types
QoreJniClassMap.h:    DLLLOCAL jobject getJavaParamList(Env& env, jobject class_loader, const QoreExternalVariant& v,
QoreJniClassMap.h:        unsigned& len, bool is_abstract = false);
QoreJniClassMap.h:    DLLLOCAL int addConstructorVariant(Env& env, jobject class_loader, const QoreClass& qcls,
QoreJniClassMap.h:        LocalReference<jobject>& bb, const QoreMethod& m, const QoreExternalMethodVariant& v, jclass parent_class,
QoreJniClassMap.h:        QoreJavaParamHelper& jph);
QoreJniClassMap.h:    DLLLOCAL int addNormalMethodVariant(Env& env, jobject class_loader, const QoreClass& qcls,
QoreJniClassMap.h:        LocalReference<jobject>& bb, const QoreMethod& m, const QoreExternalMethodVariant& v,
QoreJniClassMap.h:        QoreJavaParamHelper& jph);
QoreJniClassMap.h:    DLLLOCAL int addStaticMethodVariant(Env& env, jobject class_loader, const QoreClass& qcls,
QoreJniClassMap.h:        LocalReference<jobject>& bb, const QoreMethod& m, const QoreExternalMethodVariant& v,
QoreJniClassMap.h:        QoreJavaParamHelper& jph);
QoreJniClassMap.h:    DLLLOCAL int addFunctionVariant(Env& env, jobject class_loader, LocalReference<jobject>& bb,
QoreJniClassMap.h:        const QoreExternalFunction& func, const QoreExternalVariant& v, QoreProgram* pgm, QoreJavaParamHelper& jph);
QoreJniClassMap.h:    DLLLOCAL int addStaticMethods(Env& env, jobject class_loader,
QoreJniClassMap.h:        const QoreClass& qcls, const QoreMethod& m, QoreJavaParamHelper& jph, LocalReference<jobject>& bb);
QoreJniClassMap.h:    DLLLOCAL int addMethods(Env& env, jobject class_loader, const QoreClass& qcls, LocalReference<jobject>& bb,
QoreJniClassMap.h:        jclass parent_class, strset_t& mset, const QoreClass* other_base = nullptr);
QoreJniClassMap.h:    DLLLOCAL int addFunctions(Env& env, jobject class_loader, const QoreNamespace& ns, LocalReference<jobject>& bb,
QoreJniClassMap.h:        QoreProgram* pgm);
QoreJniClassMap.h:    DLLLOCAL int addConstants(Env& env, jobject class_loader, jstring jname, const QoreNamespace& ns,
QoreJniClassMap.h:        LocalReference<jobject>& bb, QoreProgram* pgm);
QoreJniClassMap.h:    DLLLOCAL int addClassConstants(Env& env, jstring jname, const QoreClass& qcls,
QoreJniClassMap.h:        LocalReference<jobject>& bb, QoreProgram* pgm);
QoreJniClassMap.h:};
QoreJniClassMap.h:DLLLOCAL QoreProgram* jni_get_program_context();
QoreJniClassMap.h:DLLLOCAL JniExternalProgramData* jni_get_context();
QoreJniClassMap.h:DLLLOCAL JniExternalProgramData* jni_get_context(QoreProgram*& pgm);
QoreJniClassMap.h:DLLLOCAL JniExternalProgramData* jni_get_context_unconditional();
QoreJniClassMap.h:DLLLOCAL JniExternalProgramData* jni_get_context_unconditional(QoreProgram*& pgm);
QoreJniClassMap.h:}
QoreJniClassMap.h:#endif
QoreJdbcPreparedStatement.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QoreJdbcPreparedStatement.h:/*
QoreJdbcPreparedStatement.h:    QoreJdbcPreparedStatement.h
QoreJdbcPreparedStatement.h:    Qore Programming Language JNI Module
QoreJdbcPreparedStatement.h:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcPreparedStatement.h:    This library is free software; you can redistribute it and/or
QoreJdbcPreparedStatement.h:    modify it under the terms of the GNU Lesser General Public
QoreJdbcPreparedStatement.h:    License as published by the Free Software Foundation; either
QoreJdbcPreparedStatement.h:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcPreparedStatement.h:    This library is distributed in the hope that it will be useful,
QoreJdbcPreparedStatement.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcPreparedStatement.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcPreparedStatement.h:    Lesser General Public License for more details.
QoreJdbcPreparedStatement.h:    You should have received a copy of the GNU Lesser General Public
QoreJdbcPreparedStatement.h:    License along with this library; if not, write to the Free Software
QoreJdbcPreparedStatement.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcPreparedStatement.h:*/
QoreJdbcPreparedStatement.h:#ifndef _QORE_JNI_QOREJDBCPREPAREDSTATEMENT_H
QoreJdbcPreparedStatement.h:#define _QORE_JNI_QOREJDBCPREPAREDSTATEMENT_H
QoreJdbcPreparedStatement.h:#include <qore/Qore.h>
QoreJdbcPreparedStatement.h:#include "QoreJdbcStatement.h"
QoreJdbcPreparedStatement.h:#include "QoreJdbcPreparedStatement.h"
QoreJdbcPreparedStatement.h:namespace jni {
QoreJdbcPreparedStatement.h://! A class representing JDBC prepared statement.
QoreJdbcPreparedStatement.h:class QoreJdbcPreparedStatement : public QoreJdbcStatement {
QoreJdbcPreparedStatement.h:public:
QoreJdbcPreparedStatement.h:    //! Constructor
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreJdbcPreparedStatement(ExceptionSink* xsink, QoreJdbcConnection* c);
QoreJdbcPreparedStatement.h:    //! Destructor
QoreJdbcPreparedStatement.h:    DLLLOCAL virtual ~QoreJdbcPreparedStatement();
QoreJdbcPreparedStatement.h:    //! Prepare an JDBC SQL statement
QoreJdbcPreparedStatement.h:    /** @param qstr Qore-style SQL statement
QoreJdbcPreparedStatement.h:        @param args SQL parameters
QoreJdbcPreparedStatement.h:        @param xsink exception sink
QoreJdbcPreparedStatement.h:        @return 0 for OK, -1 for error
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL int prepare(const QoreString& qstr, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    //! Execute the prepared statement
QoreJdbcPreparedStatement.h:    /** @param xsink exception sink
QoreJdbcPreparedStatement.h:        @return 0 for OK, -1 for error
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL int exec(ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    //! Bind the passed arguments to the statement
QoreJdbcPreparedStatement.h:    /** @param args SQL parameters
QoreJdbcPreparedStatement.h:        @param xsink exception sink
QoreJdbcPreparedStatement.h:        @return 0 for OK, -1 for error
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL int bind(const QoreListNode& args, ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreHashNode* getOutputHash(ExceptionSink* xsink, bool empty_hash_if_nothing, int max_rows = -1);
QoreJdbcPreparedStatement.h:    //! Get one result row.
QoreJdbcPreparedStatement.h:    /** @param xsink exception sink
QoreJdbcPreparedStatement.h:        @return one result-set row
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreHashNode* fetchRow(ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    //! Get result rows (get result list)
QoreJdbcPreparedStatement.h:    /** @param xsink exception sink
QoreJdbcPreparedStatement.h:        @param rows maximum count of rows to return; if <= 0 the count of returned rows is not limited
QoreJdbcPreparedStatement.h:        @return list of row hashes
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreListNode* fetchRows(int max_rows, ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    //! Get result columns (get result hash)
QoreJdbcPreparedStatement.h:    /** @param xsink exception sink
QoreJdbcPreparedStatement.h:        @param rows maximum count of rows to return; if <= 0 the count of returned rows is not limited
QoreJdbcPreparedStatement.h:        @return hash of result column lists
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreHashNode* fetchColumns(int max_rows, ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    //! Retrieve the next result-set row
QoreJdbcPreparedStatement.h:    /** @param xsink exception sink
QoreJdbcPreparedStatement.h:        @return true if a row was successfully retrieved, false if not (no more rows available) or an error occured
QoreJdbcPreparedStatement.h:    */
QoreJdbcPreparedStatement.h:    DLLLOCAL bool next(ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:    //! Clears the object
QoreJdbcPreparedStatement.h:    DLLLOCAL int clear(ExceptionSink* xsink);
QoreJdbcPreparedStatement.h:private:
QoreJdbcPreparedStatement.h:    //! Prepared / parsed SQL string
QoreJdbcPreparedStatement.h:    QoreString sql;
QoreJdbcPreparedStatement.h:    //! Assign bind args
QoreJdbcPreparedStatement.h:    DLLLOCAL void assignBindArgs(ExceptionSink* xsink, QoreListNode* args) {
QoreJdbcPreparedStatement.h:        ReferenceHolder<QoreListNode> tmp(params.swap(args), xsink);
QoreJdbcPreparedStatement.h:    }
QoreJdbcPreparedStatement.h:    //! Disabled copy constructor.
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreJdbcPreparedStatement(const QoreJdbcStatement& s) = delete;
QoreJdbcPreparedStatement.h:    //! Disabled assignment operator.
QoreJdbcPreparedStatement.h:    DLLLOCAL QoreJdbcPreparedStatement& operator=(const QoreJdbcStatement& s) = delete;
QoreJdbcPreparedStatement.h:};
QoreJdbcPreparedStatement.h:}
QoreJdbcPreparedStatement.h:#endif
Dispatcher.cpp://--------------------------------------------------------------------*- C++ -*-
Dispatcher.cpp://
Dispatcher.cpp://  Qore Programming Language
Dispatcher.cpp://
Dispatcher.cpp://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
Dispatcher.cpp://
Dispatcher.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Dispatcher.cpp://  copy of this software and associated documentation files (the "Software"),
Dispatcher.cpp://  to deal in the Software without restriction, including without limitation
Dispatcher.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Dispatcher.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Dispatcher.cpp://  Software is furnished to do so, subject to the following conditions:
Dispatcher.cpp://
Dispatcher.cpp://  The above copyright notice and this permission notice shall be included in
Dispatcher.cpp://  all copies or substantial portions of the Software.
Dispatcher.cpp://
Dispatcher.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Dispatcher.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Dispatcher.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Dispatcher.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Dispatcher.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Dispatcher.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Dispatcher.cpp://  DEALINGS IN THE SOFTWARE.
Dispatcher.cpp://
Dispatcher.cpp://------------------------------------------------------------------------------
Dispatcher.cpp:#include "Dispatcher.h"
Dispatcher.cpp:#include "Array.h"
Dispatcher.cpp:#include "Method.h"
Dispatcher.cpp:#include "QoreToJava.h"
Dispatcher.cpp:namespace jni {
Dispatcher.cpp:QoreCodeDispatcher::QoreCodeDispatcher(const ResolvedCallReferenceNode *callback) : callback(callback->refRefSelf()) {
Dispatcher.cpp:    pgm->ref();
Dispatcher.cpp:    printd(LogLevel, "QoreCodeDispatcher::QoreCodeDispatcher(), this: %p\n", this);
Dispatcher.cpp:}
Dispatcher.cpp:QoreCodeDispatcher::~QoreCodeDispatcher() {
Dispatcher.cpp:    try {
Dispatcher.cpp:        qoreThreadAttacher.attach();
Dispatcher.cpp:    } catch (Exception &e) {
Dispatcher.cpp:        printd(LogLevel, "~QoreCodeDispatcher() - unable to attach thread to Qore, this: %p", this);
Dispatcher.cpp:        return;
Dispatcher.cpp:    }
Dispatcher.cpp:    printd(LogLevel, "QoreCodeDispatcher::~QoreCodeDispatcher(), this: %p\n", this);
Dispatcher.cpp:    ExceptionSink xsink;
Dispatcher.cpp:    callback->deref(&xsink);
Dispatcher.cpp:    pgm->deref(&xsink);
Dispatcher.cpp:    if (xsink) {
Dispatcher.cpp:        QoreToJava::wrapException(xsink);
Dispatcher.cpp:    }
Dispatcher.cpp:}
Dispatcher.cpp:jobject QoreCodeDispatcher::dispatch(Env& env, jobject proxy, jobject method, jobjectArray jargs) {
Dispatcher.cpp:    if (q_libqore_shutdown()) {
Dispatcher.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "could not execute Qore callback; the Qore library "
Dispatcher.cpp:            "has already been shut down");
Dispatcher.cpp:        return nullptr;
Dispatcher.cpp:    }
Dispatcher.cpp:    try {
Dispatcher.cpp:        qoreThreadAttacher.attach();
Dispatcher.cpp:    } catch (Exception& e) {
Dispatcher.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Dispatcher.cpp:        return nullptr;
Dispatcher.cpp:    }
Dispatcher.cpp:    printd(LogLevel, "QoreCodeDispatcher::dispatch(), this: %p pgm: %p\n", this, pgm);
Dispatcher.cpp:    ExceptionSink xsink;
Dispatcher.cpp:    try {
Dispatcher.cpp:        QoreProgram* pgm = callback->getProgram();
Dispatcher.cpp:        JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Dispatcher.cpp:        ReferenceHolder<QoreListNode> args(new QoreListNode(autoTypeInfo), &xsink);
Dispatcher.cpp:        args->push(new QoreObject(QC_METHOD, pgm, new QoreJniPrivateData(method)), &xsink);
Dispatcher.cpp:        if (jargs) {
Dispatcher.cpp:            // we need to set the Program context if executing in a new thread
Dispatcher.cpp:            // when creating arguments in case QoreClass
Dispatcher.cpp:            // objects must be created from Java objects
Dispatcher.cpp:            QoreExternalProgramCallContextHelper pch(pgm);
Dispatcher.cpp:            ReferenceHolder<> val(&xsink);
Dispatcher.cpp:            Array::getList(val, env, jargs, env.getObjectClass(jargs), pgm);
Dispatcher.cpp:            args->push(val.release(), &xsink);
Dispatcher.cpp:        }
Dispatcher.cpp:        QoreValue qv = callback->execValue(*args, &xsink);
Dispatcher.cpp:        if (xsink) {
Dispatcher.cpp:            QoreToJava::wrapException(xsink);
Dispatcher.cpp:            return nullptr;
Dispatcher.cpp:        }
Dispatcher.cpp:        return QoreToJava::toObject(env, qv, nullptr, jpc);
Dispatcher.cpp:    } catch (jni::Exception& e) {
Dispatcher.cpp:        e.convert(&xsink);
Dispatcher.cpp:        QoreToJava::wrapException(xsink);
Dispatcher.cpp:        return nullptr;
Dispatcher.cpp:    } catch (QoreStandardException& e) {
Dispatcher.cpp:        ExceptionSink xsink;
Dispatcher.cpp:        e.convert(&xsink);
Dispatcher.cpp:        QoreString errstr;
Dispatcher.cpp:        QoreStringValueHelper err(xsink.getExceptionErr());
Dispatcher.cpp:        QoreStringValueHelper desc(xsink.getExceptionDesc());
Dispatcher.cpp:        errstr.sprintf("failed to execute Qore callback: %s: %s", err->c_str(), desc->c_str());
Dispatcher.cpp:        xsink.clear();
Dispatcher.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), errstr.c_str());
Dispatcher.cpp:        return nullptr;
Dispatcher.cpp:    }
Dispatcher.cpp:}
Dispatcher.cpp:} // namespace jni
Method.cpp://--------------------------------------------------------------------*- C++ -*-
Method.cpp://
Method.cpp://  Qore Programming Language
Method.cpp://
Method.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Method.cpp://
Method.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Method.cpp://  copy of this software and associated documentation files (the "Software"),
Method.cpp://  to deal in the Software without restriction, including without limitation
Method.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Method.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Method.cpp://  Software is furnished to do so, subject to the following conditions:
Method.cpp://
Method.cpp://  The above copyright notice and this permission notice shall be included in
Method.cpp://  all copies or substantial portions of the Software.
Method.cpp://
Method.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Method.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Method.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Method.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Method.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Method.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Method.cpp://  DEALINGS IN THE SOFTWARE.
Method.cpp://
Method.cpp://------------------------------------------------------------------------------
Method.cpp:#include "Method.h"
Method.cpp:#include "Env.h"
Method.cpp:#include "JavaToQore.h"
Method.cpp:#include "QoreToJava.h"
Method.cpp:#include "QoreJniClassMap.h"
Method.cpp:namespace jni {
Method.cpp:void BaseMethod::init(Env &env) {
Method.cpp:    retValClass = env.callObjectMethod(method, Globals::methodMethodGetReturnType, nullptr).as<jclass>().makeGlobal();
Method.cpp:    retValType = Globals::getType(retValClass);
Method.cpp:    LocalReference<jobjectArray> paramTypesArray = env.callObjectMethod(method,
Method.cpp:        Globals::methodMethodGetParameterTypes, nullptr).as<jobjectArray>();
Method.cpp:    jsize paramCount = env.getArrayLength(paramTypesArray);
Method.cpp:    mods = env.callIntMethod(method, Globals::methodMethodGetModifiers, nullptr);
Method.cpp:    varargs = env.callBooleanMethod(method, Globals::methodMethodIsVarArgs, nullptr);
Method.cpp:    paramTypes.reserve(paramCount);
Method.cpp:    for (jsize p = 0; p < paramCount; ++p) {
Method.cpp:        LocalReference<jclass> paramType = env.getObjectArrayElement(paramTypesArray, p).as<jclass>();
Method.cpp:        if (!varargs && (p == (paramCount - 1)) && env.callBooleanMethod(paramType, Globals::methodClassIsArray, nullptr)) {
Method.cpp:            LocalReference<jclass> elementClass =
Method.cpp:                env.callObjectMethod(paramType, Globals::methodClassGetComponentType, nullptr).as<jclass>();
Method.cpp:            if (elementClass && (Globals::getType(elementClass) != Type::Byte)) {
Method.cpp:                varargs = true;
Method.cpp:            }
Method.cpp:        }
Method.cpp:        paramTypes.emplace_back(Globals::getType(paramType), paramType.makeGlobal());
Method.cpp:    }
Method.cpp:}
Method.cpp:std::vector<jvalue> BaseMethod::convertArgs(Env& env, const QoreListNode* args, size_t arg_offset,
Method.cpp:        JniExternalProgramData* jpc) const {
Method.cpp:    assert(arg_offset == 0 || (args != nullptr && args->size() >= arg_offset));
Method.cpp:    size_t paramCount = paramTypes.size();
Method.cpp:    // missing arguments are treated as null
Method.cpp:    size_t argCount = args == nullptr ? 0 : (args->size() - arg_offset);
Method.cpp:    if (paramCount < argCount && !varargs) {
Method.cpp:        // get class and method name for exception text
Method.cpp:        LocalReference<jstring> mcname = env.callObjectMethod(cls->getJavaObject(), Globals::methodClassGetName,
Method.cpp:            nullptr).as<jstring>();
Method.cpp:        Env::GetStringUtfChars mcn(env, mcname);
Method.cpp:        QoreString mname;
Method.cpp:        getName(mname);
Method.cpp:        QoreStringMaker err("Too many arguments (%d) in invocation to Java method %s.%s() (takes %d arg%s)",
Method.cpp:            static_cast<int>(argCount), mcn.c_str(), mname.c_str(), static_cast<int>(paramCount),
Method.cpp:            paramCount == 1 ? "" : "s");
Method.cpp:        throw BasicException(err.c_str());
Method.cpp:    }
Method.cpp:    std::vector<jvalue> jargs(paramCount);
Method.cpp:    for (size_t index = 0; index < paramCount; ++index) {
Method.cpp:        // process varargs with remaining arguments or with a single argument if appropriate
Method.cpp:        if (varargs && (index == (paramCount - 1))
Method.cpp:            && !(argCount == paramCount && args->retrieveEntry(index + arg_offset).getType() == NT_LIST)) {
Method.cpp:            // get array component type
Method.cpp:            Env env;
Method.cpp:            LocalReference<jclass> ccls = env.callObjectMethod(paramTypes[index].second,
Method.cpp:                Globals::methodClassGetComponentType, nullptr).as<jclass>();
Method.cpp:            jargs[index].l = Array::toObjectArray(args, ccls, index + arg_offset, jpc).release();
Method.cpp:            break;
Method.cpp:        }
Method.cpp:        assert(!args || args->empty() || (index < argCount));
Method.cpp:        QoreValue qv = args ? args->retrieveEntry(index + arg_offset) : QoreValue();
Method.cpp:        switch (paramTypes[index].first) {
Method.cpp:            case Type::Boolean:
Method.cpp:                jargs[index].z = QoreToJava::toBoolean(qv);
Method.cpp:                break;
Method.cpp:            case Type::Byte:
Method.cpp:                jargs[index].b = QoreToJava::toByte(qv);
Method.cpp:                break;
Method.cpp:            case Type::Char:
Method.cpp:                jargs[index].c = QoreToJava::toChar(qv);
Method.cpp:                break;
Method.cpp:            case Type::Short:
Method.cpp:                jargs[index].s = QoreToJava::toShort(qv);
Method.cpp:                break;
Method.cpp:            case Type::Int:
Method.cpp:                jargs[index].i = QoreToJava::toInt(qv);
Method.cpp:                break;
Method.cpp:            case Type::Long:
Method.cpp:                jargs[index].j = QoreToJava::toLong(qv);
Method.cpp:                break;
Method.cpp:            case Type::Float:
Method.cpp:                jargs[index].f = QoreToJava::toFloat(qv);
Method.cpp:                break;
Method.cpp:            case Type::Double:
Method.cpp:                jargs[index].d = QoreToJava::toDouble(qv);
Method.cpp:                break;
Method.cpp:            case Type::Reference:
Method.cpp:            default:
Method.cpp:                assert(paramTypes[index].first == Type::Reference);
Method.cpp:                jargs[index].l = QoreToJava::toObject(env, qv, paramTypes[index].second, jpc);
Method.cpp:                break;
Method.cpp:        }
Method.cpp:    }
Method.cpp:    return jargs;
Method.cpp:}
Method.cpp:LocalReference<jobjectArray> BaseMethod::convertArgsToArray(Env& env, const QoreListNode* args, size_t arg_offset,
Method.cpp:        size_t array_offset, JniExternalProgramData* jpc) const {
Method.cpp:    //printd(5, "BaseMethod::convertArgsToArray() args: %p (%ld)\n", args, args ? args->size() : 0l);
Method.cpp:    assert(arg_offset == 0 || (args && (args->size() >= arg_offset)));
Method.cpp:    size_t paramCount = paramTypes.size();
Method.cpp:    // missing arguments are treated as null
Method.cpp:    size_t argCount;
Method.cpp:    if (args && (args->size() >= arg_offset)) {
Method.cpp:        argCount = args->size() - arg_offset;
Method.cpp:    } else {
Method.cpp:        argCount = 0;
Method.cpp:    }
Method.cpp:    //printd(5, "BaseMethod::convertArgsToArray() args: %p paramCount: %d argCount: %d va: %d\n", args, paramCount,
Method.cpp:    //    argCount, varargs);
Method.cpp:    if (paramCount < argCount && !varargs) {
Method.cpp:        // get class and method name for exception text
Method.cpp:        LocalReference<jstring> mcname = env.callObjectMethod(cls->getJavaObject(), Globals::methodClassGetName,
Method.cpp:            nullptr).as<jstring>();
Method.cpp:        Env::GetStringUtfChars mcn(env, mcname);
Method.cpp:        QoreString mname;
Method.cpp:        getName(mname);
Method.cpp:        QoreStringMaker err("Too many arguments (%d) in invocation to Java method %s.%s() (takes %d arg%s)",
Method.cpp:            static_cast<int>(argCount), mcn.c_str(), mname.c_str(), static_cast<int>(paramCount),
Method.cpp:            paramCount == 1 ? "" : "s");
Method.cpp:        throw BasicException(err.c_str());
Method.cpp:    }
Method.cpp:    LocalReference<jobjectArray> jargs =
Method.cpp:        env.newObjectArray(paramCount + array_offset, Globals::classObject).as<jobjectArray>();
Method.cpp:    for (size_t index = 0; index < paramCount; ++index) {
Method.cpp:        // process varargs with remaining arguments or with a single argument if appropriate
Method.cpp:        if (varargs && args && (index == (paramCount - 1))
Method.cpp:            && !(argCount == paramCount && args->retrieveEntry(index + arg_offset).getType() == NT_LIST)) {
Method.cpp:            // get array component type
Method.cpp:            Env env;
Method.cpp:            LocalReference<jclass> ccls = env.callObjectMethod(paramTypes[index].second,
Method.cpp:                Globals::methodClassGetComponentType, nullptr).as<jclass>();
Method.cpp:            env.setObjectArrayElement(jargs, index + array_offset,
Method.cpp:                Array::toObjectArray(args, ccls, index + arg_offset, jpc).release());
Method.cpp:            break;
Method.cpp:        }
Method.cpp:        assert(!args || args->empty() || (index < argCount));
Method.cpp:        QoreValue qv = args ? args->retrieveEntry(index + arg_offset) : QoreValue();
Method.cpp:        env.setObjectArrayElement(jargs, index + array_offset, QoreToJava::toObject(env, qv, paramTypes[index].second,
Method.cpp:            jpc));
Method.cpp:    }
Method.cpp:    return jargs;
Method.cpp:}
Method.cpp:void BaseMethod::doObjectException(Env& env, jobject object) const {
Method.cpp:    LocalReference<jclass> ocls = env.getObjectClass(object);
Method.cpp:    LocalReference<jstring> ocname = env.callObjectMethod(ocls, Globals::methodClassGetName, nullptr).as<jstring>();
Method.cpp:    Env::GetStringUtfChars ocn(env, ocname);
Method.cpp:    LocalReference<jstring> mcname = env.callObjectMethod(cls->getJavaObject(), Globals::methodClassGetName,
Method.cpp:        nullptr).as<jstring>();
Method.cpp:    Env::GetStringUtfChars mcn(env, mcname);
Method.cpp:    QoreString mname;
Method.cpp:    getName(mname);
Method.cpp:    QoreStringMaker desc("cannot invoke method %s.%s() on an object of class '%s' (%p)", mcn.c_str(), mname.c_str(),
Method.cpp:        ocn.c_str(), object);
Method.cpp:    throw BasicException(desc.c_str());
Method.cpp:}
Method.cpp:QoreValue BaseMethod::invoke(jobject object, const QoreListNode* args, QoreProgram* pgm, int offset) const {
Method.cpp:    Env env;
Method.cpp:    if (!env.isInstanceOf(object, cls->getJavaObject())) {
Method.cpp:        doObjectException(env, object);
Method.cpp:    }
Method.cpp:    // try to make a call through the dynamic API
Method.cpp:    JniExternalProgramData* jpc = pgm ? static_cast<JniExternalProgramData*>(pgm->getExternalData("jni")) : nullptr;
Method.cpp:    if (!jpc) {
Method.cpp:        // make a standard Java call; there will be no Java context for security access though
Method.cpp:        try {
Method.cpp:            std::vector<jvalue> jargs = convertArgs(env, args, offset, jpc);
Method.cpp:            switch (retValType) {
Method.cpp:                case Type::Boolean:
Method.cpp:                    return JavaToQore::convert(env.callBooleanMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Byte:
Method.cpp:                    return JavaToQore::convert(env.callByteMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Char:
Method.cpp:                    return JavaToQore::convert(env.callCharMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Short:
Method.cpp:                    return JavaToQore::convert(env.callShortMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Int:
Method.cpp:                    return JavaToQore::convert(env.callIntMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Long:
Method.cpp:                    return JavaToQore::convert(env.callLongMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Float:
Method.cpp:                    return JavaToQore::convert(env.callFloatMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Double:
Method.cpp:                    return JavaToQore::convert(env.callDoubleMethod(object, id, &jargs[0]));
Method.cpp:                case Type::Reference: {
Method.cpp:                    if (!pgm) {
Method.cpp:                        pgm = jni_get_program_context();
Method.cpp:                        if (!pgm) {
Method.cpp:                            pgm = Globals::getJavaContextProgram();
Method.cpp:                        }
Method.cpp:                    }
Method.cpp:                    return JavaToQore::convertToQore(env.callObjectMethod(object, id, &jargs[0]), pgm, false);
Method.cpp:                }
Method.cpp:                case Type::Void:
Method.cpp:                default:
Method.cpp:                    assert(retValType == Type::Void);
Method.cpp:                    env.callVoidMethod(object, id, &jargs[0]);
Method.cpp:                    return QoreValue();
Method.cpp:            }
Method.cpp:        } catch (JavaException& e) {
Method.cpp:            // workaround for https://bugs.openjdk.java.net/browse/JDK-8221530
Method.cpp:            if (e.checkBug_8221530()) {
Method.cpp:                throw;
Method.cpp:            }
Method.cpp:        }
Method.cpp:    }
Method.cpp:    assert(jpc);
Method.cpp:    // add the object as the first argument
Method.cpp:    LocalReference<jobjectArray> vargs = convertArgsToArray(env, args, offset, 0, jpc).release();
Method.cpp:    // public static Object invokeMethodNonvirtual(Method m, Object obj, Object... args);
Method.cpp:    std::vector<jvalue> jargs(3);
Method.cpp:    jargs[0].l = method;
Method.cpp:    jargs[1].l = object;
Method.cpp:    // process method arguments
Method.cpp:    jargs[2].l = vargs;
Method.cpp:    //printd(5, "BaseMethod::invoke() args: %d\n", (int)(args ? args->size() : 0));
Method.cpp:    return JavaToQore::convertToQore(env.callStaticObjectMethod(jpc->getDynamicApi(), jpc->getInvokeMethodId(),
Method.cpp:        &jargs[0]), pgm, jpc->getCompatTypes());
Method.cpp:}
Method.cpp:QoreValue BaseMethod::invokeNonvirtual(jobject object, const QoreListNode* args, QoreProgram* pgm, int offset) const {
Method.cpp:    Env env;
Method.cpp:    if (!env.isInstanceOf(object, cls->getJavaObject())) {
Method.cpp:        doObjectException(env, object);
Method.cpp:    }
Method.cpp:    assert(pgm);
Method.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Method.cpp:    assert(jpc);
Method.cpp:    // add the object as the first argument
Method.cpp:    LocalReference<jobjectArray> vargs = convertArgsToArray(env, args, offset, 0, jpc).release();
Method.cpp:    // public static Object invokeMethodNonvirtual(Method m, Object obj, Object... args);
Method.cpp:    std::vector<jvalue> jargs(3);
Method.cpp:    jargs[0].l = method;
Method.cpp:    jargs[1].l = object;
Method.cpp:    // process method arguments
Method.cpp:    jargs[2].l = vargs;
Method.cpp:    //printd(5, "BaseMethod::invokeNonvirtual() args: %d\n", (int)(args ? args->size() : 0));
Method.cpp:    return JavaToQore::convertToQore(env.callStaticObjectMethod(jpc->getDynamicApi(),
Method.cpp:        jpc->getInvokeMethodNonvirtualId(), &jargs[0]), pgm, jpc->getCompatTypes());
Method.cpp:}
Method.cpp:QoreValue BaseMethod::invokeStatic(const QoreListNode* args, QoreProgram* pgm, int offset) const {
Method.cpp:    Env env;
Method.cpp:    // make the call through the dynamic API
Method.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Method.cpp:    assert(jpc);
Method.cpp:    LocalReference<jarray> vargs = args ? convertArgsToArray(env, args, offset, 0, jpc).release() : nullptr;
Method.cpp:    std::vector<jvalue> jargs(3);
Method.cpp:    jargs[0].l = method;
Method.cpp:    jargs[1].l = nullptr;
Method.cpp:    // process method arguments
Method.cpp:    jargs[2].l = vargs;
Method.cpp:    //printd(5, "BaseMethod::invokeStatic() with jpc context; args: %d\n", (int)(args ? args->size() : 0));
Method.cpp:    return JavaToQore::convertToQore(env.callStaticObjectMethod(jpc->getDynamicApi(), jpc->getInvokeMethodId(),
Method.cpp:        &jargs[0]), pgm, jpc->getCompatTypes());
Method.cpp:}
Method.cpp:QoreValue BaseMethod::newInstance(const QoreListNode* args, QoreProgram* pgm) {
Method.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Method.cpp:    Env env;
Method.cpp:    std::vector<jvalue> jargs = convertArgs(env, args, 0, jpc);
Method.cpp:    return JavaToQore::convertToQore(env.newObject(cls->getJavaObject(), id, &jargs[0]), pgm, jpc->getCompatTypes());
Method.cpp:}
Method.cpp:LocalReference<jobject> BaseMethod::newQoreInstance(const QoreListNode* args, JniExternalProgramData* jpc) {
Method.cpp:    //printd(5, "BaseMethod::newQoreInstance() this: %p cls: %p id: %p args: %p (%d)\n", this, cls->getJavaObject(), id,
Method.cpp:    //    args, args ? (int)args->size() : 0);
Method.cpp:    // add the object as the first argument
Method.cpp:    Env env;
Method.cpp:    LocalReference<jobjectArray> vargs = convertArgsToArray(env, args, 0, 0, jpc).release();
Method.cpp:    assert((jobject)method);
Method.cpp:    //env.callVoidMethod(jpc->getClassLoader(), Globals::methodQoreURLClassLoaderSetContext, nullptr);
Method.cpp:    // public static Object newInstance(Constructor c, Object... args);
Method.cpp:    std::vector<jvalue> jargs(2);
Method.cpp:    jargs[0].l = method;
Method.cpp:    // process method arguments
Method.cpp:    jargs[1].l = vargs;
Method.cpp:    return env.callStaticObjectMethod(jpc->getDynamicApi(), jpc->getNewInstanceId(), &jargs[0]);
Method.cpp:}
Method.cpp:void BaseMethod::getName(QoreString& str) const {
Method.cpp:    Env env;
Method.cpp:    // get Method name
Method.cpp:    LocalReference<jstring> jmName = env.callObjectMethod(method, Globals::methodMethodGetName, nullptr).as<jstring>();
Method.cpp:    Env::GetStringUtfChars mName(env, jmName);
Method.cpp:    str.concat(mName.c_str());
Method.cpp:}
Method.cpp:int BaseMethod::getParamTypes(Env& env, type_vec_t& paramTypeInfo, type_vec_t& altParamTypeInfo,
Method.cpp:        QoreJniClassMap& clsmap, QoreProgram* pgm, bool literal) {
Method.cpp:    unsigned len = paramTypes.size();
Method.cpp:    if (len) {
Method.cpp:        paramTypeInfo.reserve(len);
Method.cpp:    }
Method.cpp:    for (size_t j = 0, e = paramTypes.size(); j < e; ++j) {
Method.cpp:        std::pair<Type, GlobalReference<jclass>>& i = paramTypes[j];
Method.cpp:        const QoreTypeInfo* altType = nullptr;
Method.cpp:        const QoreTypeInfo* ti = clsmap.getQoreType(i.second, altType, pgm, literal);
Method.cpp:        paramTypeInfo.push_back(ti);
Method.cpp:        //paramTypeInfo.push_back(clsmap.getQoreType(i.second, altType, pgm));
Method.cpp:        if (altType) {
Method.cpp:            if (altParamTypeInfo.empty()) {
Method.cpp:                altParamTypeInfo.reserve(len);
Method.cpp:            }
Method.cpp:            for (size_t k = altParamTypeInfo.size(), e = paramTypeInfo.size() - 1; k < e; ++k) {
Method.cpp:                altParamTypeInfo.push_back(paramTypeInfo[k]);
Method.cpp:            }
Method.cpp:            altParamTypeInfo.push_back(altType);
Method.cpp:        }
Method.cpp:    }
Method.cpp:    if (!altParamTypeInfo.empty()) {
Method.cpp:        for (size_t i = altParamTypeInfo.size(), e = paramTypeInfo.size(); i < e; ++i) {
Method.cpp:            altParamTypeInfo.push_back(paramTypeInfo[i]);
Method.cpp:        }
Method.cpp:    }
Method.cpp:    return 0;
Method.cpp:}
Method.cpp:const QoreTypeInfo* BaseMethod::getReturnTypeInfo(QoreJniClassMap& clsmap, QoreProgram* pgm) {
Method.cpp:    return clsmap.getQoreType(retValClass, pgm);
Method.cpp:}
Method.cpp:void BaseMethod::getSignature(QoreString& str) const {
Method.cpp:    Env env;
Method.cpp:    LocalReference<jstring> sig = env.callObjectMethod(method, Globals::methodMethodToGenericString, nullptr).as<jstring>();
Method.cpp:    Env::GetStringUtfChars msig(env, sig);
Method.cpp:    str.concat(msig.c_str());
Method.cpp:}
Method.cpp:} // namespace jni
Method.h://--------------------------------------------------------------------*- C++ -*-
Method.h://
Method.h://  Qore Programming Language
Method.h://
Method.h://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
Method.h://
Method.h://  Permission is hereby granted, free of charge, to any person obtaining a
Method.h://  copy of this software and associated documentation files (the "Software"),
Method.h://  to deal in the Software without restriction, including without limitation
Method.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Method.h://  and/or sell copies of the Software, and to permit persons to whom the
Method.h://  Software is furnished to do so, subject to the following conditions:
Method.h://
Method.h://  The above copyright notice and this permission notice shall be included in
Method.h://  all copies or substantial portions of the Software.
Method.h://
Method.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Method.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Method.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Method.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Method.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Method.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Method.h://  DEALINGS IN THE SOFTWARE.
Method.h://
Method.h://------------------------------------------------------------------------------
Method.h:///
Method.h:/// \file
Method.h:/// \brief Defines the Method class.
Method.h:///
Method.h://------------------------------------------------------------------------------
Method.h:#ifndef QORE_JNI_METHOD_H_
Method.h:#define QORE_JNI_METHOD_H_
Method.h:#include <qore/Qore.h>
Method.h:#include "Class.h"
Method.h:#include "Globals.h"
Method.h:#include "Env.h"
Method.h:#include <classfile_constants.h>
Method.h:namespace jni {
Method.h:class QoreJniClassMap;
Method.h:class JniExternalProgramData;
Method.h:/**
Method.h: * \brief Represents a Java method.
Method.h: */
Method.h:class BaseMethod : public ObjectBase {
Method.h:public:
Method.h:    /**
Method.h:     * \brief Constructor.
Method.h:     * \param cls the class associated with the method id
Method.h:     * \param id the method id
Method.h:     * \param isStatic true if the method is static
Method.h:     */
Method.h:    BaseMethod(Class* cls, jmethodID id, bool isStatic) : cls(cls), id(id) {
Method.h:        printd(LogLevel, "BaseMethod::BaseMethod(), this: %p, cls: %p, id: %p\n", this, cls, id);
Method.h:        Env env;
Method.h:        method = env.toReflectedMethod(cls->getJavaObject(), id, isStatic).makeGlobal();
Method.h:        init(env);
Method.h:        cls->ref();
Method.h:    }
Method.h:    /**
Method.h:     * \brief Constructor.
Method.h:     * \param method an instance of java.lang.reflect.Method
Method.h:     * \cls the Class object for the method
Method.h:     */
Method.h:    DLLLOCAL BaseMethod(jobject method, Class* cls) : cls(cls) {
Method.h:        Env env;
Method.h:        id = env.fromReflectedMethod(method);
Method.h:        this->method = GlobalReference<jobject>::fromLocal(method);
Method.h:        printd(LogLevel, "BaseMethod::BaseMethod() this: %p cls: %p id: %p\n", this, cls, id);
Method.h:        init(env);
Method.h:    }
Method.h:    /**
Method.h:     * \brief Constructor.
Method.h:     * \param method an instance of java.lang.reflect.Method
Method.h:     * \cls the Class object for the method
Method.h:     */
Method.h:    DLLLOCAL BaseMethod(Env& env, jobject method, Class* cls) : cls(cls) {
Method.h:        id = env.fromReflectedMethod(method);
Method.h:        this->method = GlobalReference<jobject>::fromLocal(method);
Method.h:        printd(LogLevel, "BaseMethod::BaseMethod() this: %p cls: %p id: %p\n", this, cls, id);
Method.h:        init(env);
Method.h:    }
Method.h:    DLLLOCAL ~BaseMethod() {
Method.h:        printd(LogLevel, "BaseMethod::~BaseMethod() this: %p cls: %p id: %p\n", this, cls, id);
Method.h:        /*
Method.h:        Env env;
Method.h:        LocalReference<jstring> clsName =
Method.h:            env.callObjectMethod(cls->getJavaObject(), Globals::methodClassGetName, nullptr).as<jstring>();
Method.h:        LocalReference<jstring> methName =
Method.h:            env.callObjectMethod(method, Globals::methodMethodGetName, nullptr).as<jstring>();
Method.h:        Env::GetStringUtfChars cname(env, clsName);
Method.h:        Env::GetStringUtfChars mname(env, methName);
Method.h:        printd(LogLevel, "BaseMethod::~BaseMethod() got %s::%s()\n", cname.c_str(), mname.c_str());
Method.h:        */
Method.h:    }
Method.h:    /**
Method.h:     * \brief throws a BasicException when the passed object's class does not match the expected class
Method.h:     */
Method.h:    DLLLOCAL void doObjectException(Env& env, jobject object) const;
Method.h:    /**
Method.h:     * \brief Invokes an instance method.
Method.h:     * \param object the instance
Method.h:     * \param args the arguments
Method.h:     * \param offset the offset in args for the arguments
Method.h:     * \return the return value
Method.h:     * \throws Exception if the arguments do not match the descriptor or if the method throws
Method.h:     */
Method.h:    QoreValue invoke(jobject object, const QoreListNode* args, QoreProgram* pgm, int offset = 0) const;
Method.h:    /**
Method.h:     * \brief Invokes an instance method non-virtually.
Method.h:     * \param object the instance
Method.h:     * \param args the arguments
Method.h:     * \param offset the offset in args for the arguments
Method.h:     * \return the return value
Method.h:     * \throws Exception if the arguments do not match the descriptor or if the method throws
Method.h:     */
Method.h:    QoreValue invokeNonvirtual(jobject object, const QoreListNode* args, QoreProgram* pgm, int offset = 0) const;
Method.h:    /**
Method.h:     * \brief Invokes a static method.
Method.h:     * \param args the arguments
Method.h:     * \param offset the offset in args for the arguments
Method.h:     * \return the return value
Method.h:     * \throws Exception if the arguments do not match the descriptor or if the method throws
Method.h:     */
Method.h:    QoreValue invokeStatic(const QoreListNode* args, QoreProgram* pgm, int offset = 0) const;
Method.h:    /**
Method.h:     * \brief Creates a new object by invoking a constructor.
Method.h:     * \param args the arguments
Method.h:     * \return the return value
Method.h:     * \throws Exception if the arguments do not match the descriptor or if the method throws
Method.h:     */
Method.h:    QoreValue newInstance(const QoreListNode* args, QoreProgram* pgm);
Method.h:    /**
Method.h:     * \brief Creates a new Qore object by invoking a constructor.
Method.h:     * \param args the arguments
Method.h:     * \return the return value
Method.h:     * \throws Exception if the arguments do not match the descriptor or if the method throws
Method.h:     */
Method.h:    LocalReference<jobject> newQoreInstance(const QoreListNode* args, JniExternalProgramData* jpc);
Method.h:    void getName(QoreString& str) const;
Method.h:    int isStatic() const {
Method.h:        return mods & JVM_ACC_STATIC;
Method.h:    }
Method.h:    bool isClassAbstract() const {
Method.h:        return cls->isAbstract();
Method.h:    }
Method.h:    jobject getJavaObject() const override {
Method.h:        return method;
Method.h:    }
Method.h:    ClassAccess getAccess() const {
Method.h:        ClassAccess access = Public;
Method.h:        if (mods & JVM_ACC_PRIVATE) {
Method.h:            access = Internal;
Method.h:        } else if (mods & JVM_ACC_PROTECTED) {
Method.h:            access = Private;
Method.h:        }
Method.h:        return access;
Method.h:    }
Method.h:    bool isAbstract() const {
Method.h:        return mods & JVM_ACC_ABSTRACT;
Method.h:    }
Method.h:    int64 getFlags() const {
Method.h:        int64 flags = QCF_NO_FLAGS;
Method.h:        if (varargs) {
Method.h:            flags |= QCF_USES_EXTRA_ARGS;
Method.h:        }
Method.h:        return flags;
Method.h:    }
Method.h:    DLLLOCAL int getParamTypes(Env& env, type_vec_t& paramTypeInfo, type_vec_t& altParamTypeInfo,
Method.h:            QoreJniClassMap& clsmap, QoreProgram* pgm = nullptr, bool literal = false);
Method.h:    DLLLOCAL const QoreTypeInfo* getReturnTypeInfo(QoreJniClassMap& clsmap, QoreProgram* pgm = nullptr);
Method.h:    DLLLOCAL void getSignature(QoreString& str) const;
Method.h:protected:
Method.h:    DLLLOCAL BaseMethod() {
Method.h:    }
Method.h:    //! converts Qore args to Java args for a method call
Method.h:    /** @param args the Qore args
Method.h:        @param arg_offset the offset in args where to start converting arguments
Method.h:        @param output_offset the offset in the return value where arguments start
Method.h:     */
Method.h:    DLLLOCAL std::vector<jvalue> convertArgs(Env& env, const QoreListNode* args, size_t arg_offset = 0,
Method.h:            JniExternalProgramData* jpc = nullptr) const;
Method.h:    //! converts Qore args to Java args for a method call
Method.h:    /** @param args the Qore args
Method.h:        @param arg_offset the offset in args where to start converting arguments
Method.h:        @param array_offset the offset in the return value where arguments start
Method.h:     */
Method.h:    DLLLOCAL LocalReference<jobjectArray> convertArgsToArray(Env& env, const QoreListNode* args,
Method.h:            size_t arg_offset = 0, size_t array_offset = 0, JniExternalProgramData* jpc = nullptr) const;
Method.h:    DLLLOCAL void init(Env &env);
Method.h:    Class* cls;
Method.h:    jmethodID id;
Method.h:    GlobalReference<jobject> method;     // the instance of java.lang.reflect.Method or java.lang.reflect.Constructor
Method.h:    GlobalReference<jclass> retValClass;
Method.h:    Type retValType;
Method.h:    std::vector<std::pair<Type, GlobalReference<jclass>>> paramTypes;
Method.h:    // method modifiers
Method.h:    int mods;
Method.h:    // varargs flag
Method.h:    bool varargs;
Method.h:};
Method.h:class Method : public BaseMethod {
Method.h:public:
Method.h:    /**
Method.h:     * \brief Constructor.
Method.h:     * \param cls the class associated with the method id
Method.h:     * \param id the method id
Method.h:     * \param isStatic true if the method is static
Method.h:     */
Method.h:    DLLLOCAL Method(Class* cls, jmethodID id, bool isStatic) : BaseMethod(cls, id, isStatic), cls_holder(cls) {
Method.h:        cls->ref();
Method.h:        cls_holder = cls;
Method.h:    }
Method.h:    /**
Method.h:     * \brief Constructor.
Method.h:     * \param method an instance of java.lang.reflect.Method
Method.h:     */
Method.h:    DLLLOCAL Method(jobject method) {
Method.h:        Env env;
Method.h:        cls = new Class(env.callObjectMethod(method, Globals::methodMethodGetDeclaringClass, nullptr).as<jclass>());
Method.h:        cls_holder = cls;
Method.h:        id = env.fromReflectedMethod(method);
Method.h:        this->method = GlobalReference<jobject>::fromLocal(method);
Method.h:        printd(LogLevel, "Method::Method() this: %p, cls: %p, id: %p\n", this, cls, id);
Method.h:        init(env);
Method.h:    }
Method.h:private:
Method.h:    SimpleRefHolder<Class> cls_holder;
Method.h:};
Method.h:} // namespace jni
Method.h:#endif // QORE_JNI_METHOD_H_
QoreToJava.h://--------------------------------------------------------------------*- C++ -*-
QoreToJava.h://
QoreToJava.h://  Qore Programming Language
QoreToJava.h://
QoreToJava.h://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreToJava.h://
QoreToJava.h://  Permission is hereby granted, free of charge, to any person obtaining a
QoreToJava.h://  copy of this software and associated documentation files (the "Software"),
QoreToJava.h://  to deal in the Software without restriction, including without limitation
QoreToJava.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
QoreToJava.h://  and/or sell copies of the Software, and to permit persons to whom the
QoreToJava.h://  Software is furnished to do so, subject to the following conditions:
QoreToJava.h://
QoreToJava.h://  The above copyright notice and this permission notice shall be included in
QoreToJava.h://  all copies or substantial portions of the Software.
QoreToJava.h://
QoreToJava.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
QoreToJava.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
QoreToJava.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
QoreToJava.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
QoreToJava.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
QoreToJava.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
QoreToJava.h://  DEALINGS IN THE SOFTWARE.
QoreToJava.h://
QoreToJava.h://------------------------------------------------------------------------------
QoreToJava.h:///
QoreToJava.h:/// \file
QoreToJava.h:/// \brief Defines the QoreToJava class
QoreToJava.h://------------------------------------------------------------------------------
QoreToJava.h:#ifndef QORE_JNI_QORETOJAVA_H_
QoreToJava.h:#define QORE_JNI_QORETOJAVA_H_
QoreToJava.h:#include <qore/Qore.h>
QoreToJava.h:#include <jni.h>
QoreToJava.h:#include "Array.h"
QoreToJava.h:#include "LocalReference.h"
QoreToJava.h:#include "Object.h"
QoreToJava.h:#include "defs.h"
QoreToJava.h:#include "ModifiedUtf8String.h"
QoreToJava.h:#include "QoreJniClassMap.h"
QoreToJava.h:#include "Env.h"
QoreToJava.h:namespace jni {
QoreToJava.h:/**
QoreToJava.h: * \brief Provides functions for converting Qore values to Java.
QoreToJava.h: *
QoreToJava.h: * Although the majority of the methods is trivial, their purpose is to have a single point where a given conversion
QoreToJava.h: * is performed. This will allow to change the conversion (e.g. add range checking) in the future consistently.
QoreToJava.h: */
QoreToJava.h:class QoreToJava {
QoreToJava.h:public:
QoreToJava.h:    static jboolean toBoolean(const QoreValue& value) {
QoreToJava.h:        return value.getAsBool() ? JNI_TRUE : JNI_FALSE;
QoreToJava.h:    }
QoreToJava.h:    static jbyte toByte(const QoreValue& value) {
QoreToJava.h:        return static_cast<jbyte>(value.getAsBigInt());
QoreToJava.h:    }
QoreToJava.h:    static jchar toChar(const QoreValue& value) {
QoreToJava.h:        return static_cast<jchar>(value.getAsBigInt());
QoreToJava.h:    }
QoreToJava.h:    static jdouble toDouble(const QoreValue& value) {
QoreToJava.h:        return static_cast<jdouble>(value.getAsFloat());
QoreToJava.h:    }
QoreToJava.h:    static jfloat toFloat(const QoreValue& value) {
QoreToJava.h:        return static_cast<jfloat>(value.getAsFloat());
QoreToJava.h:    }
QoreToJava.h:    static jint toInt(const QoreValue& value) {
QoreToJava.h:        return static_cast<jint>(value.getAsBigInt());
QoreToJava.h:    }
QoreToJava.h:    static jlong toLong(const QoreValue& value) {
QoreToJava.h:        return static_cast<jlong>(value.getAsBigInt());
QoreToJava.h:    }
QoreToJava.h:    static jshort toShort(const QoreValue& value) {
QoreToJava.h:        return static_cast<jshort>(value.getAsBigInt());
QoreToJava.h:    }
QoreToJava.h:    static jobject toObject(Env& env, const QoreValue& value, jclass cls, JniExternalProgramData* jpc = nullptr);
QoreToJava.h:    static jobject toAnyObject(Env& env, const QoreValue& value, JniExternalProgramData* jpc = nullptr);
QoreToJava.h:    static jobject makeMap(const QoreHashNode& h, jclass cls, JniExternalProgramData* jpc = nullptr);
QoreToJava.h:    static jbyteArray makeByteArray(Env& env, const BinaryNode& b);
QoreToJava.h:    static jobject makeBigDecimal(Env& env, const QoreNumberNode& n);
QoreToJava.h:    static void wrapException(ExceptionSink& src) {
QoreToJava.h:        Env env;
QoreToJava.h:        wrapException(env, src);
QoreToJava.h:    }
QoreToJava.h:    static void wrapException(Env& env, ExceptionSink& src) {
QoreToJava.h:        QoreValue n = src.getExceptionArg();
QoreToJava.h:        if (n.getType() == NT_OBJECT) {
QoreToJava.h:            const QoreObject* o = n.get<const QoreObject>();
QoreToJava.h:            if (o->getClass(CID_THROWABLE) != nullptr) {
QoreToJava.h:                ExceptionSink tempSink;
QoreToJava.h:                SimpleRefHolder<QoreJniPrivateData> obj(
QoreToJava.h:                    static_cast<QoreJniPrivateData*>(o->getReferencedPrivateData(CID_THROWABLE, &tempSink))
QoreToJava.h:                );
QoreToJava.h:                if (!tempSink) {
QoreToJava.h:                    env.throwException(static_cast<jthrowable>(obj->getObject()));
QoreToJava.h:                    src.clear();
QoreToJava.h:                    return;
QoreToJava.h:                }
QoreToJava.h:            }
QoreToJava.h:        }
QoreToJava.h:        std::unique_ptr<ExceptionSink> xsink = std::unique_ptr<ExceptionSink>(new ExceptionSink());
QoreToJava.h:        xsink->assimilate(src);
QoreToJava.h:        jvalue arg;
QoreToJava.h:        arg.j = reinterpret_cast<jlong>(xsink.get());
QoreToJava.h:        LocalReference<jobject> obj = env.newObject(Globals::classQoreExceptionWrapper,
QoreToJava.h:            Globals::ctorQoreExceptionWrapper, &arg);
QoreToJava.h:        xsink.release();
QoreToJava.h:        // from now on, the Java instance of QoreExceptionWrapper is responsible for the exception sink
QoreToJava.h:        env.throwException(obj.as<jthrowable>());
QoreToJava.h:    }
QoreToJava.h:private:
QoreToJava.h:    QoreToJava() = delete;
QoreToJava.h:};
QoreToJava.h:} // namespace jni
QoreToJava.h:#endif // QORE_JNI_QORETOJAVA_H_
Jvm.h://--------------------------------------------------------------------*- C++ -*-
Jvm.h://
Jvm.h://  Qore Programming Language
Jvm.h://
Jvm.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Jvm.h://
Jvm.h://  Permission is hereby granted, free of charge, to any person obtaining a
Jvm.h://  copy of this software and associated documentation files (the "Software"),
Jvm.h://  to deal in the Software without restriction, including without limitation
Jvm.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Jvm.h://  and/or sell copies of the Software, and to permit persons to whom the
Jvm.h://  Software is furnished to do so, subject to the following conditions:
Jvm.h://
Jvm.h://  The above copyright notice and this permission notice shall be included in
Jvm.h://  all copies or substantial portions of the Software.
Jvm.h://
Jvm.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jvm.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jvm.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Jvm.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Jvm.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Jvm.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Jvm.h://  DEALINGS IN THE SOFTWARE.
Jvm.h://
Jvm.h://------------------------------------------------------------------------------
Jvm.h:///
Jvm.h:/// \file
Jvm.h:/// \brief Defines the Jvm class.
Jvm.h:///
Jvm.h://------------------------------------------------------------------------------
Jvm.h:#ifndef QORE_JNI_JVM_H_
Jvm.h:#define QORE_JNI_JVM_H_
Jvm.h:#include <qore/Qore.h>
Jvm.h:#include <cassert>
Jvm.h:#include <jni.h>
Jvm.h:namespace jni {
Jvm.h:/**
Jvm.h: * \brief Provides access to JNI Invocation API.
Jvm.h: */
Jvm.h:class Jvm {
Jvm.h:public:
Jvm.h:    /**
Jvm.h:     * \brief Returns the Env object associated with this thread.
Jvm.h:     *
Jvm.h:     * Assumes that the thread has been attached to the JVM.
Jvm.h:     * \return the Env object associated with this thread
Jvm.h:     */
Jvm.h:    static JNIEnv* getEnv() {
Jvm.h:        assert(env != nullptr);
Jvm.h:        return env;
Jvm.h:    }
Jvm.h:    /**
Jvm.h:     * \brief Sets the Env object associated with this thread.
Jvm.h:     * \param env the Env object associated with this thread
Jvm.h:     */
Jvm.h:    static void setEnv(JNIEnv* env) {
Jvm.h:        Jvm::env = env;
Jvm.h:    }
Jvm.h:    /**
Jvm.h:     * \brief Returns the Env object associated with this thread. Attaches the thread to the JVM if needed.
Jvm.h:     * \param new_thread an output variable indicating if this thread is attaching to the JVM for the first time or not
Jvm.h:     * \return the Env object associated with this thread
Jvm.h:     * \throws UnableToAttachException if the thread cannot be attached to the JVM
Jvm.h:     */
Jvm.h:    static JNIEnv* attachAndGetEnv(bool& new_attach);
Jvm.h:    /**
Jvm.h:     * \brief Returns the Env object associated with this thread. Attaches the thread to the JVM if needed.
Jvm.h:     * \return the Env object associated with this thread
Jvm.h:     * \throws UnableToAttachException if the thread cannot be attached to the JVM
Jvm.h:     */
Jvm.h:    static JNIEnv* attachAndGetEnv();
Jvm.h:    /**
Jvm.h:     * \brief Creates the JVM.
Jvm.h:     * \return 0 if successful
Jvm.h:     */
Jvm.h:    static QoreStringNode* createVM();
Jvm.h:    /**
Jvm.h:     * \brief Sets the VM pointer.
Jvm.h:     */
Jvm.h:    static void setVmPtr(JavaVM* vm) {
Jvm.h:        assert(!Jvm::vm);
Jvm.h:        Jvm::vm = vm;
Jvm.h:    }
Jvm.h:    /**
Jvm.h:     * \brief Destroys the JVM.
Jvm.h:     */
Jvm.h:    static void destroyVM();
Jvm.h:    /**
Jvm.h:     * \brief Detaches the current thread from the JVM.
Jvm.h:     */
Jvm.h:    static void threadCleanup();
Jvm.h:private:
Jvm.h:    /**
Jvm.h:     * \brief This is a static class - no instances are allowed.
Jvm.h:     */
Jvm.h:    Jvm() = delete;
Jvm.h:private:
Jvm.h:    static JavaVM* vm;
Jvm.h:    static thread_local JNIEnv* env;
Jvm.h:};
Jvm.h:} // namespace jni
Jvm.h:#endif // QORE_JNI_JVM_H_
defs.h://--------------------------------------------------------------------*- C++ -*-
defs.h://
defs.h://  Qore Programming Language
defs.h://
defs.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
defs.h://
defs.h://  Permission is hereby granted, free of charge, to any person obtaining a
defs.h://  copy of this software and associated documentation files (the "Software"),
defs.h://  to deal in the Software without restriction, including without limitation
defs.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
defs.h://  and/or sell copies of the Software, and to permit persons to whom the
defs.h://  Software is furnished to do so, subject to the following conditions:
defs.h://
defs.h://  The above copyright notice and this permission notice shall be included in
defs.h://  all copies or substantial portions of the Software.
defs.h://
defs.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
defs.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
defs.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
defs.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
defs.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
defs.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
defs.h://  DEALINGS IN THE SOFTWARE.
defs.h://
defs.h://------------------------------------------------------------------------------
defs.h:///
defs.h:/// \file
defs.h:/// \brief Contains various definitions.
defs.h:///
defs.h://------------------------------------------------------------------------------
defs.h:#ifndef QORE_JNI_DEFS_H_
defs.h:#define QORE_JNI_DEFS_H_
defs.h:#include <qore/Qore.h>
defs.h:#include "jni.h"
defs.h:#include <stdarg.h>
defs.h:#include <memory>
defs.h:namespace jni {
defs.h:/**
defs.h: * \brief Logging level used by the JNI module in calls to printd().
defs.h: */
defs.h:constexpr int LogLevel = 10;
defs.h:/**
defs.h: * \brief Base class for exceptions.
defs.h: */
defs.h:class Exception : public AbstractException {
defs.h:public:
defs.h:    /**
defs.h:     * \brief Default virtual destructor.
defs.h:     */
defs.h:    virtual ~Exception() = default;
defs.h:    /**
defs.h:     * \brief ignore the exception
defs.h:     */
defs.h:    virtual void ignore() = 0;
defs.h:    Exception(Exception &&) = default;
defs.h:    Exception &operator=(Exception &&) = default;
defs.h:protected:
defs.h:    /**
defs.h:     * \brief Default constructor.
defs.h:     */
defs.h:    Exception() = default;
defs.h:private:
defs.h:    Exception(const Exception &) = delete;
defs.h:    Exception &operator=(const Exception &) = delete;
defs.h:};
defs.h:/**
defs.h: * \brief An exception that can be safely ignored with no action
defs.h: */
defs.h:class IgnorableException : public Exception {
defs.h:    DLLLOCAL void ignore() override {
defs.h:    }
defs.h:};
defs.h:/**
defs.h: * \brief An exception thrown when the current thread cannot be attached to the JVM.
defs.h: */
defs.h:class UnableToAttachException : public IgnorableException {
defs.h:public:
defs.h:    /**
defs.h:     * \brief Constructor.
defs.h:     * \param err the error code
defs.h:     */
defs.h:    DLLLOCAL UnableToAttachException(jint err) : err(err) {
defs.h:        printd(LogLevel, "JNI: error attaching thread %d, err: %d\n", q_gettid(), err);
defs.h:    }
defs.h:    DLLLOCAL void convert(ExceptionSink *xsink) override {
defs.h:        xsink->raiseException("JNI-ERROR", "Unable to attach thread to the JVM, error %d", err);
defs.h:    }
defs.h:private:
defs.h:    jint err;
defs.h:};
defs.h:/**
defs.h: * \brief An exception thrown when the current thread cannot be registered with Qore.
defs.h: */
defs.h:class UnableToRegisterException : public IgnorableException {
defs.h:public:
defs.h:    /**
defs.h:     * \brief Constructor.
defs.h:     */
defs.h:    DLLLOCAL UnableToRegisterException() {
defs.h:        printd(LogLevel, "JNI: error registering thread %ld with Qore\n", pthread_self());
defs.h:    }
defs.h:    DLLLOCAL void convert(ExceptionSink *xsink) override {
defs.h:        xsink->raiseException("JNI-ERROR", "Unable to register thread with Qore");
defs.h:    }
defs.h:};
defs.h:/**
defs.h: * \brief A C++ exception representing a Java exception.
defs.h: */
defs.h:class JavaException : public Exception {
defs.h:public:
defs.h:    /**
defs.h:     * \brief Constructor.
defs.h:     */
defs.h:    DLLLOCAL JavaException() {
defs.h:    }
defs.h:    DLLLOCAL void convert(ExceptionSink* xsink) override;
defs.h:    DLLLOCAL void ignore() override;
defs.h:    DLLLOCAL void ignoreOrRethrowNoClass();
defs.h:    //! returns true if the exception should be rethrown
defs.h:    /** workaround for https://bugs.openjdk.java.net/browse/JDK-8221530
defs.h:    */
defs.h:    DLLLOCAL bool checkBug_8221530();
defs.h:    DLLLOCAL jthrowable save();
defs.h:    DLLLOCAL void restore(jthrowable je);
defs.h:    DLLLOCAL QoreStringNode* toString(bool clear = true) const;
defs.h:};
defs.h:/**
defs.h: * \brief Basic exception with a simple string messsage.
defs.h: */
defs.h:class BasicException : public IgnorableException {
defs.h:public:
defs.h:   /**
defs.h:    * \brief Constructor.
defs.h:    * \param message the exception message
defs.h:    */
defs.h:   DLLLOCAL BasicException(std::string message) : message(std::move(message)) {
defs.h:   }
defs.h:   DLLLOCAL void convert(ExceptionSink *xsink) override {
defs.h:      xsink->raiseException("JNI-ERROR", message.c_str());
defs.h:   }
defs.h:private:
defs.h:   std::string message;
defs.h:};
defs.h:/**
defs.h: * \brief Basic exception with a simple string messsage.
defs.h: */
defs.h:class QoreJniException : public IgnorableException {
defs.h:public:
defs.h:    /**
defs.h:     * \brief Constructor.
defs.h:     * \param err the exception error string
defs.h:     * \param message the exception message
defs.h:     */
defs.h:    DLLLOCAL QoreJniException(std::string err, const char* message, ...) : err(std::move(err)) {
defs.h:        va_list args;
defs.h:        while (true) {
defs.h:            va_start(args, message);
defs.h:            int rc = desc.vsprintf(message, args);
defs.h:            va_end(args);
defs.h:            if (!rc)
defs.h:                break;
defs.h:        }
defs.h:    }
defs.h:    DLLLOCAL const char* what(QoreString& str) {
defs.h:        str.sprintf("%s: %s", err.c_str(), desc.c_str());
defs.h:        return str.c_str();
defs.h:    }
defs.h:    DLLLOCAL void convert(ExceptionSink *xsink) override {
defs.h:        xsink->raiseException(err.c_str(), desc.c_str());
defs.h:    }
defs.h:private:
defs.h:    std::string err;
defs.h:    QoreString desc;
defs.h:};
defs.h:/**
defs.h: * \brief A C++ wrapper for an exception raised in the ExceptionSink.
defs.h: */
defs.h:class XsinkException : public Exception {
defs.h:public:
defs.h:   /**
defs.h:    * \brief Constructor.
defs.h:    * \param xsink the exception sink with an exception
defs.h:    */
defs.h:   DLLLOCAL XsinkException(ExceptionSink &xsink) : sink(new ExceptionSink()) {
defs.h:      sink->assimilate(xsink);
defs.h:   }
defs.h:   DLLLOCAL void convert(ExceptionSink *xsink) override {
defs.h:      xsink->assimilate(*sink);
defs.h:   }
defs.h:   DLLLOCAL virtual void ignore() override {
defs.h:      sink->clear();
defs.h:   }
defs.h:private:
defs.h:   std::unique_ptr<ExceptionSink> sink;
defs.h:};
defs.h:class QoreThreadAttacher {
defs.h:public:
defs.h:    DLLLOCAL QoreThreadAttacher() : attached(false) {
defs.h:    }
defs.h:    DLLLOCAL ~QoreThreadAttacher() {
defs.h:        if (attached) {
defs.h:            detach();
defs.h:        }
defs.h:    }
defs.h:    // returns 0 = attached, -1 = already attached
defs.h:    DLLLOCAL int attach() {
defs.h:        if (!attached) {
defs.h:            attachIntern();
defs.h:            return 0;
defs.h:        }
defs.h:        return -1;
defs.h:    }
defs.h:    DLLLOCAL void detach() {
defs.h:        if (attached) {
defs.h:            detachIntern();
defs.h:        }
defs.h:    }
defs.h:    DLLLOCAL operator bool() const {
defs.h:        return attached;
defs.h:    }
defs.h:private:
defs.h:    bool attached;
defs.h:    DLLLOCAL void attachIntern() {
defs.h:        assert(!attached);
defs.h:        int rc = q_register_foreign_thread();
defs.h:        if (rc == QFT_OK) {
defs.h:            attached = true;
defs.h:            printd(LogLevel, "Thread %ld attached to Qore\n", pthread_self());
defs.h:        } else if (rc != QFT_REGISTERED) {
defs.h:            throw UnableToRegisterException();
defs.h:        }
defs.h:    }
defs.h:    DLLLOCAL void detachIntern() {
defs.h:        assert(attached);
defs.h:        printd(LogLevel, "Detaching thread %ld from Qore\n", pthread_self());
defs.h:        q_deregister_foreign_thread();
defs.h:        attached = false;
defs.h:    }
defs.h:};
defs.h:// class that serves to attach a thread to Qore if not already attached
defs.h:// if attached in the constructor, then it will detach in the destructor
defs.h:class QoreThreadAttachHelper {
defs.h:public:
defs.h:    DLLLOCAL void attach() {
defs.h:        attached = !attacher.attach();
defs.h:    }
defs.h:    DLLLOCAL ~QoreThreadAttachHelper() {
defs.h:        if (attached) {
defs.h:            attacher.detach();
defs.h:        }
defs.h:    }
defs.h:private:
defs.h:    QoreThreadAttacher attacher;
defs.h:    bool attached = false;
defs.h:};
defs.h:extern thread_local QoreThreadAttacher qoreThreadAttacher;
defs.h:} // namespace jni
defs.h:extern "C" DLLEXPORT int jni_module_import(ExceptionSink* xsink, QoreProgram* pgm, const char* import);
defs.h:extern "C" DLLEXPORT QoreNamespace* jni_module_find_create_java_namespace(QoreString& arg, QoreProgram* pgm);
defs.h:#endif // QORE_JNI_DEFS_H_
ql_jni.qpp:/* -*- mode: c++; indent-tabs-mode: nil -*- */
ql_jni.qpp:/** @file ql_jni.qpp Definition of functions in the Jni namespace */
ql_jni.qpp:/*
ql_jni.qpp:    Qore Programming Language
ql_jni.qpp:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
ql_jni.qpp:    Permission is hereby granted, free of charge, to any person obtaining a
ql_jni.qpp:    copy of this software and associated documentation files (the "Software"),
ql_jni.qpp:    to deal in the Software without restriction, including without limitation
ql_jni.qpp:    the rights to use, copy, modify, merge, publish, distribute, sublicense,
ql_jni.qpp:    and/or sell copies of the Software, and to permit persons to whom the
ql_jni.qpp:    Software is furnished to do so, subject to the following conditions:
ql_jni.qpp:    The above copyright notice and this permission notice shall be included in
ql_jni.qpp:    all copies or substantial portions of the Software.
ql_jni.qpp:    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ql_jni.qpp:    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ql_jni.qpp:    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ql_jni.qpp:    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ql_jni.qpp:    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
ql_jni.qpp:    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
ql_jni.qpp:    DEALINGS IN THE SOFTWARE.
ql_jni.qpp:    Note that the Qore library is released under a choice of three open-source
ql_jni.qpp:    licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
ql_jni.qpp:    information.
ql_jni.qpp:*/
ql_jni.qpp:#include "Functions.h"
ql_jni.qpp:#include "Method.h"
ql_jni.qpp:#include "QoreJniClassMap.h"
ql_jni.qpp:#include "JavaToQore.h"
ql_jni.qpp:using namespace jni;
ql_jni.qpp:/** @defgroup JNI functions.
ql_jni.qpp: */
ql_jni.qpp:///@{
ql_jni.qpp:namespace Jni::org::qore::jni;
ql_jni.qpp://! Returns the version of the JNI API.
ql_jni.qpp:/**
ql_jni.qpp:    @return the version of the JNI API
ql_jni.qpp: */
ql_jni.qpp:string get_version() {
ql_jni.qpp:    try {
ql_jni.qpp:        return jni::Functions::getVersion();
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Loads a Java class with given name.
ql_jni.qpp:/**
ql_jni.qpp:    @param name the name of the class to load in internal (\c "java/lang/String") format
ql_jni.qpp:    @return the loaded class
ql_jni.qpp:    @throws JNI-ERROR if the class cannot be loaded
ql_jni.qpp:    @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:    Class c = Jni::load_class("java/lang/String");
ql_jni.qpp:    @endcode
ql_jni.qpp: */
ql_jni.qpp:Jni::java::lang::Class load_class(string name) {
ql_jni.qpp:    try {
ql_jni.qpp:        QoreProgram* pgm = jni::jni_get_program_context();
ql_jni.qpp:        //printd(5, "load_class() pgm: %p\n", pgm);
ql_jni.qpp:        return new QoreObject(QC_CLASS, pgm, new QoreJniPrivateData(qjcm.findLoadClass(*name, pgm)));
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Invokes a method with the given arguments in a virtual way; meaning that the method in the most derived class is executed; not necessarily the method passed as an argument
ql_jni.qpp:/** @param method the method to invoke
ql_jni.qpp:    @param object the object to use to invoke the method; for static methods, this argument can be @ref nothing
ql_jni.qpp:    @note
ql_jni.qpp:    - reflection is not used, so exceptions are thrown directly (i.e. not wrapped as \c java.lang.reflect.InvocationTargetException objects)
ql_jni.qpp:    - for static method invocations, this function is identical to @ref invoke_nonvirtual()
ql_jni.qpp: */
ql_jni.qpp:Jni::java::lang::Object invoke(Jni::java::lang::reflect::Method[QoreJniPrivateData] method, *Jni::java::lang::Object[QoreJniPrivateData] object, ...) {
ql_jni.qpp:    ReferenceHolder<QoreJniPrivateData> m_holder(method, xsink);
ql_jni.qpp:    ReferenceHolder<QoreJniPrivateData> obj_holder(object, xsink);
ql_jni.qpp:    try {
ql_jni.qpp:        Env env;
ql_jni.qpp:        SimpleRefHolder<Class> cls(new Class(env.callObjectMethod(method->getObject(),
ql_jni.qpp:            Globals::methodMethodGetDeclaringClass, nullptr).as<jclass>()));
ql_jni.qpp:        BaseMethod m(method->getObject(), *cls);
ql_jni.qpp:        QoreProgram* pgm = jni_get_program_context();
ql_jni.qpp:        return object
ql_jni.qpp:            ? m.invoke(object->getObject(), args, pgm, 2)
ql_jni.qpp:            : m.invokeStatic(args, pgm, 2);
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Invokes a method with the given arguments in a non-virtual way; meaning that even if the object provided is a child class, the method given in the first argument is executed
ql_jni.qpp:/** @param method the method to invoke
ql_jni.qpp:    @param object the object to use to invoke the method; for static methods, this argument can be @ref nothing
ql_jni.qpp:    @note
ql_jni.qpp:    - reflection is not used, so exceptions are thrown directly (i.e. not wrapped as \c java.lang.reflect.InvocationTargetException objects)
ql_jni.qpp:    - for static method invocations, this function is identical to @ref invoke()
ql_jni.qpp: */
ql_jni.qpp:Jni::java::lang::Object invoke_nonvirtual(Jni::java::lang::reflect::Method[QoreJniPrivateData] method, *Jni::java::lang::Object[QoreJniPrivateData] object, ...) {
ql_jni.qpp:    ReferenceHolder<QoreJniPrivateData> m_holder(method, xsink);
ql_jni.qpp:    ReferenceHolder<QoreJniPrivateData> obj_holder(object, xsink);
ql_jni.qpp:    try {
ql_jni.qpp:        Env env;
ql_jni.qpp:        SimpleRefHolder<Class> cls(new Class(env.callObjectMethod(method->getObject(), Globals::methodMethodGetDeclaringClass, nullptr).as<jclass>()));
ql_jni.qpp:        BaseMethod m(method->getObject(), *cls);
ql_jni.qpp:         QoreProgram* pgm = jni_get_program_context();
ql_jni.qpp:       return object
ql_jni.qpp:            ? m.invokeNonvirtual(object->getObject(), args, pgm, 2)
ql_jni.qpp:            : m.invokeStatic(args, pgm, 2);
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Creates a Java object that implements given interface using an invocation handler.
ql_jni.qpp:/**
ql_jni.qpp:    @param invocationHandler the invocation handler
ql_jni.qpp:    @param cls the interface to implement
ql_jni.qpp:    @return a Java object that implements the interface by calling the invocation handler
ql_jni.qpp:    @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:    Class runnableClass = Jni::load_class("java/lang/Runnable");
ql_jni.qpp:    QoreInvocationHandler h(any sub(Method m, *list args) { doRun(); });
ql_jni.qpp:    Object runnableInstance = Jni::implement_interface(h, runnableClass);
ql_jni.qpp:    # runnableInstance now has a Java method void run() that calls Qore function doRun()
ql_jni.qpp:    @endcode
ql_jni.qpp: */
ql_jni.qpp:Jni::java::lang::Object implement_interface(Jni::org::qore::jni::QoreInvocationHandler[jni::InvocationHandler] invocationHandler, Jni::java::lang::Class[QoreJniPrivateData] cls) {
ql_jni.qpp:    SimpleRefHolder<jni::InvocationHandler> invocationHandlerHolder(invocationHandler);
ql_jni.qpp:    SimpleRefHolder<QoreJniPrivateData> classHolder(cls);
ql_jni.qpp:    // get Qore class for Class object
ql_jni.qpp:    jni::Env env;
ql_jni.qpp:    jni::LocalReference<jstring> clsName = env.callObjectMethod(cls->getObject(), jni::Globals::methodClassGetName, nullptr).as<jstring>();
ql_jni.qpp:    jni::Env::GetStringUtfChars cname(env, clsName);
ql_jni.qpp:    QoreString jcname(cname.c_str());
ql_jni.qpp:    jcname.replaceAll(".", "/");
ql_jni.qpp:    LocalReference<jclass> jc = cls->makeLocal().as<jclass>();
ql_jni.qpp:    QoreProgram* pgm = jni_get_program_context();
ql_jni.qpp:    QoreClass* qc = qjcm.findCreateQoreClass(env, jc, pgm);
ql_jni.qpp:    try {
ql_jni.qpp:        return new QoreObject(qc, jni::jni_get_program_context(), new QoreJniPrivateData(jni::Functions::implementInterface(nullptr, invocationHandler, jc)));
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Creates a Java object that implements given interface using an invocation handler using an explicit class loader.
ql_jni.qpp:/**
ql_jni.qpp:    @param classLoader the class loader that loaded the interface
ql_jni.qpp:    @param invocationHandler the invocation handler
ql_jni.qpp:    @param cls the interface to implement
ql_jni.qpp:    @return a Java object that implements the interface by calling the invocation handler
ql_jni.qpp:    @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:    ClassLoader classLoader = ...;
ql_jni.qpp:    Class runnableClass = load_class("java/lang/Runnable");
ql_jni.qpp:    QoreInvocationHandler h(any sub(Method m, *list args) { doRun(); });
ql_jni.qpp:    Object runnableInstance = Jni::implement_interface(classLoader, h, runnableClass);
ql_jni.qpp:    # runnableInstance now has a Java method void run() that calls Qore function doRun()
ql_jni.qpp:    @endcode
ql_jni.qpp: */
ql_jni.qpp:Jni::java::lang::Object implement_interface(Jni::java::lang::ClassLoader[QoreJniPrivateData] classLoader, Jni::org::qore::jni::QoreInvocationHandler[jni::InvocationHandler] invocationHandler, Jni::java::lang::Class[QoreJniPrivateData] cls) {
ql_jni.qpp:    SimpleRefHolder<QoreJniPrivateData> classLoaderHolder(classLoader);
ql_jni.qpp:    SimpleRefHolder<jni::InvocationHandler> invocationHandlerHolder(invocationHandler);
ql_jni.qpp:    SimpleRefHolder<QoreJniPrivateData> classHolder(cls);
ql_jni.qpp:    // get Qore class for Class object
ql_jni.qpp:    jni::Env env;
ql_jni.qpp:    jni::LocalReference<jstring> clsName = env.callObjectMethod(cls->getObject(), jni::Globals::methodClassGetName, nullptr).as<jstring>();
ql_jni.qpp:    jni::Env::GetStringUtfChars cname(env, clsName);
ql_jni.qpp:    QoreString jcname(cname.c_str());
ql_jni.qpp:    jcname.replaceAll(".", "/");
ql_jni.qpp:    LocalReference<jclass> jc = cls->makeLocal().as<jclass>();
ql_jni.qpp:    QoreProgram* pgm = jni_get_program_context();
ql_jni.qpp:    QoreClass* qc = qjcm.findCreateQoreClass(env, jc, pgm);
ql_jni.qpp:    try {
ql_jni.qpp:        return new QoreObject(qc, jni::jni_get_program_context(), new QoreJniPrivateData(jni::Functions::implementInterface(classLoader->getObject(), invocationHandler, jc)));
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Allocates a new Java array
ql_jni.qpp:/** @param cls the Class of the component type of the Array
ql_jni.qpp:    @param size the size of the array to allocate
ql_jni.qpp:    @return the allocated array
ql_jni.qpp: */
ql_jni.qpp:Jni::org::qore::jni::JavaArray new_array(Jni::java::lang::Class[QoreJniPrivateData] cls, int size) {
ql_jni.qpp:    ReferenceHolder<QoreJniPrivateData> holder(cls, xsink);
ql_jni.qpp:    try {
ql_jni.qpp:        return new QoreObject(QC_JAVAARRAY, jni::jni_get_program_context(), new Array(cls->makeLocal().as<jclass>(), size));
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Creates a class object from bytecode data
ql_jni.qpp:/** @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:java::lang::Class cls = define_class(name, bytecode);
ql_jni.qpp:    @endcode
ql_jni.qpp:    @param name the name of the class (ex: \c "org/qore/my_package/ClassName")
ql_jni.qpp:    @param bytecode the byte code of the class
ql_jni.qpp:    @note the class will be created using the classloader for the containing %Program object
ql_jni.qpp:    @since %jni 1.1
ql_jni.qpp:*/
ql_jni.qpp:Jni::org::qore::jni::Class define_class(string name, binary bytecode) {
ql_jni.qpp:    try {
ql_jni.qpp:        ModifiedUtf8String utf8_name(name);
ql_jni.qpp:        jni::Env env;
ql_jni.qpp:        // NOTE: this must be qore_get_call_program_context() and not jni::jni_get_program_context()
ql_jni.qpp:        // as the caller's program context must be used in all cases
ql_jni.qpp:        QoreProgram* pgm = qore_get_call_program_context();
ql_jni.qpp:        JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
ql_jni.qpp:        assert(jpc);
ql_jni.qpp:        LocalReference<jclass> jcls = env.defineClass(utf8_name.c_str(), jpc->getClassLoader(),
ql_jni.qpp:            static_cast<const unsigned char*>(bytecode->getPtr()), bytecode->size());
ql_jni.qpp:        return new QoreObject(QC_CLASS, pgm, new QoreJniPrivateData(jcls));
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Sets the "save object" callback for %Qore objects created from Java code
ql_jni.qpp:/** @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:hash<string, object> object_cache;
ql_jni.qpp:code callback = sub (object obj) {
ql_jni.qpp:    # save object in object cache, so it doesn't go out of scope
ql_jni.qpp:    object_cache{obj.uniqueHash()} = obj;
ql_jni.qpp:}
ql_jni.qpp:set_save_object_callback(callback);
ql_jni.qpp:    @endcode
ql_jni.qpp:    @param save_object_callback the callback to save any %Qore objects created in Java code, must take an argument of
ql_jni.qpp:    type @ref object_type "object"
ql_jni.qpp:    Due to the differences in garbage collection approaches between %Qore and Java, %Qore objects must be managed with
ql_jni.qpp:    a deterministic life cycle; Java objects have only weak references to %Qore objects due to the lack of
ql_jni.qpp:    destructors in Java and the lack of determinism in the JVM for object lifecycle management.
ql_jni.qpp:    The callback set here will be called any time a %Qore object is created from Java code; if no callback is set,
ql_jni.qpp:    then the standard thread-local implementation is used where %Qore objects are saved in a thread-local hash.
ql_jni.qpp:    @see @ref jni_qore_object_lifecycle_management for more information
ql_jni.qpp:*/
ql_jni.qpp:set_save_object_callback(*code save_object_callback) [dom=PROCESS] {
ql_jni.qpp:    // NOTE: this must be qore_get_call_program_context() and not jni::jni_get_program_context() or jni_get_context()
ql_jni.qpp:    // as the caller's program context must be used in all cases
ql_jni.qpp:    QoreProgram* pgm = qore_get_call_program_context();
ql_jni.qpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
ql_jni.qpp:    assert(jpc);
ql_jni.qpp:    jpc->setSaveObjectCallback(save_object_callback);
ql_jni.qpp:}
ql_jni.qpp://! Returns the class loader associated with the current program
ql_jni.qpp:/** @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:ClassLoader loader = get_class_loader();
ql_jni.qpp:    @endcode
ql_jni.qpp:    @return the class loader associated with the current program
ql_jni.qpp:    @since jni 2.0
ql_jni.qpp:*/
ql_jni.qpp:Jni::java::lang::Object get_class_loader() {
ql_jni.qpp:    try {
ql_jni.qpp:        jni::Env env;
ql_jni.qpp:        QoreProgram* pgm = jni_get_program_context();
ql_jni.qpp:        JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
ql_jni.qpp:        assert(jpc);
ql_jni.qpp:        LocalReference<jclass> jc = Globals::classQoreURLClassLoader.toLocal();
ql_jni.qpp:        QoreClass* qc = qjcm.findCreateQoreClass(env, jc, pgm);
ql_jni.qpp:        return new QoreObject(qc, pgm, new QoreJniPrivateData(jpc->getClassLoader()));
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp://! Returns dynamically generated Java byte code for the given %Qore class
ql_jni.qpp:/** @par Example:
ql_jni.qpp:    @code{.py}
ql_jni.qpp:binary byte_code = get_byte_code("::Qore::Thread::Condition");
ql_jni.qpp:    @endcode
ql_jni.qpp:    @param class_name the class name (can include a namespace path) to the %Qore class
ql_jni.qpp:    @return the dynamically generated Java byte code for the class
ql_jni.qpp:    @throws CLASS-NOT-FOUND the %Qore class could not be found
ql_jni.qpp:    @note Other exceptions can also be thrown during bytecode generation
ql_jni.qpp:    @since jni 2.0
ql_jni.qpp:*/
ql_jni.qpp:binary get_byte_code(string class_name) {
ql_jni.qpp:    TempEncodingHelper cn(class_name, QCS_UTF8, xsink);
ql_jni.qpp:    if (*xsink) {
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:    try {
ql_jni.qpp:        jni::Env env;
ql_jni.qpp:        QoreProgram* pgm = jni_get_program_context();
ql_jni.qpp:        JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
ql_jni.qpp:        assert(jpc);
ql_jni.qpp:        const QoreClass* cls = pgm->findClass(cn->c_str(), xsink);
ql_jni.qpp:        if (*xsink) {
ql_jni.qpp:            return QoreValue();
ql_jni.qpp:        }
ql_jni.qpp:        if (!cls) {
ql_jni.qpp:            xsink->raiseException("CLASS-NOT-FOUND", "cannot find Qore class '%s'", cn->c_str());
ql_jni.qpp:            return QoreValue();
ql_jni.qpp:        }
ql_jni.qpp:        LocalReference<jstring> jname = jpc->getJavaNameForClass(env, *cls);
ql_jni.qpp:        LocalReference<jbyteArray> byte_code = jpc->generateByteCode(env, jpc->getClassLoader(), QoreString(), jname,
ql_jni.qpp:            nullptr, cls);
ql_jni.qpp:        return Array::getBinary(env, byte_code).release();
ql_jni.qpp:    } catch (jni::Exception& e) {
ql_jni.qpp:        e.convert(xsink);
ql_jni.qpp:        return QoreValue();
ql_jni.qpp:    }
ql_jni.qpp:}
ql_jni.qpp:///@}
Object.h://--------------------------------------------------------------------*- C++ -*-
Object.h://
Object.h://  Qore Programming Language
Object.h://
Object.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Object.h://
Object.h://  Permission is hereby granted, free of charge, to any person obtaining a
Object.h://  copy of this software and associated documentation files (the "Software"),
Object.h://  to deal in the Software without restriction, including without limitation
Object.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Object.h://  and/or sell copies of the Software, and to permit persons to whom the
Object.h://  Software is furnished to do so, subject to the following conditions:
Object.h://
Object.h://  The above copyright notice and this permission notice shall be included in
Object.h://  all copies or substantial portions of the Software.
Object.h://
Object.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Object.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Object.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Object.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Object.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Object.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Object.h://  DEALINGS IN THE SOFTWARE.
Object.h://
Object.h://------------------------------------------------------------------------------
Object.h:///
Object.h:/// \file
Object.h:/// \brief Defines the Object class.
Object.h:///
Object.h://------------------------------------------------------------------------------
Object.h:#ifndef QORE_JNI_OBJECT_H_
Object.h:#define QORE_JNI_OBJECT_H_
Object.h:#include <qore/Qore.h>
Object.h:#include "LocalReference.h"
Object.h:namespace jni {
Object.h:/**
Object.h: * \brief Base class for private data of Qore objects that represent Java objects.
Object.h: */
Object.h:class ObjectBase : public AbstractPrivateData {
Object.h:public:
Object.h:   /**
Object.h:    * \brief Constructor.
Object.h:    */
Object.h:   ObjectBase() = default;
Object.h:   virtual ~ObjectBase() = default;
Object.h:   /**
Object.h:    * \brief Returns the reference to the JNI object.
Object.h:    * \return the reference to the JNI object
Object.h:    */
Object.h:   virtual jobject getJavaObject() const = 0;
Object.h:   /**
Object.h:    * \brief Returns a local reference to the JNI object.
Object.h:    * \return a local reference to the JNI object
Object.h:    */
Object.h:   DLLLOCAL LocalReference<jobject> makeLocal() const {
Object.h:      jobject ref = getJavaObject();
Object.h:      if (ref == nullptr)
Object.h:         return nullptr;
Object.h:      jobject local = static_cast<jobject>(Jvm::getEnv()->NewLocalRef(ref));
Object.h:      if (local == nullptr)
Object.h:         throw JavaException();
Object.h:      return local;
Object.h:   }
Object.h:};
Object.h:/**
Object.h: * \brief Represents a Java object instance.
Object.h: */
Object.h:class Object : public ObjectBase {
Object.h:public:
Object.h:   /**
Object.h:    * \brief Constructor.
Object.h:    * \param object a local reference to a Java object instance
Object.h:    * \throws JavaException if a global reference cannot be created
Object.h:    */
Object.h:   Object(const LocalReference<jobject> &object) : object(object.makeGlobal()) {
Object.h:      printd(LogLevel, "Object::Object(), this: %p, object: %p\n", this, static_cast<jobject>(this->object));
Object.h:   }
Object.h:   ~Object() {
Object.h:      printd(LogLevel, "Object::~Object(), this: %p, object: %p\n", this, static_cast<jobject>(this->object));
Object.h:   }
Object.h:   /**
Object.h:    * \brief Returns the reference to the JNI jobject object.
Object.h:    * \return the reference to the JNI jobject object
Object.h:    */
Object.h:   jobject getJavaObject() const override {
Object.h:      return object;
Object.h:   }
Object.h:private:
Object.h:   GlobalReference<jobject> object;
Object.h:};
Object.h:} // namespace jni
Object.h:#endif // QORE_JNI_OBJECT_H_
Field.cpp://--------------------------------------------------------------------*- C++ -*-
Field.cpp://
Field.cpp://  Qore Programming Language
Field.cpp://
Field.cpp://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
Field.cpp://
Field.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Field.cpp://  copy of this software and associated documentation files (the "Software"),
Field.cpp://  to deal in the Software without restriction, including without limitation
Field.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Field.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Field.cpp://  Software is furnished to do so, subject to the following conditions:
Field.cpp://
Field.cpp://  The above copyright notice and this permission notice shall be included in
Field.cpp://  all copies or substantial portions of the Software.
Field.cpp://
Field.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Field.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Field.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Field.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Field.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Field.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Field.cpp://  DEALINGS IN THE SOFTWARE.
Field.cpp://
Field.cpp://------------------------------------------------------------------------------
Field.cpp:#include <memory>
Field.cpp:#include "Field.h"
Field.cpp:#include "Env.h"
Field.cpp:#include "JavaToQore.h"
Field.cpp:#include "QoreToJava.h"
Field.cpp:namespace jni {
Field.cpp:void BaseField::getName(QoreString& str) {
Field.cpp:    Env env;
Field.cpp:    LocalReference<jstring> fieldName = env.callObjectMethod(field, Globals::methodFieldGetName, nullptr).as<jstring>();
Field.cpp:    Env::GetStringUtfChars fname(env, fieldName);
Field.cpp:    str.concat(fname.c_str());
Field.cpp:}
Field.cpp:QoreValue BaseField::get(jobject object, QoreProgram* pgm, bool compat_types) {
Field.cpp:    Env env;
Field.cpp:    if (!env.isInstanceOf(object, cls->getJavaObject())) {
Field.cpp:        throw BasicException("Passed instance does not match the field's class");
Field.cpp:    }
Field.cpp:    switch (type) {
Field.cpp:        case Type::Boolean:
Field.cpp:            return JavaToQore::convert(env.getBooleanField(object, id));
Field.cpp:        case Type::Byte:
Field.cpp:            return JavaToQore::convert(env.getByteField(object, id));
Field.cpp:        case Type::Char:
Field.cpp:            return JavaToQore::convert(env.getCharField(object, id));
Field.cpp:        case Type::Short:
Field.cpp:            return JavaToQore::convert(env.getShortField(object, id));
Field.cpp:        case Type::Int:
Field.cpp:            return JavaToQore::convert(env.getIntField(object, id));
Field.cpp:        case Type::Long:
Field.cpp:            return JavaToQore::convert(env.getLongField(object, id));
Field.cpp:        case Type::Float:
Field.cpp:            return JavaToQore::convert(env.getFloatField(object, id));
Field.cpp:        case Type::Double:
Field.cpp:            return JavaToQore::convert(env.getDoubleField(object, id));
Field.cpp:        case Type::Reference:
Field.cpp:        default:
Field.cpp:            assert(type == Type::Reference);
Field.cpp:            return JavaToQore::convertToQore(env.getObjectField(object, id), pgm, compat_types);
Field.cpp:    }
Field.cpp:}
Field.cpp:void BaseField::set(jobject object, const QoreValue& value, JniExternalProgramData* jpc) {
Field.cpp:    Env env;
Field.cpp:    if (!env.isInstanceOf(object, cls->getJavaObject())) {
Field.cpp:        throw BasicException("Passed instance does not match the field's class");
Field.cpp:    }
Field.cpp:    switch (type) {
Field.cpp:        case Type::Boolean:
Field.cpp:            env.setBooleanField(object, id, QoreToJava::toBoolean(value));
Field.cpp:            break;
Field.cpp:        case Type::Byte:
Field.cpp:            env.setByteField(object, id, QoreToJava::toByte(value));
Field.cpp:            break;
Field.cpp:        case Type::Char:
Field.cpp:            env.setCharField(object, id, QoreToJava::toChar(value));
Field.cpp:            break;
Field.cpp:        case Type::Short:
Field.cpp:            env.setShortField(object, id, QoreToJava::toShort(value));
Field.cpp:            break;
Field.cpp:        case Type::Int:
Field.cpp:            env.setIntField(object, id, QoreToJava::toInt(value));
Field.cpp:            break;
Field.cpp:        case Type::Long:
Field.cpp:            env.setLongField(object, id, QoreToJava::toLong(value));
Field.cpp:            break;
Field.cpp:        case Type::Float:
Field.cpp:            env.setFloatField(object, id, QoreToJava::toFloat(value));
Field.cpp:            break;
Field.cpp:        case Type::Double:
Field.cpp:            env.setDoubleField(object, id, QoreToJava::toDouble(value));
Field.cpp:            break;
Field.cpp:        case Type::Reference:
Field.cpp:        default:
Field.cpp:            assert(type == Type::Reference);
Field.cpp:            env.setObjectField(object, id, QoreToJava::toObject(env, value, typeClass, jpc));
Field.cpp:            break;
Field.cpp:    }
Field.cpp:}
Field.cpp:QoreValue BaseField::getStatic(QoreProgram* pgm, bool compat_types) {
Field.cpp:    Env env;
Field.cpp:    switch (type) {
Field.cpp:        case Type::Boolean:
Field.cpp:            return JavaToQore::convert(env.getStaticBooleanField(cls->getJavaObject(), id));
Field.cpp:        case Type::Byte:
Field.cpp:            return JavaToQore::convert(env.getStaticByteField(cls->getJavaObject(), id));
Field.cpp:        case Type::Char:
Field.cpp:            return JavaToQore::convert(env.getStaticCharField(cls->getJavaObject(), id));
Field.cpp:        case Type::Short:
Field.cpp:            return JavaToQore::convert(env.getStaticShortField(cls->getJavaObject(), id));
Field.cpp:        case Type::Int:
Field.cpp:            return JavaToQore::convert(env.getStaticIntField(cls->getJavaObject(), id));
Field.cpp:        case Type::Long:
Field.cpp:            return JavaToQore::convert(env.getStaticLongField(cls->getJavaObject(), id));
Field.cpp:        case Type::Float:
Field.cpp:            return JavaToQore::convert(env.getStaticFloatField(cls->getJavaObject(), id));
Field.cpp:        case Type::Double:
Field.cpp:            return JavaToQore::convert(env.getStaticDoubleField(cls->getJavaObject(), id));
Field.cpp:        case Type::Reference:
Field.cpp:        default:
Field.cpp:            assert(type == Type::Reference);
Field.cpp:            return JavaToQore::convertToQore(env.getStaticObjectField(cls->getJavaObject(), id), pgm, compat_types);
Field.cpp:    }
Field.cpp:}
Field.cpp:void BaseField::setStatic(const QoreValue &value, JniExternalProgramData* jpc) {
Field.cpp:    Env env;
Field.cpp:    switch (type) {
Field.cpp:        case Type::Boolean:
Field.cpp:            env.setStaticBooleanField(cls->getJavaObject(), id, QoreToJava::toBoolean(value));
Field.cpp:            break;
Field.cpp:        case Type::Byte:
Field.cpp:            env.setStaticByteField(cls->getJavaObject(), id, QoreToJava::toByte(value));
Field.cpp:            break;
Field.cpp:        case Type::Char:
Field.cpp:            env.setStaticCharField(cls->getJavaObject(), id, QoreToJava::toChar(value));
Field.cpp:            break;
Field.cpp:        case Type::Short:
Field.cpp:            env.setStaticShortField(cls->getJavaObject(), id, QoreToJava::toShort(value));
Field.cpp:            break;
Field.cpp:        case Type::Int:
Field.cpp:            env.setStaticIntField(cls->getJavaObject(), id, QoreToJava::toInt(value));
Field.cpp:            break;
Field.cpp:        case Type::Long:
Field.cpp:            env.setStaticLongField(cls->getJavaObject(), id, QoreToJava::toLong(value));
Field.cpp:            break;
Field.cpp:        case Type::Float:
Field.cpp:            env.setStaticFloatField(cls->getJavaObject(), id, QoreToJava::toFloat(value));
Field.cpp:            break;
Field.cpp:        case Type::Double:
Field.cpp:            env.setStaticDoubleField(cls->getJavaObject(), id, QoreToJava::toDouble(value));
Field.cpp:            break;
Field.cpp:        case Type::Reference:
Field.cpp:        default:
Field.cpp:            assert(type == Type::Reference);
Field.cpp:            env.setStaticObjectField(cls->getJavaObject(), id, QoreToJava::toObject(env, value, typeClass, jpc));
Field.cpp:            break;
Field.cpp:    }
Field.cpp:}
Field.cpp:} // namespace jni
QC_JavaArray.qpp:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QC_JavaArray.qpp:/** @file QC_JavaArray.qpp JavaArray class definition */
QC_JavaArray.qpp:/*
QC_JavaArray.qpp:    Qore Programming Language
QC_JavaArray.qpp:    Copyright (C) 2022 - 2023 Qore Technologies, s.r.o.
QC_JavaArray.qpp:    Permission is hereby granted, free of charge, to any person obtaining a
QC_JavaArray.qpp:    copy of this software and associated documentation files (the "Software"),
QC_JavaArray.qpp:    to deal in the Software without restriction, including without limitation
QC_JavaArray.qpp:    the rights to use, copy, modify, merge, publish, distribute, sublicense,
QC_JavaArray.qpp:    and/or sell copies of the Software, and to permit persons to whom the
QC_JavaArray.qpp:    Software is furnished to do so, subject to the following conditions:
QC_JavaArray.qpp:    The above copyright notice and this permission notice shall be included in
QC_JavaArray.qpp:    all copies or substantial portions of the Software.
QC_JavaArray.qpp:    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
QC_JavaArray.qpp:    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
QC_JavaArray.qpp:    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
QC_JavaArray.qpp:    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
QC_JavaArray.qpp:    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
QC_JavaArray.qpp:    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
QC_JavaArray.qpp:    DEALINGS IN THE SOFTWARE.
QC_JavaArray.qpp:    Note that the Qore library is released under a choice of three open-source
QC_JavaArray.qpp:    licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
QC_JavaArray.qpp:    information.
QC_JavaArray.qpp:*/
QC_JavaArray.qpp:#include <qore/Qore.h>
QC_JavaArray.qpp:#include "Array.h"
QC_JavaArray.qpp:#include "QoreJniClassMap.h"
QC_JavaArray.qpp:#include "QoreToJava.h"
QC_JavaArray.qpp:using namespace jni;
QC_JavaArray.qpp://! Instances of this class represent Java arrays.
QC_JavaArray.qpp:/**
QC_JavaArray.qpp: */
QC_JavaArray.qpp:qclass JavaArray [arg=Array* array; ns=Jni::org::qore::jni; vparent=Object; flags=final];
QC_JavaArray.qpp://! Defined private to prevent Qore code from creating instances.
QC_JavaArray.qpp:/**
QC_JavaArray.qpp: */
QC_JavaArray.qpp:private:internal JavaArray::constructor() {
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Returns the class of the object.
QC_JavaArray.qpp:/**
QC_JavaArray.qpp:    @return the class of the object
QC_JavaArray.qpp: */
QC_JavaArray.qpp:Class JavaArray::getClass() {
QC_JavaArray.qpp:    try {
QC_JavaArray.qpp:        jni::Env env;
QC_JavaArray.qpp:        return new QoreObject(QC_CLASS, qore_get_call_program_context(),
QC_JavaArray.qpp:                              new QoreJniPrivateData(env.getObjectClass(array->getObject())));
QC_JavaArray.qpp:    } catch (jni::Exception &e) {
QC_JavaArray.qpp:        e.convert(xsink);
QC_JavaArray.qpp:        return QoreValue();
QC_JavaArray.qpp:    }
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Returns the length of the array.
QC_JavaArray.qpp:/**
QC_JavaArray.qpp:    @return the length of the array
QC_JavaArray.qpp: */
QC_JavaArray.qpp:int JavaArray::length() {
QC_JavaArray.qpp:    try {
QC_JavaArray.qpp:        return array->length();
QC_JavaArray.qpp:    } catch (jni::Exception &e) {
QC_JavaArray.qpp:        e.convert(xsink);
QC_JavaArray.qpp:        return 0;
QC_JavaArray.qpp:    }
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Retrieves an element.
QC_JavaArray.qpp:/**
QC_JavaArray.qpp:    @param index the 0-based index of the element
QC_JavaArray.qpp:    @return the value of the element
QC_JavaArray.qpp:    @throws JNI-ERROR if the index is out of bounds
QC_JavaArray.qpp: */
QC_JavaArray.qpp:auto JavaArray::get(int index) {
QC_JavaArray.qpp:    try {
QC_JavaArray.qpp:        return array->get(index, self->getProgram(), false);
QC_JavaArray.qpp:    } catch (jni::Exception &e) {
QC_JavaArray.qpp:        e.convert(xsink);
QC_JavaArray.qpp:        return QoreValue();
QC_JavaArray.qpp:    }
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Sets the value of a an element.
QC_JavaArray.qpp:/**
QC_JavaArray.qpp:    @param index the 0-based index of the element
QC_JavaArray.qpp:    @param value the value of the element
QC_JavaArray.qpp:    @throws JNI-ERROR if the index is out of bounds or if the value type is incompatible with the array type
QC_JavaArray.qpp: */
QC_JavaArray.qpp:nothing JavaArray::set(int index, auto value) {
QC_JavaArray.qpp:    try {
QC_JavaArray.qpp:        array->set(index, value);
QC_JavaArray.qpp:    } catch (jni::Exception &e) {
QC_JavaArray.qpp:        e.convert(xsink);
QC_JavaArray.qpp:    }
QC_JavaArray.qpp:    return QoreValue();
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Returns a string representation of the array
QC_JavaArray.qpp:/** @par Example:
QC_JavaArray.qpp:    @code{.py}
QC_JavaArray.qpp:string str = a.toString();
QC_JavaArray.qpp:    @endcode
QC_JavaArray.qpp:    @return a string representation of the array by calling java.util.Arrays.toString()
QC_JavaArray.qpp:    @since jni 1.1
QC_JavaArray.qpp:*/
QC_JavaArray.qpp:string JavaArray::toString() [flags=CONSTANT] {
QC_JavaArray.qpp:    try {
QC_JavaArray.qpp:        return array->deepToString().release();
QC_JavaArray.qpp:    } catch (jni::Exception &e) {
QC_JavaArray.qpp:      e.convert(xsink);
QC_JavaArray.qpp:   }
QC_JavaArray.qpp:   return QoreValue();
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Returns a "deep" string representation of the array
QC_JavaArray.qpp:/** @par Example:
QC_JavaArray.qpp:    @code{.py}
QC_JavaArray.qpp:string str = a.deepToString();
QC_JavaArray.qpp:    @endcode
QC_JavaArray.qpp:    @return a "deep" string representation of the array by calling java.util.Arrays.deepToString()
QC_JavaArray.qpp:    @since jni 1.1
QC_JavaArray.qpp:*/
QC_JavaArray.qpp:string JavaArray::deepToString() [flags=CONSTANT] {
QC_JavaArray.qpp:    try {
QC_JavaArray.qpp:        return array->deepToString().release();
QC_JavaArray.qpp:    } catch (jni::Exception &e) {
QC_JavaArray.qpp:      e.convert(xsink);
QC_JavaArray.qpp:   }
QC_JavaArray.qpp:   return QoreValue();
QC_JavaArray.qpp:}
QC_JavaArray.qpp://! Returns a byte[] array for the binary object as an explicit conversion
QC_JavaArray.qpp:/** @par Example:
QC_JavaArray.qpp:    @code{.py}
QC_JavaArray.qpp:JavaArray a = JavaArray::get(bin);
QC_JavaArray.qpp:    @endcode
QC_JavaArray.qpp:    @return a byte[] array for the binary object as an explicit conversion
QC_JavaArray.qpp:    @since jni 1.1
QC_JavaArray.qpp:*/
QC_JavaArray.qpp:static JavaArray JavaArray::get(binary b) [flags=CONSTANT] {
QC_JavaArray.qpp:    Env env;
QC_JavaArray.qpp:    return new QoreObject(QC_JAVAARRAY, qore_get_call_program_context(),
QC_JavaArray.qpp:        new Array(QoreToJava::makeByteArray(env, *b)));
QC_JavaArray.qpp:}
JavaToQore.h://--------------------------------------------------------------------*- C++ -*-
JavaToQore.h://
JavaToQore.h://  Qore Programming Language
JavaToQore.h://
JavaToQore.h://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
JavaToQore.h://
JavaToQore.h://  Permission is hereby granted, free of charge, to any person obtaining a
JavaToQore.h://  copy of this software and associated documentation files (the "Software"),
JavaToQore.h://  to deal in the Software without restriction, including without limitation
JavaToQore.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
JavaToQore.h://  and/or sell copies of the Software, and to permit persons to whom the
JavaToQore.h://  Software is furnished to do so, subject to the following conditions:
JavaToQore.h://
JavaToQore.h://  The above copyright notice and this permission notice shall be included in
JavaToQore.h://  all copies or substantial portions of the Software.
JavaToQore.h://
JavaToQore.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JavaToQore.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JavaToQore.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JavaToQore.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JavaToQore.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
JavaToQore.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
JavaToQore.h://  DEALINGS IN THE SOFTWARE.
JavaToQore.h://
JavaToQore.h://------------------------------------------------------------------------------
JavaToQore.h:///
JavaToQore.h:/// \file
JavaToQore.h:/// \brief Defines the JavaToQore class
JavaToQore.h://------------------------------------------------------------------------------
JavaToQore.h:#ifndef QORE_JNI_JAVATOQORE_H_
JavaToQore.h:#define QORE_JNI_JAVATOQORE_H_
JavaToQore.h:#include <qore/Qore.h>
JavaToQore.h:#include <jni.h>
JavaToQore.h:#include "LocalReference.h"
JavaToQore.h:#include "Object.h"
JavaToQore.h:#include "Array.h"
JavaToQore.h:#include "Class.h"
JavaToQore.h:#include "Globals.h"
JavaToQore.h:#include "Env.h"
JavaToQore.h:#include "Method.h"
JavaToQore.h:#include "Field.h"
JavaToQore.h:namespace jni {
JavaToQore.h://! Option for numeric results
JavaToQore.h:enum NumericOption {
JavaToQore.h:    ENO_OPTIMAL = 0,
JavaToQore.h:    ENO_STRING,
JavaToQore.h:    ENO_NUMERIC, // Qore number
JavaToQore.h:};
JavaToQore.h:/**
JavaToQore.h: * \brief Provides functions for converting Java values to Qore.
JavaToQore.h: *
JavaToQore.h: * Although the majority of the methods is trivial, their purpose is to have a single point where a given conversion
JavaToQore.h: * is performed. This will allow to change the conversion (e.g. add range checking) in the future consistently.
JavaToQore.h: */
JavaToQore.h:class JavaToQore {
JavaToQore.h:public:
JavaToQore.h:    static QoreValue convert(jboolean v) {
JavaToQore.h:        return QoreValue(v == JNI_TRUE);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jbyte v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jchar v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jdouble v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jfloat v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jint v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jlong v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convert(jshort v) {
JavaToQore.h:        return QoreValue(v);
JavaToQore.h:    }
JavaToQore.h:    static QoreValue convertToQore(LocalReference<jobject> v, QoreProgram* pgm, bool compat_types = false,
JavaToQore.h:        NumericOption numeric = ENO_NUMERIC);
JavaToQore.h:private:
JavaToQore.h:    JavaToQore() = delete;
JavaToQore.h:};
JavaToQore.h:} // namespace jni
JavaToQore.h:#endif // QORE_JNI_JAVATOQORE_H_
QoreJniFunctionalInterface.cpp://--------------------------------------------------------------------*- C++ -*-
QoreJniFunctionalInterface.cpp://
QoreJniFunctionalInterface.cpp://  Qore Programming Language
QoreJniFunctionalInterface.cpp://
QoreJniFunctionalInterface.cpp://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
QoreJniFunctionalInterface.cpp://
QoreJniFunctionalInterface.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
QoreJniFunctionalInterface.cpp://  copy of this software and associated documentation files (the "Software"),
QoreJniFunctionalInterface.cpp://  to deal in the Software without restriction, including without limitation
QoreJniFunctionalInterface.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
QoreJniFunctionalInterface.cpp://  and/or sell copies of the Software, and to permit persons to whom the
QoreJniFunctionalInterface.cpp://  Software is furnished to do so, subject to the following conditions:
QoreJniFunctionalInterface.cpp://
QoreJniFunctionalInterface.cpp://  The above copyright notice and this permission notice shall be included in
QoreJniFunctionalInterface.cpp://  all copies or substantial portions of the Software.
QoreJniFunctionalInterface.cpp://
QoreJniFunctionalInterface.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
QoreJniFunctionalInterface.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
QoreJniFunctionalInterface.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
QoreJniFunctionalInterface.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
QoreJniFunctionalInterface.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
QoreJniFunctionalInterface.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
QoreJniFunctionalInterface.cpp://  DEALINGS IN THE SOFTWARE.
QoreJniFunctionalInterface.cpp://
QoreJniFunctionalInterface.cpp://------------------------------------------------------------------------------
QoreJniFunctionalInterface.cpp:#include "QoreJniFunctionalInterface.h"
QoreJniFunctionalInterface.cpp:#include "QoreToJava.h"
QoreJniFunctionalInterface.cpp:namespace jni {
QoreJniFunctionalInterface.cpp:QoreJniFunctionalInterface::QoreJniFunctionalInterface(jobject obj) : obj(GlobalReference<jobject>::fromLocal(obj)),
QoreJniFunctionalInterface.cpp:        src_pgm(qore_get_call_program_context()) {
QoreJniFunctionalInterface.cpp:    assert(src_pgm);
QoreJniFunctionalInterface.cpp:    Env env;
QoreJniFunctionalInterface.cpp:    cls = new Class(env.callObjectMethod(obj, Globals::methodObjectGetClass, nullptr).as<jclass>());
QoreJniFunctionalInterface.cpp:    LocalReference<jobjectArray> methods = cls->getDeclaredMethods();
QoreJniFunctionalInterface.cpp:    // find first "call" method in the class
QoreJniFunctionalInterface.cpp:    for (jsize i = 0, num_methods = env.getArrayLength(methods); i < num_methods; ++i) {
QoreJniFunctionalInterface.cpp:        // get Method object
QoreJniFunctionalInterface.cpp:        LocalReference<jobject> m = env.getObjectArrayElement(methods, i);
QoreJniFunctionalInterface.cpp:        LocalReference<jstring> mName = env.callObjectMethod(m, Globals::methodMethodGetName, nullptr).as<jstring>();
QoreJniFunctionalInterface.cpp:        Env::GetStringUtfChars mcn(env, mName);
QoreJniFunctionalInterface.cpp:        if (!strcmp(mcn.c_str(), "call")) {
QoreJniFunctionalInterface.cpp:            method = new BaseMethod(m, *cls);
QoreJniFunctionalInterface.cpp:            break;
QoreJniFunctionalInterface.cpp:        }
QoreJniFunctionalInterface.cpp:    }
QoreJniFunctionalInterface.cpp:    if (!method) {
QoreJniFunctionalInterface.cpp:        LocalReference<jstring> clsName = env.callObjectMethod(cls->getJavaObject(), Globals::methodClassGetName,
QoreJniFunctionalInterface.cpp:            nullptr).as<jstring>();
QoreJniFunctionalInterface.cpp:        Env::GetStringUtfChars cName(env, clsName);
QoreJniFunctionalInterface.cpp:        QoreStringMaker str("Java class '%s' for Java object to be used as a Qore closure has no call() method to " \
QoreJniFunctionalInterface.cpp:            "be used as a Qore closure", cName.c_str());
QoreJniFunctionalInterface.cpp:        throw BasicException(str.c_str());
QoreJniFunctionalInterface.cpp:    }
QoreJniFunctionalInterface.cpp:}
QoreJniFunctionalInterface.cpp:QoreValue QoreJniFunctionalInterface::execValue(const QoreListNode* args, ExceptionSink* xsink) const {
QoreJniFunctionalInterface.cpp:    try {
QoreJniFunctionalInterface.cpp:        ReferenceHolder<QoreListNode> evaluated_args(args ? args->evalList(xsink) : nullptr, xsink);
QoreJniFunctionalInterface.cpp:        if (*xsink) {
QoreJniFunctionalInterface.cpp:            return QoreValue();
QoreJniFunctionalInterface.cpp:        }
QoreJniFunctionalInterface.cpp:        //printd(5, "QoreJniFunctionalInterface::execValue() args: %p (%lld) evaluated_args: %p (%lld)\n", args,
QoreJniFunctionalInterface.cpp:        //    args ? args->size() : 0l, *evaluated_args, evaluated_args ? evaluated_args->size() : 0l);
QoreJniFunctionalInterface.cpp:        // set call context
QoreJniFunctionalInterface.cpp:        QoreExternalProgramCallContextHelper call_ctx(src_pgm);
QoreJniFunctionalInterface.cpp:        // make sure that the Qore exception stack is populated correctly in case a Qore exception is thrown
QoreJniFunctionalInterface.cpp:        // from the Java code about to be called below
QoreJniFunctionalInterface.cpp:        QoreJniStackLocationHelper slh;
QoreJniFunctionalInterface.cpp:        // make the call
QoreJniFunctionalInterface.cpp:        return method->isStatic()
QoreJniFunctionalInterface.cpp:            ? method->invokeStatic(*evaluated_args, src_pgm)
QoreJniFunctionalInterface.cpp:            : method->invoke(obj, *evaluated_args, src_pgm);
QoreJniFunctionalInterface.cpp:    } catch (jni::Exception& e) {
QoreJniFunctionalInterface.cpp:        e.convert(xsink);
QoreJniFunctionalInterface.cpp:        return QoreValue();
QoreJniFunctionalInterface.cpp:    }
QoreJniFunctionalInterface.cpp:}
QoreJniFunctionalInterface.cpp:int QoreJniFunctionalInterface::getAsString(QoreString& str, int foff, ExceptionSink* xsink) const {
QoreJniFunctionalInterface.cpp:    str.concat("java closure reference");
QoreJniFunctionalInterface.cpp:    return 0;
QoreJniFunctionalInterface.cpp:}
QoreJniFunctionalInterface.cpp:QoreString* QoreJniFunctionalInterface::getAsString(bool& del, int foff, ExceptionSink* xsink) const {
QoreJniFunctionalInterface.cpp:    del = true;
QoreJniFunctionalInterface.cpp:    return new QoreString("java closure reference");
QoreJniFunctionalInterface.cpp:}
QoreJniFunctionalInterface.cpp:}
LocalReference.h://--------------------------------------------------------------------*- C++ -*-
LocalReference.h://
LocalReference.h://  Qore Programming Language
LocalReference.h://
LocalReference.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
LocalReference.h://
LocalReference.h://  Permission is hereby granted, free of charge, to any person obtaining a
LocalReference.h://  copy of this software and associated documentation files (the "Software"),
LocalReference.h://  to deal in the Software without restriction, including without limitation
LocalReference.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
LocalReference.h://  and/or sell copies of the Software, and to permit persons to whom the
LocalReference.h://  Software is furnished to do so, subject to the following conditions:
LocalReference.h://
LocalReference.h://  The above copyright notice and this permission notice shall be included in
LocalReference.h://  all copies or substantial portions of the Software.
LocalReference.h://
LocalReference.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
LocalReference.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
LocalReference.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
LocalReference.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LocalReference.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
LocalReference.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
LocalReference.h://  DEALINGS IN THE SOFTWARE.
LocalReference.h://
LocalReference.h://------------------------------------------------------------------------------
LocalReference.h:///
LocalReference.h:/// \file
LocalReference.h:/// \brief Defines the LocalReference helper class template
LocalReference.h:///
LocalReference.h://------------------------------------------------------------------------------
LocalReference.h:#ifndef QORE_JNI_LOCALREFERENCE_H_
LocalReference.h:#define QORE_JNI_LOCALREFERENCE_H_
LocalReference.h:#include <qore/Qore.h>
LocalReference.h:#include "GlobalReference.h"
LocalReference.h:#include "defs.h"
LocalReference.h:#include <utility>
LocalReference.h:namespace jni {
LocalReference.h:/**
LocalReference.h: * \brief A RAII wrapper for JNI's local references.
LocalReference.h: *
LocalReference.h: * Assumes that the current thread has been attached to the JVM.
LocalReference.h: * \tparam T the type of the reference (jobject, jclass etc.)
LocalReference.h: */
LocalReference.h:template<typename T>
LocalReference.h:class LocalReference {
LocalReference.h:    static_assert(std::is_pointer<T>::value, "Expected a pointer");
LocalReference.h:public:
LocalReference.h:    /**
LocalReference.h:     * \brief Creates an instance.
LocalReference.h:     * \param ref the local reference
LocalReference.h:     */
LocalReference.h:    DLLLOCAL LocalReference(T ref = nullptr) : ref(ref) {
LocalReference.h:        assert(ref == nullptr || Jvm::getEnv()->GetObjectRefType(ref) == JNILocalRefType);
LocalReference.h:        if (ref != nullptr) {
LocalReference.h:            printd(LogLevel + 1, "LocalReference created: %p\n", ref);
LocalReference.h:        }
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Destroys the local reference represented by this instance.
LocalReference.h:     */
LocalReference.h:    DLLLOCAL ~LocalReference() {
LocalReference.h:        if (ref != nullptr) {
LocalReference.h:            printd(LogLevel + 1, "LocalReference deleted: %p\n", ref);
LocalReference.h:            Jvm::getEnv()->DeleteLocalRef(ref);
LocalReference.h:            ref = nullptr;
LocalReference.h:        }
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Move constructor.
LocalReference.h:     * \param src the source local reference wrapper
LocalReference.h:     */
LocalReference.h:    DLLLOCAL LocalReference(LocalReference &&src) : ref(std::move(src.ref)) {
LocalReference.h:        src.ref = nullptr;
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Move assignment.
LocalReference.h:     * \param src the source local reference wrapper
LocalReference.h:     * \return *this
LocalReference.h:     */
LocalReference.h:    DLLLOCAL LocalReference &operator=(LocalReference &&src) {
LocalReference.h:        swap(*this, src);
LocalReference.h:        return *this;
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Swap function
LocalReference.h:    */
LocalReference.h:    DLLLOCAL friend void swap(LocalReference& first, LocalReference& second) {
LocalReference.h:        // enable ADL (not necessary in our case, but good practice)
LocalReference.h:        using std::swap;
LocalReference.h:        // by swapping the members of two objects, the two objects are effectively swapped
LocalReference.h:        swap(first.ref, second.ref);
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Implicit conversion to the reference type.
LocalReference.h:     */
LocalReference.h:    DLLLOCAL operator T() const {
LocalReference.h:        return ref;
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Creates a corresponding GlobalReference.
LocalReference.h:     * \return a global reference representing the same object
LocalReference.h:     * \throws JavaException if the global reference cannot be created
LocalReference.h:     */
LocalReference.h:    DLLLOCAL GlobalReference<T> makeGlobal() const {
LocalReference.h:        assert(ref != nullptr);
LocalReference.h:        T global = static_cast<T>(Jvm::getEnv()->NewGlobalRef(ref));
LocalReference.h:        if (global == nullptr) {
LocalReference.h:            throw JavaException();
LocalReference.h:        }
LocalReference.h:        return global;
LocalReference.h:    }
LocalReference.h:    /**
LocalReference.h:     * \brief Converts the reference to another type.
LocalReference.h:     *
LocalReference.h:     * This object becomes empty - the reference it contains is moved to the new object.
LocalReference.h:     * \tparam T2 the type of the resulting reference
LocalReference.h:     * \return a local reference of type T2
LocalReference.h:     */
LocalReference.h:    template<typename T2>
LocalReference.h:    DLLLOCAL LocalReference<T2> as() {
LocalReference.h:        T2 r = static_cast<T2>(ref);
LocalReference.h:        ref = nullptr;
LocalReference.h:        return r;
LocalReference.h:    }
LocalReference.h:    template<typename T2>
LocalReference.h:    DLLLOCAL T2 cast() {
LocalReference.h:        return static_cast<T2>(ref);
LocalReference.h:    }
LocalReference.h:    DLLLOCAL T release() {
LocalReference.h:        T r = ref;
LocalReference.h:        ref = nullptr;
LocalReference.h:        return r;
LocalReference.h:    }
LocalReference.h:private:
LocalReference.h:    LocalReference(const LocalReference &) = delete;
LocalReference.h:    LocalReference &operator=(const LocalReference &) = delete;
LocalReference.h:    T ref;
LocalReference.h:};
LocalReference.h:} // namespace jni
LocalReference.h:#endif // QORE_JNI_LOCALREFERENCE_H_
QoreJdbcConnection.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QoreJdbcConnection.h:/*
QoreJdbcConnection.h:    QoreJdbcConnection.h
QoreJdbcConnection.h:    Qore Programming Language JNI Module
QoreJdbcConnection.h:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJdbcConnection.h:    This library is free software; you can redistribute it and/or
QoreJdbcConnection.h:    modify it under the terms of the GNU Lesser General Public
QoreJdbcConnection.h:    License as published by the Free Software Foundation; either
QoreJdbcConnection.h:    version 2.1 of the License, or (at your option) any later version.
QoreJdbcConnection.h:    This library is distributed in the hope that it will be useful,
QoreJdbcConnection.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJdbcConnection.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJdbcConnection.h:    Lesser General Public License for more details.
QoreJdbcConnection.h:    You should have received a copy of the GNU Lesser General Public
QoreJdbcConnection.h:    License along with this library; if not, write to the Free Software
QoreJdbcConnection.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJdbcConnection.h:*/
QoreJdbcConnection.h:#ifndef _QORE_JNI_QOREJDBCCONNECTION_H
QoreJdbcConnection.h:#define _QORE_JNI_QOREJDBCCONNECTION_H
QoreJdbcConnection.h:#include <qore/Qore.h>
QoreJdbcConnection.h:#include "GlobalReference.h"
QoreJdbcConnection.h:#include "QoreJniClassMap.h"
QoreJdbcConnection.h:#include "JavaToQore.h"
QoreJdbcConnection.h:#include <string>
QoreJdbcConnection.h:namespace jni {
QoreJdbcConnection.h:#if 0
QoreJdbcConnection.h://! Known DB types
QoreJdbcConnection.h:enum DbType {
QoreJdbcConnection.h:    DBT_UNKNOWN = 0,
QoreJdbcConnection.h:    DBT_ORACLE,
QoreJdbcConnection.h:};
QoreJdbcConnection.h:#endif
QoreJdbcConnection.h:class QoreJdbcConnection {
QoreJdbcConnection.h:public:
QoreJdbcConnection.h:    DLLLOCAL QoreJdbcConnection(Datasource* d, ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL ~QoreJdbcConnection();
QoreJdbcConnection.h:    DLLLOCAL int reconnect(Env& env, ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL jobject getConnectionObject() const {
QoreJdbcConnection.h:        assert(connection);
QoreJdbcConnection.h:        return connection;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:    //! Set an option for the connection.
QoreJdbcConnection.h:    /** @param opt option name
QoreJdbcConnection.h:        @param val option value to use
QoreJdbcConnection.h:        @param xsink exception sink
QoreJdbcConnection.h:        @return 0 for OK, -1 for error
QoreJdbcConnection.h:    */
QoreJdbcConnection.h:    DLLLOCAL int setOption(const char* opt, const QoreValue val, ExceptionSink* xsink);
QoreJdbcConnection.h:    //! Get the current value of an option of the connection.
QoreJdbcConnection.h:    /** @param opt option name
QoreJdbcConnection.h:        @return option's value
QoreJdbcConnection.h:    */
QoreJdbcConnection.h:    DLLLOCAL QoreValue getOption(const char* opt);
QoreJdbcConnection.h:    DLLLOCAL int close(Env& env);
QoreJdbcConnection.h:    DLLLOCAL int commit(ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL int rollback(ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL QoreValue getServerVersion(ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL QoreValue getClientVersion(ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL QoreStringNode* getDriverRealName(ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL QoreValue select(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcConnection.h:    //! Select multiple rows from the database.
QoreJdbcConnection.h:    /** @param qstr Qore-style SQL statement
QoreJdbcConnection.h:        @param args SQL parameters
QoreJdbcConnection.h:        @param xsink exception sink
QoreJdbcConnection.h:        @return a list of row hashes
QoreJdbcConnection.h:    */
QoreJdbcConnection.h:    DLLLOCAL QoreListNode* selectRows(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcConnection.h:    //! Select one row from the database.
QoreJdbcConnection.h:    /** @param qstr Qore-style SQL statement
QoreJdbcConnection.h:        @param args SQL parameters
QoreJdbcConnection.h:        @param xsink exception sink
QoreJdbcConnection.h:        @return one row hash
QoreJdbcConnection.h:    */
QoreJdbcConnection.h:    DLLLOCAL QoreHashNode* selectRow(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcConnection.h:    //! Execute a Qore-style SQL statement with arguments.
QoreJdbcConnection.h:    /** @param qstr Qore-style SQL statement
QoreJdbcConnection.h:        @param args SQL parameters
QoreJdbcConnection.h:        @param xsink exception sink
QoreJdbcConnection.h:        @return 0 for OK, -1 for error
QoreJdbcConnection.h:    */
QoreJdbcConnection.h:    DLLLOCAL QoreValue exec(const QoreString* qstr, const QoreListNode* args, ExceptionSink* xsink);
QoreJdbcConnection.h:    //! Execute a raw SQL statement.
QoreJdbcConnection.h:    /** @param qstr SQL statement
QoreJdbcConnection.h:        @param xsink exception sink
QoreJdbcConnection.h:        @return 0 for OK, -1 for error
QoreJdbcConnection.h:    */
QoreJdbcConnection.h:    DLLLOCAL QoreValue execRaw(const QoreString* qstr, ExceptionSink* xsink);
QoreJdbcConnection.h:    DLLLOCAL QoreProgram* getProgram() const {
QoreJdbcConnection.h:        return pgm;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:    DLLLOCAL Datasource* getDatasource() {
QoreJdbcConnection.h:        return ds;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:    DLLLOCAL const Datasource* getDatasource() const {
QoreJdbcConnection.h:        return ds;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:    DLLLOCAL JniExternalProgramData* getQoreJniContext() const {
QoreJdbcConnection.h:        return jpc;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:    DLLLOCAL NumericOption getNumericOption() const {
QoreJdbcConnection.h:        return numeric;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:#if 0
QoreJdbcConnection.h:    DLLLOCAL DbType getDbType() const {
QoreJdbcConnection.h:        return dbtype;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:    DLLLOCAL bool areArraysSupported(Env& env);
QoreJdbcConnection.h:    DLLLOCAL jmethodID getOracleCreateArrayOfMethod() const {
QoreJdbcConnection.h:        assert(dbtype == DBT_ORACLE);
QoreJdbcConnection.h:        assert(methodOracleConnectionCreateOracleArray);
QoreJdbcConnection.h:        return methodOracleConnectionCreateOracleArray;
QoreJdbcConnection.h:    }
QoreJdbcConnection.h:#endif
QoreJdbcConnection.h:private:
QoreJdbcConnection.h:    //! Qore Program context
QoreJdbcConnection.h:    QoreProgram* pgm = qore_get_call_program_context();
QoreJdbcConnection.h:    //! JNI program context
QoreJdbcConnection.h:    JniExternalProgramData* jpc = nullptr;
QoreJdbcConnection.h:    //! Qore datasource.
QoreJdbcConnection.h:    Datasource* ds = nullptr;
QoreJdbcConnection.h:    //! Connection object
QoreJdbcConnection.h:    GlobalReference<jobject> connection;
QoreJdbcConnection.h:    //! Classpath value
QoreJdbcConnection.h:    std::string classpath;
QoreJdbcConnection.h:    //! Overridden db URL value
QoreJdbcConnection.h:    std::string db;
QoreJdbcConnection.h:    //! Option for numeric values
QoreJdbcConnection.h:    NumericOption numeric = ENO_OPTIMAL;
QoreJdbcConnection.h:#if 0
QoreJdbcConnection.h:    //! DB type
QoreJdbcConnection.h:    DbType dbtype = DBT_UNKNOWN;
QoreJdbcConnection.h:    //! Array support types
QoreJdbcConnection.h:    enum DriverArraySupport {
QoreJdbcConnection.h:        DAS_UNKNOWN = 0,
QoreJdbcConnection.h:        DAS_SUPPORTED,
QoreJdbcConnection.h:        DAS_NOT_SUPPORTED,
QoreJdbcConnection.h:    };
QoreJdbcConnection.h:    //! JDBC driver array support
QoreJdbcConnection.h:    DriverArraySupport array_support = DAS_UNKNOWN;
QoreJdbcConnection.h:    //! Array OracleConnection.createOracleArray(String, Object[]) method ID
QoreJdbcConnection.h:    jmethodID methodOracleConnectionCreateOracleArray = 0;
QoreJdbcConnection.h:    //! Mutex for atomic operations
QoreJdbcConnection.h:    QoreThreadLock m;
QoreJdbcConnection.h:#endif
QoreJdbcConnection.h:    DLLLOCAL int connect(Env& env, ExceptionSink* xsink);
QoreJdbcConnection.h:    //! Parse options passed through the Datasource
QoreJdbcConnection.h:    /** @param xsink exception sink
QoreJdbcConnection.h:        @return 0 for OK, -1 for error
QoreJdbcConnection.h:     */
QoreJdbcConnection.h:    DLLLOCAL int parseOptions(ExceptionSink* xsink);
QoreJdbcConnection.h:    QoreJdbcConnection(const QoreJdbcConnection&) = delete;
QoreJdbcConnection.h:    QoreJdbcConnection& operator=(const QoreJdbcConnection&) = delete;
QoreJdbcConnection.h:};
QoreJdbcConnection.h:}
QoreJdbcConnection.h:#endif
QoreToJava.cpp://--------------------------------------------------------------------*- C++ -*-
QoreToJava.cpp://
QoreToJava.cpp://  Qore Programming Language
QoreToJava.cpp://
QoreToJava.cpp://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreToJava.cpp://
QoreToJava.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
QoreToJava.cpp://  copy of this software and associated documentation files (the "Software"),
QoreToJava.cpp://  to deal in the Software without restriction, including without limitation
QoreToJava.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
QoreToJava.cpp://  and/or sell copies of the Software, and to permit persons to whom the
QoreToJava.cpp://  Software is furnished to do so, subject to the following conditions:
QoreToJava.cpp://
QoreToJava.cpp://  The above copyright notice and this permission notice shall be included in
QoreToJava.cpp://  all copies or substantial portions of the Software.
QoreToJava.cpp://
QoreToJava.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
QoreToJava.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
QoreToJava.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
QoreToJava.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
QoreToJava.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
QoreToJava.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
QoreToJava.cpp://  DEALINGS IN THE SOFTWARE.
QoreToJava.cpp://
QoreToJava.cpp://------------------------------------------------------------------------------
QoreToJava.cpp:#include "QoreToJava.h"
QoreToJava.cpp:namespace jni {
QoreToJava.cpp:static jstring jni_string_to_jstring(const QoreStringNode& qstr) {
QoreToJava.cpp:    ModifiedUtf8String str(qstr);
QoreToJava.cpp:    Env env;
QoreToJava.cpp:    return env.newString(str.c_str()).release();
QoreToJava.cpp:}
QoreToJava.cpp:static jobject jni_date_to_jobject(const DateTimeNode& qdate) {
QoreToJava.cpp:    Env env;
QoreToJava.cpp:    if (qdate.isAbsolute()) {
QoreToJava.cpp:        QoreString str;
QoreToJava.cpp:        qdate.format(str, "YYYY-MM-DDTHH:mm:SS.xxZ");
QoreToJava.cpp:        LocalReference<jstring> date_str = env.newString(str.c_str());
QoreToJava.cpp:        std::vector<jvalue> jargs(1);
QoreToJava.cpp:        jargs[0].l = date_str;
QoreToJava.cpp:        return env.callStaticObjectMethod(Globals::classZonedDateTime, Globals::methodZonedDateTimeParse, &jargs[0]).release();
QoreToJava.cpp:    }
QoreToJava.cpp:    // return QoreRelativeTime object
QoreToJava.cpp:    qore_tm info;
QoreToJava.cpp:    qdate.getInfo(info);
QoreToJava.cpp:    std::vector<jvalue> jargs(7);
QoreToJava.cpp:    jargs[0].i = info.year;
QoreToJava.cpp:    jargs[1].i = info.month;
QoreToJava.cpp:    jargs[2].i = info.day;
QoreToJava.cpp:    jargs[3].i = info.hour;
QoreToJava.cpp:    jargs[4].i = info.minute;
QoreToJava.cpp:    jargs[5].i = info.second;
QoreToJava.cpp:    jargs[6].i = info.us;
QoreToJava.cpp:    return env.newObject(Globals::classQoreRelativeTime, Globals::ctorQoreRelativeTime, &jargs[0]).release();
QoreToJava.cpp:}
QoreToJava.cpp:jobject QoreToJava::toAnyObject(Env& env, const QoreValue& value, JniExternalProgramData* jpc) {
QoreToJava.cpp:    switch (value.getType()) {
QoreToJava.cpp:        case NT_BOOLEAN: {
QoreToJava.cpp:            jvalue arg;
QoreToJava.cpp:            arg.z = value.getAsBool();
QoreToJava.cpp:            return env.newObject(Globals::classBoolean, Globals::ctorBoolean, &arg).release();
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_INT: {
QoreToJava.cpp:            jvalue arg;
QoreToJava.cpp:            int64 v = value.getAsBigInt();
QoreToJava.cpp:            arg.j = v;
QoreToJava.cpp:            return env.newObject(Globals::classLong, Globals::ctorLong, &arg).release();
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_FLOAT: {
QoreToJava.cpp:            jvalue arg;
QoreToJava.cpp:            arg.d = value.getAsFloat();
QoreToJava.cpp:            return env.newObject(Globals::classDouble, Globals::ctorDouble, &arg).release();
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_STRING: {
QoreToJava.cpp:            return jni_string_to_jstring(*value.get<QoreStringNode>());
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_DATE: {
QoreToJava.cpp:            return jni_date_to_jobject(*value.get<const DateTimeNode>());
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_NUMBER: {
QoreToJava.cpp:            return makeBigDecimal(env, *value.get<const QoreNumberNode>());
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_OBJECT: {
QoreToJava.cpp:            QoreObject* o = const_cast<QoreObject*>(value.get<const QoreObject>());
QoreToJava.cpp:            if (jpc) {
QoreToJava.cpp:                return jpc->getJavaObject(o).release();
QoreToJava.cpp:            }
QoreToJava.cpp:            jobject javaObjectRef = qjcm.getJavaObject(o);
QoreToJava.cpp:            if (javaObjectRef) {
QoreToJava.cpp:                return javaObjectRef;
QoreToJava.cpp:            }
QoreToJava.cpp:            return nullptr;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_RUNTIME_CLOSURE:
QoreToJava.cpp:        case NT_FUNCREF: {
QoreToJava.cpp:            const ResolvedCallReferenceNode* call = value.get<const ResolvedCallReferenceNode>();
QoreToJava.cpp:            return qjcm.getJavaClosure(call);
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_HASH: {
QoreToJava.cpp:            return makeMap(*value.get<QoreHashNode>(), Globals::classHash, jpc);
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_BINARY: {
QoreToJava.cpp:            return makeByteArray(env, *value.get<BinaryNode>());
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_NOTHING:
QoreToJava.cpp:        case NT_NULL:
QoreToJava.cpp:            return nullptr;
QoreToJava.cpp:        case NT_LIST:
QoreToJava.cpp:            return Array::toJava(value.get<QoreListNode>(), 0, jpc).release();
QoreToJava.cpp:    }
QoreToJava.cpp:    QoreStringMaker desc("XX(%d) don't know how to convert a value of type '%s' to a Java object (expecting " \
QoreToJava.cpp:        "'java.lang.Object')", value.getType(), value.getFullTypeName());
QoreToJava.cpp:    throw BasicException(desc.c_str());
QoreToJava.cpp:}
QoreToJava.cpp:jobject QoreToJava::toObject(Env& env, const QoreValue& value, jclass cls, JniExternalProgramData* jpc) {
QoreToJava.cpp:    if (value.isNullOrNothing())
QoreToJava.cpp:        return nullptr;
QoreToJava.cpp:    if (cls) {
QoreToJava.cpp:        if (env.isSameObject(cls, Globals::classObject)) {
QoreToJava.cpp:            return toAnyObject(env, value, jpc);
QoreToJava.cpp:        }
QoreToJava.cpp:        switch (value.getType()) {
QoreToJava.cpp:            // check compatible primitive types
QoreToJava.cpp:            case NT_BOOLEAN: {
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classBoolean)
QoreToJava.cpp:                    || env.isSameObject(cls, Globals::classPrimitiveBoolean)) {
QoreToJava.cpp:                    return toAnyObject(env, value, jpc);
QoreToJava.cpp:                }
QoreToJava.cpp:                break;
QoreToJava.cpp:            }
QoreToJava.cpp:            case NT_INT: {
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classLong) || env.isSameObject(cls, Globals::classPrimitiveLong)) {
QoreToJava.cpp:                    jvalue arg;
QoreToJava.cpp:                    int64 v = value.getAsBigInt();
QoreToJava.cpp:                    arg.j = (jlong)v;
QoreToJava.cpp:                    return env.newObject(Globals::classLong, Globals::ctorLong, &arg).release();
QoreToJava.cpp:                }
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classInteger) || env.isSameObject(cls, Globals::classPrimitiveInt)) {
QoreToJava.cpp:                    jvalue arg;
QoreToJava.cpp:                    int64 v = value.getAsBigInt();
QoreToJava.cpp:                    arg.i = (jint)v;
QoreToJava.cpp:                    return env.newObject(Globals::classInteger, Globals::ctorInteger, &arg).release();
QoreToJava.cpp:                }
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classShort) || env.isSameObject(cls, Globals::classPrimitiveShort)) {
QoreToJava.cpp:                    jvalue arg;
QoreToJava.cpp:                    int64 v = value.getAsBigInt();
QoreToJava.cpp:                    arg.s = (jshort)v;
QoreToJava.cpp:                    return env.newObject(Globals::classShort, Globals::ctorShort, &arg).release();
QoreToJava.cpp:                }
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classCharacter) || env.isSameObject(cls, Globals::classPrimitiveChar)) {
QoreToJava.cpp:                    jvalue arg;
QoreToJava.cpp:                    int64 v = value.getAsBigInt();
QoreToJava.cpp:                    arg.s = (jchar)v;
QoreToJava.cpp:                    return env.newObject(Globals::classCharacter, Globals::ctorCharacter, &arg).release();
QoreToJava.cpp:                }
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classByte) || env.isSameObject(cls, Globals::classPrimitiveByte)) {
QoreToJava.cpp:                    jvalue arg;
QoreToJava.cpp:                    int64 v = value.getAsBigInt();
QoreToJava.cpp:                    arg.s = (jbyte)v;
QoreToJava.cpp:                    return env.newObject(Globals::classByte, Globals::ctorByte, &arg).release();
QoreToJava.cpp:                }
QoreToJava.cpp:                break;
QoreToJava.cpp:            }
QoreToJava.cpp:            case NT_FLOAT: {
QoreToJava.cpp:                if (env.isSameObject(cls, Globals::classDouble)
QoreToJava.cpp:                    || env.isSameObject(cls, Globals::classPrimitiveDouble)) {
QoreToJava.cpp:                    return toAnyObject(env, value, jpc);
QoreToJava.cpp:                }
QoreToJava.cpp:                break;
QoreToJava.cpp:            }
QoreToJava.cpp:        }
QoreToJava.cpp:    }
QoreToJava.cpp:    LocalReference<jobject> javaObjectRef;
QoreToJava.cpp:    switch (value.getType()) {
QoreToJava.cpp:        case NT_STRING: {
QoreToJava.cpp:            javaObjectRef = jni_string_to_jstring(*value.get<QoreStringNode>());
QoreToJava.cpp:            break;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_LIST: {
QoreToJava.cpp:            javaObjectRef = static_cast<jobject>(qjcm.getJavaArray(value.get<QoreListNode>(), cls));
QoreToJava.cpp:            break;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_DATE: {
QoreToJava.cpp:            javaObjectRef = jni_date_to_jobject(*value.get<const DateTimeNode>());
QoreToJava.cpp:            break;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_NUMBER: {
QoreToJava.cpp:            javaObjectRef = makeBigDecimal(env, *value.get<const QoreNumberNode>());
QoreToJava.cpp:            break;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_HASH: {
QoreToJava.cpp:            return makeMap(*value.get<QoreHashNode>(), cls, jpc);
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_OBJECT: {
QoreToJava.cpp:            const QoreObject* o = value.get<QoreObject>();
QoreToJava.cpp:            if (jpc) {
QoreToJava.cpp:                javaObjectRef = jpc->getJavaObject(o);
QoreToJava.cpp:            } else {
QoreToJava.cpp:                javaObjectRef = qjcm.getJavaObject(o);
QoreToJava.cpp:            }
QoreToJava.cpp:            if (!javaObjectRef) {
QoreToJava.cpp:                ExceptionSink xsink;
QoreToJava.cpp:                TryPrivateDataRefHolder<ObjectBase> jo(o, CID_JAVAARRAY, &xsink);
QoreToJava.cpp:                if (!jo) {
QoreToJava.cpp:                    if (xsink)
QoreToJava.cpp:                        throw XsinkException(xsink);
QoreToJava.cpp:                    if (cls) {
QoreToJava.cpp:                        LocalReference<jstring> clsName = env.callObjectMethod(cls,
QoreToJava.cpp:                            Globals::methodClassGetCanonicalName, nullptr).as<jstring>();
QoreToJava.cpp:                        Env::GetStringUtfChars cname(env, clsName);
QoreToJava.cpp:                        QoreStringMaker desc("A Java object argument of class '%s' expected; got object of class " \
QoreToJava.cpp:                            "'%s' instead", cname.c_str(), o->getClassName());
QoreToJava.cpp:                        throw BasicException(desc.c_str());
QoreToJava.cpp:                    }
QoreToJava.cpp:                    QoreStringMaker desc("A Java object argument expected; got object of class '%s' instead",
QoreToJava.cpp:                        o->getClassName());
QoreToJava.cpp:                    throw BasicException(desc.c_str());
QoreToJava.cpp:                }
QoreToJava.cpp:                javaObjectRef = jo->makeLocal();
QoreToJava.cpp:            }
QoreToJava.cpp:            break;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_RUNTIME_CLOSURE:
QoreToJava.cpp:        case NT_FUNCREF: {
QoreToJava.cpp:            const ResolvedCallReferenceNode* call = value.get<const ResolvedCallReferenceNode>();
QoreToJava.cpp:            javaObjectRef = qjcm.getJavaClosure(call);
QoreToJava.cpp:            break;
QoreToJava.cpp:        }
QoreToJava.cpp:        case NT_BINARY: {
QoreToJava.cpp:            return makeByteArray(env, *value.get<BinaryNode>());
QoreToJava.cpp:        }
QoreToJava.cpp:        default: {
QoreToJava.cpp:            if (cls) {
QoreToJava.cpp:                LocalReference<jstring> clsName = env.callObjectMethod(cls, Globals::methodClassGetCanonicalName,
QoreToJava.cpp:                    nullptr).as<jstring>();
QoreToJava.cpp:                Env::GetStringUtfChars cname(env, clsName);
QoreToJava.cpp:                QoreStringMaker desc("A Java object argument of class '%s' expected; got type '%s' instead",
QoreToJava.cpp:                    cname.c_str(), value.getTypeName());
QoreToJava.cpp:                throw BasicException(desc.c_str());
QoreToJava.cpp:            }
QoreToJava.cpp:            // convert primitive types to java objects if possible
QoreToJava.cpp:            return toAnyObject(env, value, jpc);
QoreToJava.cpp:        }
QoreToJava.cpp:    }
QoreToJava.cpp:    if (cls) {
QoreToJava.cpp:        if (!env.isInstanceOf(javaObjectRef, cls)) {
QoreToJava.cpp:            LocalReference<jstring> clsName =
QoreToJava.cpp:                env.callObjectMethod(cls, Globals::methodClassGetCanonicalName, nullptr).as<jstring>();
QoreToJava.cpp:            Env::GetStringUtfChars cname(env, clsName);
QoreToJava.cpp:            LocalReference<jclass> ocls = env.getObjectClass(javaObjectRef);
QoreToJava.cpp:            LocalReference<jstring> oclsName =
QoreToJava.cpp:                env.callObjectMethod(ocls, Globals::methodClassGetCanonicalName, nullptr).as<jstring>();
QoreToJava.cpp:            Env::GetStringUtfChars ocname(env, oclsName);
QoreToJava.cpp:            if (!strcmp(cname.c_str(), ocname.c_str())) {
QoreToJava.cpp:                QoreStringMaker str("ClassLoader error; expected a Java object of class '%s'; object has same "
QoreToJava.cpp:                    "class name but a different classloader and is therefore incompatible",
QoreToJava.cpp:                    cname.c_str(), ocname.c_str());
QoreToJava.cpp:                throw BasicException(str.c_str());
QoreToJava.cpp:            }
QoreToJava.cpp:            QoreStringMaker str("expected class '%s'; instead got an object of class '%s'", cname.c_str(),
QoreToJava.cpp:                ocname.c_str());
QoreToJava.cpp:            throw BasicException(str.c_str());
QoreToJava.cpp:        }
QoreToJava.cpp:    }
QoreToJava.cpp:    return javaObjectRef.release();
QoreToJava.cpp:}
QoreToJava.cpp:jobject QoreToJava::makeMap(const QoreHashNode& h, jclass cls, JniExternalProgramData* jpc) {
QoreToJava.cpp:    Env env;
QoreToJava.cpp:    // get constructor for class
QoreToJava.cpp:    jmethodID ctor;
QoreToJava.cpp:    jmethodID put;
QoreToJava.cpp:    try {
QoreToJava.cpp:        ctor = env.getMethod(cls, "<init>", "()V");
QoreToJava.cpp:        put = env.getMethod(cls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
QoreToJava.cpp:    } catch (jni::Exception& e) {
QoreToJava.cpp:        e.ignore();
QoreToJava.cpp:        // try Hash
QoreToJava.cpp:        cls = Globals::classHash;
QoreToJava.cpp:        ctor = Globals::ctorHash;
QoreToJava.cpp:        put = Globals::methodHashPut;
QoreToJava.cpp:    }
QoreToJava.cpp:    LocalReference<jobject> hm = env.newObject(cls, ctor, nullptr);
QoreToJava.cpp:    ConstHashIterator i(h);
QoreToJava.cpp:    while (i.next()) {
QoreToJava.cpp:        LocalReference<jstring> key = env.newString(i.getKey());
QoreToJava.cpp:        QoreValue v(i.get());
QoreToJava.cpp:        LocalReference<jobject> value = toAnyObject(env, v, jpc);
QoreToJava.cpp:        std::vector<jvalue> jargs(2);
QoreToJava.cpp:        jargs[0].l = key;
QoreToJava.cpp:        jargs[1].l = value;
QoreToJava.cpp:        env.callObjectMethod(hm, put, &jargs[0]);
QoreToJava.cpp:    }
QoreToJava.cpp:    return hm.release();
QoreToJava.cpp:}
QoreToJava.cpp:jbyteArray QoreToJava::makeByteArray(Env& env, const BinaryNode& b) {
QoreToJava.cpp:    LocalReference<jbyteArray> array = env.newByteArray(b.size()).as<jbyteArray>();
QoreToJava.cpp:    for (jsize i = 0; i < static_cast<jsize>(b.size()); ++i) {
QoreToJava.cpp:        env.setByteArrayElement(array, i, ((const char*)b.getPtr())[i]);
QoreToJava.cpp:    }
QoreToJava.cpp:    return array.release();
QoreToJava.cpp:}
QoreToJava.cpp:jobject QoreToJava::makeBigDecimal(Env& env, const QoreNumberNode& num) {
QoreToJava.cpp:    QoreString str;
QoreToJava.cpp:    num.toString(str);
QoreToJava.cpp:    LocalReference<jstring> num_str = env.newString(str.c_str());
QoreToJava.cpp:    std::vector<jvalue> jargs(1);
QoreToJava.cpp:    jargs[0].l = num_str;
QoreToJava.cpp:    return env.newObject(Globals::classBigDecimal, Globals::ctorBigDecimal, &jargs[0]).release();
QoreToJava.cpp:}
QoreToJava.cpp:}
Functions.h://--------------------------------------------------------------------*- C++ -*-
Functions.h://
Functions.h://  Qore Programming Language
Functions.h://
Functions.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Functions.h://
Functions.h://  Permission is hereby granted, free of charge, to any person obtaining a
Functions.h://  copy of this software and associated documentation files (the "Software"),
Functions.h://  to deal in the Software without restriction, including without limitation
Functions.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Functions.h://  and/or sell copies of the Software, and to permit persons to whom the
Functions.h://  Software is furnished to do so, subject to the following conditions:
Functions.h://
Functions.h://  The above copyright notice and this permission notice shall be included in
Functions.h://  all copies or substantial portions of the Software.
Functions.h://
Functions.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Functions.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Functions.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Functions.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Functions.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Functions.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Functions.h://  DEALINGS IN THE SOFTWARE.
Functions.h://
Functions.h://------------------------------------------------------------------------------
Functions.h:///
Functions.h:/// \file
Functions.h:/// \brief Defines the Functions class.
Functions.h:///
Functions.h://------------------------------------------------------------------------------
Functions.h:#ifndef QORE_JNI_FUNCTIONS_H_
Functions.h:#define QORE_JNI_FUNCTIONS_H_
Functions.h:#include "Env.h"
Functions.h:#include "Array.h"
Functions.h:#include "Class.h"
Functions.h:#include "ModifiedUtf8String.h"
Functions.h:#include "InvocationHandler.h"
Functions.h:#include "Globals.h"
Functions.h:namespace jni {
Functions.h:/**
Functions.h: * \brief Implementation of the global functions declared in ql_jni.qpp.
Functions.h: */
Functions.h:class Functions {
Functions.h:public:
Functions.h:    static QoreStringNode* getVersion() {
Functions.h:        Env env;
Functions.h:        jint v = env.getVersion();
Functions.h:        QoreStringNode *str = new QoreStringNode();
Functions.h:        str->sprintf("%d.%d", v >> 16, v & 0xFFFF);
Functions.h:        return str;
Functions.h:    }
Functions.h:    // 'name' must be in UTF-8 encoding
Functions.h:    static Class* loadClass(const char* name) {
Functions.h:        Env env;
Functions.h:        printd(LogLevel, "loadClass '%s'\n", name);
Functions.h:        return new Class(env.findClass(name));
Functions.h:    }
Functions.h:    // 'name' must be in UTF-8 encoding
Functions.h:    static Class* loadClass(Env& env, const char* name) {
Functions.h:        printd(LogLevel, "loadClass '%s'\n", name);
Functions.h:        return new Class(env.findClass(name));
Functions.h:    }
Functions.h:    static Class* loadClass(const QoreString& name) {
Functions.h:        ModifiedUtf8String nameUtf8(name);
Functions.h:        return loadClass(nameUtf8.c_str());
Functions.h:    }
Functions.h:    static LocalReference<jobject> implementInterface(jobject classLoader, const InvocationHandler *invocationHandler, jclass cls) {
Functions.h:        Env env;
Functions.h:        LocalReference<jobject> cl;
Functions.h:        LocalReference<jobjectArray> interfaces = env.newObjectArray(1, Globals::classClass);
Functions.h:        env.setObjectArrayElement(interfaces, 0, cls);
Functions.h:        jvalue args[3];
Functions.h:        if (classLoader == nullptr) {
Functions.h:            cl = env.callObjectMethod(cls, Globals::methodClassGetClassLoader, nullptr);
Functions.h:            args[0].l = cl;
Functions.h:        } else {
Functions.h:            args[0].l = classLoader;
Functions.h:        }
Functions.h:        args[1].l = interfaces;
Functions.h:        args[2].l = invocationHandler->getObject();
Functions.h:        return env.callStaticObjectMethod(Globals::classProxy, Globals::methodProxyNewProxyInstance, args);
Functions.h:    }
Functions.h:    static Array *newBooleanArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newBooleanArray(size));
Functions.h:    }
Functions.h:    static Array *newByteArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newByteArray(size));
Functions.h:    }
Functions.h:    static Array *newCharArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newCharArray(size));
Functions.h:    }
Functions.h:    static Array *newShortArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newShortArray(size));
Functions.h:    }
Functions.h:    static Array *newIntArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newIntArray(size));
Functions.h:    }
Functions.h:    static Array *newLongArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newLongArray(size));
Functions.h:    }
Functions.h:    static Array *newFloatArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newFloatArray(size));
Functions.h:    }
Functions.h:    static Array *newDoubleArray(int64 size) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newDoubleArray(size));
Functions.h:    }
Functions.h:    static Array *newObjectArray(int64 size, const Class *cls) {
Functions.h:        Env env;
Functions.h:        return new Array(env.newObjectArray(size, cls->getJavaObject()));
Functions.h:    }
Functions.h:private:
Functions.h:    Functions() = delete;
Functions.h:};
Functions.h:} // namespace jni
Functions.h:#endif // QORE_JNI_FUNCTIONS_H_
QC_QoreInvocationHandler.qpp:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QC_QoreInvocationHandler.qpp:/** @file QC_QoreInvocationHandler.qpp QoreInvocationHandler class definition */
QC_QoreInvocationHandler.qpp:/*
QC_QoreInvocationHandler.qpp:    Qore Programming Language
QC_QoreInvocationHandler.qpp:    Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
QC_QoreInvocationHandler.qpp:    Permission is hereby granted, free of charge, to any person obtaining a
QC_QoreInvocationHandler.qpp:    copy of this software and associated documentation files (the "Software"),
QC_QoreInvocationHandler.qpp:    to deal in the Software without restriction, including without limitation
QC_QoreInvocationHandler.qpp:    the rights to use, copy, modify, merge, publish, distribute, sublicense,
QC_QoreInvocationHandler.qpp:    and/or sell copies of the Software, and to permit persons to whom the
QC_QoreInvocationHandler.qpp:    Software is furnished to do so, subject to the following conditions:
QC_QoreInvocationHandler.qpp:    The above copyright notice and this permission notice shall be included in
QC_QoreInvocationHandler.qpp:    all copies or substantial portions of the Software.
QC_QoreInvocationHandler.qpp:    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
QC_QoreInvocationHandler.qpp:    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
QC_QoreInvocationHandler.qpp:    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
QC_QoreInvocationHandler.qpp:    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
QC_QoreInvocationHandler.qpp:    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
QC_QoreInvocationHandler.qpp:    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
QC_QoreInvocationHandler.qpp:    DEALINGS IN THE SOFTWARE.
QC_QoreInvocationHandler.qpp:    Note that the Qore library is released under a choice of three open-source
QC_QoreInvocationHandler.qpp:    licenses: MIT (as above), LGPL 2+, or GPL 2+; see README-LICENSE for more
QC_QoreInvocationHandler.qpp:    information.
QC_QoreInvocationHandler.qpp:*/
QC_QoreInvocationHandler.qpp:#include <qore/Qore.h>
QC_QoreInvocationHandler.qpp:#include "InvocationHandler.h"
QC_QoreInvocationHandler.qpp:#include "QoreJniClassMap.h"
QC_QoreInvocationHandler.qpp:using namespace jni;
QC_QoreInvocationHandler.qpp://! Represents an invocation handler used to implement callback from Java to Qore.
QC_QoreInvocationHandler.qpp:/**
QC_QoreInvocationHandler.qpp: */
QC_QoreInvocationHandler.qpp:qclass QoreInvocationHandler [arg=jni::InvocationHandler* handler; ns=Jni::org::qore::jni; flags=final; vparent=InvocationHandler];
QC_QoreInvocationHandler.qpp://! Creates a new invocation handler.
QC_QoreInvocationHandler.qpp:/**
QC_QoreInvocationHandler.qpp:    @param dispatcher a function that implements the dispatching, see example
QC_QoreInvocationHandler.qpp:    @par Example:
QC_QoreInvocationHandler.qpp:    @code{.py}
QC_QoreInvocationHandler.qpp:    QoreInvocationHandler h(any sub(Jni::Method m, *list args) {
QC_QoreInvocationHandler.qpp:        # handle invocation of method m with arguments args
QC_QoreInvocationHandler.qpp:    });
QC_QoreInvocationHandler.qpp:    @endcode
QC_QoreInvocationHandler.qpp: */
QC_QoreInvocationHandler.qpp:QoreInvocationHandler::constructor(code dispatcher) {
QC_QoreInvocationHandler.qpp:    try {
QC_QoreInvocationHandler.qpp:        self->setPrivate(CID_QOREINVOCATIONHANDLER, new jni::InvocationHandler(dispatcher));
QC_QoreInvocationHandler.qpp:    } catch (jni::Exception &e) {
QC_QoreInvocationHandler.qpp:        e.convert(xsink);
QC_QoreInvocationHandler.qpp:    }
QC_QoreInvocationHandler.qpp:}
QC_QoreInvocationHandler.qpp://! Explicitly destroys the invocation handler even if it is still reachable from Java.
QC_QoreInvocationHandler.qpp:/**
QC_QoreInvocationHandler.qpp: */
QC_QoreInvocationHandler.qpp:nothing QoreInvocationHandler::destroy() {
QC_QoreInvocationHandler.qpp:    try {
QC_QoreInvocationHandler.qpp:        handler->destroy();
QC_QoreInvocationHandler.qpp:    } catch (jni::Exception &e) {
QC_QoreInvocationHandler.qpp:        e.convert(xsink);
QC_QoreInvocationHandler.qpp:    }
QC_QoreInvocationHandler.qpp:}
QC_QoreInvocationHandler.qpp://! invocation method for the handler
QC_QoreInvocationHandler.qpp:/** @throw ERROR-UNSUPPORTED when called from Qore; currently this can only be invoked from Java
QC_QoreInvocationHandler.qpp: */
QC_QoreInvocationHandler.qpp:auto QoreInvocationHandler::invoke(auto[doc] object, *Jni::java::lang::reflect::Method[QoreJniPrivateData] method, softlist<auto>[doc] vargs) {
QC_QoreInvocationHandler.qpp:    xsink->raiseException("ERROR-UNSUPPORTED", "cannot call QoreInvocationHandler::invoke() from Qore yet; not yet " \
QC_QoreInvocationHandler.qpp:        "implemented (can only be called from Java at the moment)");
QC_QoreInvocationHandler.qpp:    return QoreValue();
QC_QoreInvocationHandler.qpp:}
ModifiedUtf8String.h://--------------------------------------------------------------------*- C++ -*-
ModifiedUtf8String.h://
ModifiedUtf8String.h://  Qore Programming Language
ModifiedUtf8String.h://
ModifiedUtf8String.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
ModifiedUtf8String.h://
ModifiedUtf8String.h://  Permission is hereby granted, free of charge, to any person obtaining a
ModifiedUtf8String.h://  copy of this software and associated documentation files (the "Software"),
ModifiedUtf8String.h://  to deal in the Software without restriction, including without limitation
ModifiedUtf8String.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
ModifiedUtf8String.h://  and/or sell copies of the Software, and to permit persons to whom the
ModifiedUtf8String.h://  Software is furnished to do so, subject to the following conditions:
ModifiedUtf8String.h://
ModifiedUtf8String.h://  The above copyright notice and this permission notice shall be included in
ModifiedUtf8String.h://  all copies or substantial portions of the Software.
ModifiedUtf8String.h://
ModifiedUtf8String.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ModifiedUtf8String.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ModifiedUtf8String.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ModifiedUtf8String.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ModifiedUtf8String.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
ModifiedUtf8String.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
ModifiedUtf8String.h://  DEALINGS IN THE SOFTWARE.
ModifiedUtf8String.h://
ModifiedUtf8String.h://------------------------------------------------------------------------------
ModifiedUtf8String.h:///
ModifiedUtf8String.h:/// \file
ModifiedUtf8String.h:/// \brief Defines the ModifiedUtf8String class.
ModifiedUtf8String.h:///
ModifiedUtf8String.h://------------------------------------------------------------------------------
ModifiedUtf8String.h:#ifndef QORE_JNI_MODIFIEDUTF8STRING_H_
ModifiedUtf8String.h:#define QORE_JNI_MODIFIEDUTF8STRING_H_
ModifiedUtf8String.h:#include <qore/Qore.h>
ModifiedUtf8String.h:namespace jni {
ModifiedUtf8String.h:/**
ModifiedUtf8String.h: * \brief A helper class for converting strings to JNI's "modified utf-8" encoding.
ModifiedUtf8String.h: */
ModifiedUtf8String.h:class ModifiedUtf8String {
ModifiedUtf8String.h:public:
ModifiedUtf8String.h:   /**
ModifiedUtf8String.h:    * \brief Converts the source string.
ModifiedUtf8String.h:    *
ModifiedUtf8String.h:    * Raises an exception if the string cannot be converted
ModifiedUtf8String.h:    * \param src the source string to convert, must not be null
ModifiedUtf8String.h:    * \throws StringException if the string cannot be converted
ModifiedUtf8String.h:    */
ModifiedUtf8String.h:   explicit ModifiedUtf8String(const QoreString& src) {
ModifiedUtf8String.h:      ExceptionSink xsink;
ModifiedUtf8String.h:      helper.set(&src, QCS_UTF8, &xsink);
ModifiedUtf8String.h:      //XXX check and convert special characters
ModifiedUtf8String.h:      if (xsink) {
ModifiedUtf8String.h:         throw XsinkException(xsink);
ModifiedUtf8String.h:      }
ModifiedUtf8String.h:   }
ModifiedUtf8String.h:   explicit ModifiedUtf8String(const QoreString* src) {
ModifiedUtf8String.h:      ExceptionSink xsink;
ModifiedUtf8String.h:      helper.set(src, QCS_UTF8, &xsink);
ModifiedUtf8String.h:      //XXX check and convert special characters
ModifiedUtf8String.h:      if (xsink) {
ModifiedUtf8String.h:         throw XsinkException(xsink);
ModifiedUtf8String.h:      }
ModifiedUtf8String.h:   }
ModifiedUtf8String.h:   /**
ModifiedUtf8String.h:    * \brief Returns the string converted to modified utf-8 encoding.
ModifiedUtf8String.h:    *
ModifiedUtf8String.h:    * The returned pointer remains valid until this instance is destroyed.
ModifiedUtf8String.h:    * \return the string converted to modified utf-8 encoding
ModifiedUtf8String.h:    */
ModifiedUtf8String.h:   const char* c_str() {
ModifiedUtf8String.h:      return helper->getBuffer();
ModifiedUtf8String.h:   }
ModifiedUtf8String.h:private:
ModifiedUtf8String.h:   TempEncodingHelper helper;
ModifiedUtf8String.h:};
ModifiedUtf8String.h:} // namespace jni
ModifiedUtf8String.h:#endif // QORE_JNI_MODIFIEDUTF8STRING_H_
Dispatcher.h://--------------------------------------------------------------------*- C++ -*-
Dispatcher.h://
Dispatcher.h://  Qore Programming Language
Dispatcher.h://
Dispatcher.h://  Copyright (C) 2016 - 2022 Qore Technologies, s.r.o.
Dispatcher.h://
Dispatcher.h://  Permission is hereby granted, free of charge, to any person obtaining a
Dispatcher.h://  copy of this software and associated documentation files (the "Software"),
Dispatcher.h://  to deal in the Software without restriction, including without limitation
Dispatcher.h://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Dispatcher.h://  and/or sell copies of the Software, and to permit persons to whom the
Dispatcher.h://  Software is furnished to do so, subject to the following conditions:
Dispatcher.h://
Dispatcher.h://  The above copyright notice and this permission notice shall be included in
Dispatcher.h://  all copies or substantial portions of the Software.
Dispatcher.h://
Dispatcher.h://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Dispatcher.h://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Dispatcher.h://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Dispatcher.h://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Dispatcher.h://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Dispatcher.h://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Dispatcher.h://  DEALINGS IN THE SOFTWARE.
Dispatcher.h://
Dispatcher.h://------------------------------------------------------------------------------
Dispatcher.h:///
Dispatcher.h:/// \file
Dispatcher.h:/// \brief Defines the method invocation dispatcher.
Dispatcher.h:///
Dispatcher.h://------------------------------------------------------------------------------
Dispatcher.h:#ifndef QORE_JNI_DISPATCHER_H_
Dispatcher.h:#define QORE_JNI_DISPATCHER_H_
Dispatcher.h:#include "Env.h"
Dispatcher.h:namespace jni {
Dispatcher.h:class Dispatcher {
Dispatcher.h:public:
Dispatcher.h:    virtual ~Dispatcher() = default;
Dispatcher.h:    virtual jobject dispatch(Env& env, jobject proxy, jobject method, jobjectArray args) = 0;
Dispatcher.h:protected:
Dispatcher.h:    Dispatcher() = default;
Dispatcher.h:private:
Dispatcher.h:    Dispatcher(const Dispatcher&) = delete;
Dispatcher.h:    Dispatcher(Dispatcher&&) = delete;
Dispatcher.h:    Dispatcher& operator=(const Dispatcher&) = delete;
Dispatcher.h:    Dispatcher& operator=(Dispatcher&&) = delete;
Dispatcher.h:};
Dispatcher.h:/**
Dispatcher.h: * \brief An implementation of Dispatcher that delegates the dispatch() call to a Qore function.
Dispatcher.h: */
Dispatcher.h:class QoreCodeDispatcher : public Dispatcher {
Dispatcher.h:public:
Dispatcher.h:    QoreCodeDispatcher(const ResolvedCallReferenceNode* callback);
Dispatcher.h:    ~QoreCodeDispatcher();
Dispatcher.h:    jobject dispatch(Env& env, jobject proxy, jobject method, jobjectArray args) override;
Dispatcher.h:private:
Dispatcher.h:    QoreProgram* pgm = getProgram();
Dispatcher.h:    ResolvedCallReferenceNode* callback;
Dispatcher.h:};
Dispatcher.h:} // namespace jni
Dispatcher.h:#endif // QORE_JNI_DISPATCHER_H_
Globals.cpp://--------------------------------------------------------------------*- C++ -*-
Globals.cpp://
Globals.cpp://  Qore Programming Language
Globals.cpp://
Globals.cpp://  Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
Globals.cpp://
Globals.cpp://  Permission is hereby granted, free of charge, to any person obtaining a
Globals.cpp://  copy of this software and associated documentation files (the "Software"),
Globals.cpp://  to deal in the Software without restriction, including without limitation
Globals.cpp://  the rights to use, copy, modify, merge, publish, distribute, sublicense,
Globals.cpp://  and/or sell copies of the Software, and to permit persons to whom the
Globals.cpp://  Software is furnished to do so, subject to the following conditions:
Globals.cpp://
Globals.cpp://  The above copyright notice and this permission notice shall be included in
Globals.cpp://  all copies or substantial portions of the Software.
Globals.cpp://
Globals.cpp://  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Globals.cpp://  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Globals.cpp://  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Globals.cpp://  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Globals.cpp://  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
Globals.cpp://  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
Globals.cpp://  DEALINGS IN THE SOFTWARE.
Globals.cpp://
Globals.cpp://------------------------------------------------------------------------------
Globals.cpp:///
Globals.cpp:/// \file
Globals.cpp:/// \brief TODO file description
Globals.cpp:///
Globals.cpp://------------------------------------------------------------------------------
Globals.cpp:#include "Globals.h"
Globals.cpp:#include "Env.h"
Globals.cpp:#include "Dispatcher.h"
Globals.cpp:#include "ModifiedUtf8String.h"
Globals.cpp:#include "Array.h"
Globals.cpp:#include "QoreToJava.h"
Globals.cpp:#include "QoreJniClassMap.h"
Globals.cpp:#include <bzlib.h>
Globals.cpp:#include <dlfcn.h>
Globals.cpp:namespace jni {
Globals.cpp:// Qore initialization flag
Globals.cpp:bool jni_qore_init = false;
Globals.cpp:ExceptionSink Globals::global_xsink;
Globals.cpp:std::unique_ptr<QoreProgramHelper> Globals::qph;
Globals.cpp:bool Globals::already_initialized = false;
Globals.cpp:GlobalReference<jobject> Globals::syscl;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveVoid;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveBoolean;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveByte;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveChar;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveShort;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveInt;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveLong;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveFloat;
Globals.cpp:GlobalReference<jclass> Globals::classPrimitiveDouble;
Globals.cpp:GlobalReference<jclass> Globals::arrayClassByte;
Globals.cpp:GlobalReference<jclass> Globals::arrayClassObject;
Globals.cpp:GlobalReference<jclass> Globals::classSystem;
Globals.cpp:jmethodID Globals::methodSystemSetProperty;
Globals.cpp:jmethodID Globals::methodSystemGetProperty;
Globals.cpp:GlobalReference<jclass> Globals::classObject;
Globals.cpp:jmethodID Globals::methodObjectClone;
Globals.cpp:jmethodID Globals::methodObjectGetClass;
Globals.cpp:jmethodID Globals::methodObjectEquals;
Globals.cpp:jmethodID Globals::methodObjectHashCode;
Globals.cpp:GlobalReference<jclass> Globals::classClass;
Globals.cpp:jmethodID Globals::methodClassIsArray;
Globals.cpp:jmethodID Globals::methodClassIsInterface;
Globals.cpp:jmethodID Globals::methodClassGetComponentType;
Globals.cpp:jmethodID Globals::methodClassGetClassLoader;
Globals.cpp:jmethodID Globals::methodClassGetName;
Globals.cpp:jmethodID Globals::methodClassGetDeclaredFields;
Globals.cpp:jmethodID Globals::methodClassGetSuperClass;
Globals.cpp:jmethodID Globals::methodClassGetInterfaces;
Globals.cpp:jmethodID Globals::methodClassGetDeclaredConstructors;
Globals.cpp:jmethodID Globals::methodClassGetDeclaredConstructor;
Globals.cpp:jmethodID Globals::methodClassGetModifiers;
Globals.cpp:jmethodID Globals::methodClassIsPrimitive;
Globals.cpp:jmethodID Globals::methodClassGetDeclaredMethods;
Globals.cpp:jmethodID Globals::methodClassGetCanonicalName;
Globals.cpp:jmethodID Globals::methodClassGetDeclaredField;
Globals.cpp:jmethodID Globals::methodClassIsAssignableFrom;
Globals.cpp:jmethodID Globals::methodClassGetMethod;
Globals.cpp:GlobalReference<jclass> Globals::classThrowable;
Globals.cpp:jmethodID Globals::methodThrowableGetMessage;
Globals.cpp:jmethodID Globals::methodThrowableGetStackTrace;
Globals.cpp:jmethodID Globals::methodThrowableGetCause;
Globals.cpp:GlobalReference<jclass> Globals::classStackTraceElement;
Globals.cpp:jmethodID Globals::methodStackTraceElementGetClassName;
Globals.cpp:jmethodID Globals::methodStackTraceElementGetFileName;
Globals.cpp:jmethodID Globals::methodStackTraceElementGetLineNumber;
Globals.cpp:jmethodID Globals::methodStackTraceElementGetMethodName;
Globals.cpp:jmethodID Globals::methodStackTraceElementIsNativeMethod;
Globals.cpp:GlobalReference<jclass> Globals::classString;
Globals.cpp:GlobalReference<jclass> Globals::classField;
Globals.cpp:jmethodID Globals::methodFieldGetDeclaringClass;
Globals.cpp:jmethodID Globals::methodFieldGetType;
Globals.cpp:jmethodID Globals::methodFieldGetModifiers;
Globals.cpp:jmethodID Globals::methodFieldGetName;
Globals.cpp:jmethodID Globals::methodFieldGet;
Globals.cpp:jmethodID Globals::methodFieldGetLong;
Globals.cpp:jmethodID Globals::methodFieldSetAccessible;
Globals.cpp:GlobalReference<jclass> Globals::classMethod;
Globals.cpp:jmethodID Globals::methodMethodGetReturnType;
Globals.cpp:jmethodID Globals::methodMethodGetParameterTypes;
Globals.cpp:jmethodID Globals::methodMethodGetDeclaringClass;
Globals.cpp:jmethodID Globals::methodMethodGetModifiers;
Globals.cpp:jmethodID Globals::methodMethodIsVarArgs;
Globals.cpp:jmethodID Globals::methodMethodGetName;
Globals.cpp:jmethodID Globals::methodMethodToGenericString;
Globals.cpp:GlobalReference<jclass> Globals::classConstructor;
Globals.cpp:jmethodID Globals::methodConstructorGetParameterTypes;
Globals.cpp:jmethodID Globals::methodConstructorToString;
Globals.cpp:jmethodID Globals::methodConstructorGetModifiers;
Globals.cpp:jmethodID Globals::methodConstructorIsVarArgs;
Globals.cpp:jmethodID Globals::methodConstructorNewInstance;
Globals.cpp:GlobalReference<jclass> Globals::classQoreInvocationHandler;
Globals.cpp:jmethodID Globals::ctorQoreInvocationHandler;
Globals.cpp:jmethodID Globals::methodQoreInvocationHandlerDestroy;
Globals.cpp:GlobalReference<jclass> Globals::classQoreJavaApi;
Globals.cpp:jmethodID Globals::methodQoreJavaApiGetStackTrace;
Globals.cpp:GlobalReference<jclass> Globals::classQoreExceptionWrapper;
Globals.cpp:jmethodID Globals::ctorQoreExceptionWrapper;
Globals.cpp:jmethodID Globals::methodQoreExceptionWrapperGet;
Globals.cpp:GlobalReference<jclass> Globals::classQoreException;
Globals.cpp:jmethodID Globals::methodQoreExceptionGetErr;
Globals.cpp:jmethodID Globals::methodQoreExceptionGetDesc;
Globals.cpp:jmethodID Globals::methodQoreExceptionGetArg;
Globals.cpp:GlobalReference<jclass> Globals::classQoreObjectBase;
Globals.cpp:GlobalReference<jclass> Globals::classQoreJavaClassBase;
Globals.cpp:jmethodID Globals::methodQoreObjectBaseGet;
Globals.cpp:GlobalReference<jclass> Globals::classQoreObject;
Globals.cpp:jmethodID Globals::ctorQoreObject;
Globals.cpp:GlobalReference<jclass> Globals::classQoreClosure;
Globals.cpp:jmethodID Globals::ctorQoreClosure;
Globals.cpp:jmethodID Globals::methodQoreClosureGet;
Globals.cpp:GlobalReference<jclass> Globals::classQoreObjectWrapper;
Globals.cpp:GlobalReference<jclass> Globals::classQoreClosureMarker;
Globals.cpp:GlobalReference<jclass> Globals::classQoreClosureMarkerImpl;
Globals.cpp:GlobalReference<jclass> Globals::classQoreJavaObjectPtr;
Globals.cpp:jmethodID Globals::ctorQoreJavaObjectPtr;
Globals.cpp:GlobalReference<jclass> Globals::classProxy;
Globals.cpp:jmethodID Globals::methodProxyNewProxyInstance;
Globals.cpp:GlobalReference<jclass> Globals::classClassLoader;
Globals.cpp:jmethodID Globals::methodClassLoaderLoadClass;
Globals.cpp:GlobalReference<jclass> Globals::classQoreURLClassLoader;
Globals.cpp:jmethodID Globals::ctorQoreURLClassLoader;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderAddPath;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderLoadClass;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderLoadClassWithPtr;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderLoadResolveClass;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderSetContext;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderGetProgramPtr;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderAddPendingClass;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderDefineResolveClass;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderGetResolveClass;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderClearCache;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderDefineClassUnconditional;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderGetPtr;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderGetCurrent;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderCheckInProgress;
Globals.cpp:jmethodID Globals::methodQoreURLClassLoaderClearProgramPtr;
Globals.cpp:GlobalReference<jclass> Globals::classJavaClassBuilder;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderGetClassBuilder;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderGetFunctionConstantClassBuilder;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderAddFunction;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderAddStaticField;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderCreateStaticInitializer;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderAddConstructor;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderAddNormalMethod;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderAddStaticMethod;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderGetByteCodeFromBuilder;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderGetTypeDescriptionCls;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderGetTypeDescriptionStr;
Globals.cpp:jmethodID Globals::methodJavaClassBuilderFindBaseClassMethodConflict;
Globals.cpp:GlobalReference<jclass> Globals::classGraphicsEnvironment;
Globals.cpp:jmethodID Globals::methodGraphicsEnvironmentIsHeadless;
Globals.cpp:GlobalReference<jclass> Globals::classThread;
Globals.cpp:jmethodID Globals::methodThreadCurrentThread;
Globals.cpp:jmethodID Globals::methodThreadGetContextClassLoader;
Globals.cpp:GlobalReference<jclass> Globals::classHashMap;
Globals.cpp:GlobalReference<jclass> Globals::classHash;
Globals.cpp:jmethodID Globals::ctorHash;
Globals.cpp:jmethodID Globals::methodHashPut;
Globals.cpp:GlobalReference<jclass> Globals::classMap;
Globals.cpp:jmethodID Globals::methodMapEntrySet;
Globals.cpp:GlobalReference<jclass> Globals::classList;
Globals.cpp:jmethodID Globals::methodListSize;
Globals.cpp:jmethodID Globals::methodListGet;
Globals.cpp:GlobalReference<jclass> Globals::classArrayList;
Globals.cpp:jmethodID Globals::ctorArrayList;
Globals.cpp:jmethodID Globals::methodArrayListAdd;
Globals.cpp:jmethodID Globals::methodArrayListGet;
Globals.cpp:jmethodID Globals::methodArrayListRemove;
Globals.cpp:jmethodID Globals::methodArrayListSize;
Globals.cpp:jmethodID Globals::methodArrayListToArray;
Globals.cpp:GlobalReference<jclass> Globals::classSet;
Globals.cpp:jmethodID Globals::methodSetIterator;
Globals.cpp:GlobalReference<jclass> Globals::classEntry;
Globals.cpp:jmethodID Globals::methodEntryGetKey;
Globals.cpp:jmethodID Globals::methodEntryGetValue;
Globals.cpp:GlobalReference<jclass> Globals::classIterator;
Globals.cpp:jmethodID Globals::methodIteratorHasNext;
Globals.cpp:jmethodID Globals::methodIteratorNext;
Globals.cpp:GlobalReference<jclass> Globals::classZonedDateTime;
Globals.cpp:jmethodID Globals::methodZonedDateTimeParse;
Globals.cpp:jmethodID Globals::methodZonedDateTimeToString;
Globals.cpp:GlobalReference<jclass> Globals::classQoreRelativeTime;
Globals.cpp:jmethodID Globals::ctorQoreRelativeTime;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeYear;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeMonth;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeDay;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeHour;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeMinute;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeSecond;
Globals.cpp:jfieldID Globals::fieldQoreRelativeTimeUs;
Globals.cpp:GlobalReference<jclass> Globals::classBigDecimal;
Globals.cpp:jmethodID Globals::ctorBigDecimal;
Globals.cpp:jmethodID Globals::methodBigDecimalToString;
Globals.cpp:GlobalReference<jclass> Globals::classArrays;
Globals.cpp:jmethodID Globals::methodArraysToString;
Globals.cpp:jmethodID Globals::methodArraysDeepToString;
Globals.cpp:GlobalReference<jclass> Globals::classBoolean;
Globals.cpp:jmethodID Globals::ctorBoolean;
Globals.cpp:jmethodID Globals::methodBooleanBooleanValue;
Globals.cpp:GlobalReference<jclass> Globals::classInteger;
Globals.cpp:jmethodID Globals::ctorInteger;
Globals.cpp:jmethodID Globals::methodIntegerIntValue;
Globals.cpp:GlobalReference<jclass> Globals::classLong;
Globals.cpp:jmethodID Globals::ctorLong;
Globals.cpp:jmethodID Globals::methodLongLongValue;
Globals.cpp:GlobalReference<jclass> Globals::classShort;
Globals.cpp:jmethodID Globals::ctorShort;
Globals.cpp:jmethodID Globals::methodShortShortValue;
Globals.cpp:GlobalReference<jclass> Globals::classByte;
Globals.cpp:jmethodID Globals::ctorByte;
Globals.cpp:jmethodID Globals::methodByteByteValue;
Globals.cpp:GlobalReference<jclass> Globals::classDouble;
Globals.cpp:jmethodID Globals::ctorDouble;
Globals.cpp:jmethodID Globals::methodDoubleDoubleValue;
Globals.cpp:GlobalReference<jclass> Globals::classFloat;
Globals.cpp:jmethodID Globals::ctorFloat;
Globals.cpp:jmethodID Globals::methodFloatFloatValue;
Globals.cpp:GlobalReference<jclass> Globals::classCharacter;
Globals.cpp:jmethodID Globals::ctorCharacter;
Globals.cpp:jmethodID Globals::methodCharacterCharValue;
Globals.cpp:GlobalReference<jclass> Globals::classCharSequence;
Globals.cpp:GlobalReference<jclass> Globals::classBooleanWrapper;
Globals.cpp:jmethodID Globals::methodBooleanWrapperSetTrue;
Globals.cpp:GlobalReference<jclass> Globals::classProperties;
Globals.cpp:jmethodID Globals::ctorProperties;
Globals.cpp:jmethodID Globals::methodPropertiesSetProperty;
Globals.cpp:GlobalReference<jclass> Globals::classDriverManager;
Globals.cpp:jmethodID Globals::methodDriverManagerGetConnection;
Globals.cpp:GlobalReference<jclass> Globals::classConnection;
Globals.cpp:jmethodID Globals::methodConnectionClose;
Globals.cpp:jmethodID Globals::methodConnectionCommit;
Globals.cpp:jmethodID Globals::methodConnectionRollback;
Globals.cpp:jmethodID Globals::methodConnectionCreateArrayOf;
Globals.cpp:jmethodID Globals::methodConnectionGetMetaData;
Globals.cpp:jmethodID Globals::methodConnectionPrepareStatement;
Globals.cpp:jmethodID Globals::methodConnectionPrepareStatementArray;
Globals.cpp:jmethodID Globals::methodConnectionSetAutoCommit;
Globals.cpp:jmethodID Globals::methodConnectionIsValid;
Globals.cpp:GlobalReference<jclass> Globals::classDatabaseMetaData;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDatabaseMajorVersion;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDatabaseMinorVersion;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDatabaseProductName;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDatabaseProductVersion;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDriverMajorVersion;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDriverMinorVersion;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDriverName;
Globals.cpp:jmethodID Globals::methodDatabaseMetaDataGetDriverVersion;
Globals.cpp:GlobalReference<jclass> Globals::classPreparedStatement;
Globals.cpp:jmethodID Globals::methodPreparedStatementAddBatch;
Globals.cpp:jmethodID Globals::methodPreparedStatementClose;
Globals.cpp:jmethodID Globals::methodPreparedStatementExecute;
Globals.cpp:jmethodID Globals::methodPreparedStatementExecuteBatch;
Globals.cpp:jmethodID Globals::methodPreparedStatementGetResultSet;
Globals.cpp:jmethodID Globals::methodPreparedStatementGetMoreResults;
Globals.cpp:jmethodID Globals::methodPreparedStatementGetUpdateCount;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetArray;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetBigDecimal;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetBoolean;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetByte;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetBytes;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetDouble;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetInt;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetShort;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetLong;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetNull;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetString;
Globals.cpp:jmethodID Globals::methodPreparedStatementSetTimestamp;
Globals.cpp:GlobalReference<jclass> Globals::classTimestamp;
Globals.cpp:jmethodID Globals::ctorTimestamp;
Globals.cpp:jmethodID Globals::methodTimestampSetNanos;
Globals.cpp:jmethodID Globals::methodTimestampToString;
Globals.cpp:GlobalReference<jclass> Globals::classDate;
Globals.cpp:jmethodID Globals::methodDateToString;
Globals.cpp:GlobalReference<jclass> Globals::classTime;
Globals.cpp:jmethodID Globals::methodTimeToString;
Globals.cpp:GlobalReference<jclass> Globals::classResultSet;
Globals.cpp:jmethodID Globals::methodResultSetClose;
Globals.cpp:jmethodID Globals::methodResultSetNext;
Globals.cpp:jmethodID Globals::methodResultSetGetMetaData;
Globals.cpp:jmethodID Globals::methodResultSetGetArray;
Globals.cpp:jmethodID Globals::methodResultSetGetObject;
Globals.cpp:GlobalReference<jclass> Globals::classResultSetMetaData;
Globals.cpp:jmethodID Globals::methodResultSetMetaDataGetColumnClassName;
Globals.cpp:jmethodID Globals::methodResultSetMetaDataGetColumnCount;
Globals.cpp:jmethodID Globals::methodResultSetMetaDataGetColumnLabel;
Globals.cpp:jmethodID Globals::methodResultSetMetaDataGetColumnType;
Globals.cpp:GlobalReference<jclass> Globals::classArray;
Globals.cpp:jmethodID Globals::methodArrayGetArray;
Globals.cpp:GlobalReference<jclass> Globals::classSQLException;
Globals.cpp:GlobalReference<jclass> Globals::classServiceLoader;
Globals.cpp:jmethodID Globals::methodServiceLoaderIterator;
Globals.cpp:GlobalReference<jclass> Globals::classDriver;
Globals.cpp:int Globals::typeNull;
Globals.cpp:int Globals::typeChar;
Globals.cpp:GlobalReference<jstring> Globals::javaQoreClassField;
Globals.cpp:std::string QoreJniStackLocationHelper::jni_no_call_name = "<jni_module_java_no_runtime_stack_info>";
Globals.cpp:QoreExternalProgramLocationWrapper QoreJniStackLocationHelper::jni_loc_builtin("<jni_module_unknown>", -1, -1);
Globals.cpp:// for the module namespace cache
Globals.cpp:QoreThreadLock qmnc_lock;
Globals.cpp:typedef std::map<std::string, const QoreNamespace*> qmnc_t;
Globals.cpp:typedef std::map<QoreProgram*, qmnc_t> qmnpc_t;
Globals.cpp:qmnpc_t qmnc;
Globals.cpp:static void JNICALL invocation_handler_finalize(JNIEnv *, jclass, jlong ptr) {
Globals.cpp:    delete reinterpret_cast<Dispatcher*>(ptr);
Globals.cpp:}
Globals.cpp:static jobject JNICALL invocation_handler_invoke(JNIEnv* jenv, jobject, jlong ptr, jobject proxy, jobject method, jobjectArray args) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    Dispatcher* dispatcher = reinterpret_cast<Dispatcher*>(ptr);
Globals.cpp:    return dispatcher->dispatch(env, proxy, method, args);
Globals.cpp:}
Globals.cpp:static int save_object_thread(Env& env, const QoreValue& rv, QoreProgram* pgm, ExceptionSink& xsink) {
Globals.cpp:    QoreHashNode* data = pgm->getThreadData();
Globals.cpp:    assert(data);
Globals.cpp:    const char* domain_name;
Globals.cpp:    // get key name where to save the data if possible
Globals.cpp:    QoreValue v = data->getKeyValue("_jni_save");
Globals.cpp:    if (v.getType() != NT_STRING) {
Globals.cpp:        domain_name = "_jni_save";
Globals.cpp:    } else {
Globals.cpp:        domain_name = v.get<const QoreStringNode>()->c_str();
Globals.cpp:    }
Globals.cpp:    QoreValue kv = data->getKeyValue(domain_name);
Globals.cpp:    // ignore operation if domain exists but is not a list
Globals.cpp:    if (!kv || kv.getType() == NT_LIST) {
Globals.cpp:        QoreListNode* list;
Globals.cpp:        ReferenceHolder<QoreListNode> list_holder(&xsink);
Globals.cpp:        if (!kv) {
Globals.cpp:            // we need to assign list in data *after* we prepend the object to the list
Globals.cpp:            // in order to manage object counts
Globals.cpp:            list = new QoreListNode(autoTypeInfo);
Globals.cpp:            list_holder = list;
Globals.cpp:        } else {
Globals.cpp:            list = kv.get<QoreListNode>();
Globals.cpp:        }
Globals.cpp:        // prepend to list to ensure FILO destruction order
Globals.cpp:        list->splice(0, 0, rv, &xsink);
Globals.cpp:        if (!xsink && list_holder) {
Globals.cpp:             data->setKeyValue(domain_name, list_holder.release(), &xsink);
Globals.cpp:        }
Globals.cpp:        if (xsink) {
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return -1;
Globals.cpp:        }
Globals.cpp:#ifdef DEBUG
Globals.cpp:        const QoreObject* obj = rv.get<QoreObject>();
Globals.cpp:        printd(5, "save_object() domain: '%s' obj: %p %s (refs: %d)\n", domain_name, obj, obj->getClassName(), obj->reference_count());
Globals.cpp:#endif
Globals.cpp:    } else {
Globals.cpp:        printd(5, "save_object() NOT SAVING domain: '%s' HAS KEY v: %s (kv: %s)\n", domain_name, rv.getFullTypeName(), kv.getFullTypeName());
Globals.cpp:    }
Globals.cpp:    return 0;
Globals.cpp:}
Globals.cpp:static int save_object(Env& env, const QoreValue& rv, QoreProgram* pgm, ExceptionSink& xsink) {
Globals.cpp:    // save object in thread-local data if relevant
Globals.cpp:    if (rv.getType() != NT_OBJECT) {
Globals.cpp:        return 0;
Globals.cpp:    }
Globals.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
Globals.cpp:    if (jpc) {
Globals.cpp:        ResolvedCallReferenceNode* save_object_callback = jpc->getSaveObjectCallback();
Globals.cpp:        if (save_object_callback) {
Globals.cpp:            printd(5, "save_object() running callback %p\n", save_object_callback);
Globals.cpp:            ReferenceHolder<QoreListNode> args(new QoreListNode(autoTypeInfo), &xsink);
Globals.cpp:            args->push(rv.refSelf(), &xsink);
Globals.cpp:            save_object_callback->execValue(*args, &xsink);
Globals.cpp:            if (xsink) {
Globals.cpp:                QoreToJava::wrapException(env, xsink);
Globals.cpp:                return -1;
Globals.cpp:            }
Globals.cpp:            return 0;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    return save_object_thread(env, rv, pgm, xsink);
Globals.cpp:}
Globals.cpp:static jlong JNICALL java_api_init_qore(JNIEnv* jenv, jobject obj) {
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:        return reinterpret_cast<jlong>(Globals::getJavaContextProgram());
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        Env env(jenv);
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return 0;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static jobject java_api_call_function_internal(JNIEnv* jenv, jobject obj, jlong ptr, jboolean save, jstring name,
Globals.cpp:        jobjectArray args) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    QoreProgramContextHelper pch(pgm);
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    jsize len = args ? env.getArrayLength(args) : 0;
Globals.cpp:    ReferenceHolder<QoreListNode> qore_args(&xsink);
Globals.cpp:    if (len) {
Globals.cpp:        Array::getArgList(qore_args, env, args, pgm);
Globals.cpp:    }
Globals.cpp:    Env::GetStringUtfChars fname(env, name);
Globals.cpp:    //printd(LogLevel, "java_api_call_function() '%s()' args: %p %d\n", fname.c_str(), *qore_args, len);
Globals.cpp:    QoreJniStackLocationHelper slh;
Globals.cpp:    ValueHolder rv(pgm->callFunction(fname.c_str(), *qore_args, &xsink), &xsink);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    if (save && save_object(env, *rv, pgm, xsink)) {
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        return QoreToJava::toAnyObject(env, *rv, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_api_call_function(JNIEnv* jenv, jobject obj, jlong ptr, jstring name,
Globals.cpp:    jobjectArray args) {
Globals.cpp:    return java_api_call_function_internal(jenv, obj, ptr, false, name, args);
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_api_call_function_save(JNIEnv* jenv, jobject obj, jlong ptr, jstring name,
Globals.cpp:    jobjectArray args) {
Globals.cpp:    return java_api_call_function_internal(jenv, obj, ptr, true, name, args);
Globals.cpp:}
Globals.cpp:static jobject java_api_call_static_method_internal(JNIEnv* jenv, jobject obj, jlong ptr, jboolean save,
Globals.cpp:        jstring class_name, jstring method_name, jobjectArray args, const QoreClass* cls = nullptr,
Globals.cpp:        const QoreMethod* m = nullptr, const QoreExternalMethodVariant* v = nullptr) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    QoreJniStackLocationHelper slh;
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    QoreExternalProgramContextHelper epch(&xsink, pgm);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    jsize len = args ? env.getArrayLength(args) : 0;
Globals.cpp:    ReferenceHolder<QoreListNode> qore_args(&xsink);
Globals.cpp:    if (len) {
Globals.cpp:        Array::getArgList(qore_args, env, args, pgm,
Globals.cpp:            (v && v->getCodeFlags() & QCF_USES_EXTRA_ARGS) ? true : false);
Globals.cpp:    }
Globals.cpp:    if (!m) {
Globals.cpp:        assert(method_name);
Globals.cpp:        Env::GetStringUtfChars mname(env, method_name);
Globals.cpp:        if (!cls) {
Globals.cpp:            Env::GetStringUtfChars cname(env, class_name);
Globals.cpp:            //printd(LogLevel, "java_api_call_function() '%s()' args: %p %d\n", fname.c_str(), *qore_args, len);
Globals.cpp:            // grab the current Program's parse lock before calling QoreProgram::findClass()
Globals.cpp:            CurrentProgramRuntimeExternalParseContextHelper pch;
Globals.cpp:            cls = pgm->findClass(cname.c_str(), &xsink);
Globals.cpp:            if (!cls) {
Globals.cpp:                if (!xsink) {
Globals.cpp:                    xsink.raiseException("UNKNOWN-CLASS", "cannot resolve class '%s'", cname.c_str());
Globals.cpp:                }
Globals.cpp:                QoreToJava::wrapException(env, xsink);
Globals.cpp:                return nullptr;
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:        m = cls->findLocalStaticMethod(mname.c_str());
Globals.cpp:        if (!m) {
Globals.cpp:            xsink.raiseException("UNKNOWN-METHOD", "cannot resolve static method '%s::%s()'", cls->getName(),
Globals.cpp:                mname.c_str());
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    ValueHolder rv(QoreObject::evalStaticMethodVariant(*m, m->getClass(), v, *qore_args, &xsink), &xsink);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    if (save && save_object(env, *rv, pgm, xsink)) {
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        return QoreToJava::toAnyObject(env, *rv, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_api_call_static_method(JNIEnv* jenv, jobject obj, jlong ptr, jstring class_name,
Globals.cpp:    jstring method_name, jobjectArray args) {
Globals.cpp:    return java_api_call_static_method_internal(jenv, obj, ptr, false, class_name, method_name, args);
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_api_call_static_method_save(JNIEnv* jenv, jobject obj, jlong ptr, jstring class_name,
Globals.cpp:    jstring method_name, jobjectArray args) {
Globals.cpp:    return java_api_call_static_method_internal(jenv, obj, ptr, true, class_name, method_name, args);
Globals.cpp:}
Globals.cpp:// private native static QoreObject newObjectSave0(long pgm_ptr, String class_name, Object...args);
Globals.cpp:static jobject JNICALL java_api_new_object_save(JNIEnv* jenv, jobject obj, jlong ptr, jstring cname,
Globals.cpp:        jobjectArray args) {
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    // create the object in the current program context if possible
Globals.cpp:    {
Globals.cpp:        QoreProgram* pgm0 = qore_get_call_program_context();
Globals.cpp:        if (pgm0 && pgm0 != pgm) {
Globals.cpp:            printd(5, "java_api_new_object_save() using call context for new pbject: %p (was: %p)\n", pgm0, pgm);
Globals.cpp:            pgm = pgm0;
Globals.cpp:        } else {
Globals.cpp:            printd(5, "java_api_new_object_save() using pgm: %p call ctx: %p current: %p\n", pgm, pgm0, getProgram());
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    printd(5, "java_api_new_object_save() pgm: %p\n", pgm);
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    QoreExternalProgramContextHelper pch(&xsink, pgm);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    QoreJniStackLocationHelper slh;
Globals.cpp:    jsize len = args ? env.getArrayLength(args) : 0;
Globals.cpp:    ReferenceHolder<QoreListNode> qore_args(&xsink);
Globals.cpp:    if (len) {
Globals.cpp:        Array::getArgList(qore_args, env, args, pgm);
Globals.cpp:    }
Globals.cpp:    Env::GetStringUtfChars clsname(env, cname);
Globals.cpp:    printd(5, "java_api_new_object() class '%s' args: %p %d\n", clsname.c_str(), *qore_args, len);
Globals.cpp:    const QoreClass* cls = pgm->findClass(clsname.c_str(), &xsink);
Globals.cpp:    if (cls && !xsink) {
Globals.cpp:        if (pgm->getParseOptions64() & cls->getDomain()) {
Globals.cpp:            xsink.raiseException("CREATE-OBJECT-ERROR", "Program sandboxing restrictions do not allow access to " \
Globals.cpp:                "the '%s' class", cls->getName());
Globals.cpp:        } else {
Globals.cpp:            cls->runtimeCheckInstantiateClass(&xsink);
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    if (!cls && !xsink) {
Globals.cpp:        xsink.raiseException("CREATE-OBJECT-ERROR", "class '%s' cannot be found", clsname.c_str());
Globals.cpp:    }
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    printd(5, "instantiating Qore class '%s' with args: %p (%d)\n", cls->getName(), *qore_args, *qore_args ? (int)qore_args->size() : 0);
Globals.cpp:    ValueHolder rv(cls->execConstructor(*qore_args, &xsink), &xsink);
Globals.cpp:    printd(5, "got rv: %s\n", rv->getFullTypeName());
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    if (save_object(env, *rv, pgm, xsink)) {
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        return QoreToJava::toAnyObject(env, *rv, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static jboolean JNICALL java_api_register_java_thread(JNIEnv* jenv, jobject obj) {
Globals.cpp:    int rc = q_register_foreign_thread();
Globals.cpp:    jboolean rv;
Globals.cpp:    if (rc == QFT_OK) {
Globals.cpp:        printd(5, "java_api_register_java_thread(): thread attached to Qore\n");
Globals.cpp:        rv = true;
Globals.cpp:    } else {
Globals.cpp:        printd(5, "java_api_register_java_thread(): thread not attached to Qore (rc: %d)\n", rc);
Globals.cpp:        rv = false;
Globals.cpp:    }
Globals.cpp:    return rv;
Globals.cpp:}
Globals.cpp:static void JNICALL java_api_deregister_java_thread(JNIEnv* jenv, jobject obj) {
Globals.cpp:    q_deregister_foreign_thread();
Globals.cpp:}
Globals.cpp:static void JNICALL qore_exception_wrapper_finalize(JNIEnv*, jclass, jlong ptr) {
Globals.cpp:    ExceptionSink* xsink = reinterpret_cast<ExceptionSink*>(ptr);
Globals.cpp:    //printd(LogLevel, "qore_exception_wrapper_finalize() xsink: %p\n", xsink);
Globals.cpp:    if (xsink != nullptr) {
Globals.cpp:        xsink->clear();
Globals.cpp:        delete xsink;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static jstring JNICALL qore_exception_wrapper_get_message(JNIEnv* jenv, jclass, jlong ptr) {
Globals.cpp:    ExceptionSink* xsink = reinterpret_cast<ExceptionSink*>(ptr);
Globals.cpp:    QoreString jstr;
Globals.cpp:    QoreValue err = xsink->getExceptionErr();
Globals.cpp:    QoreStringValueHelper err_str(err);
Globals.cpp:    QoreValue desc = xsink->getExceptionDesc();
Globals.cpp:    QoreStringValueHelper desc_str(desc);
Globals.cpp:    if (!err_str->empty()) {
Globals.cpp:        if (!desc_str->empty()) {
Globals.cpp:            jstr.concat(err_str->c_str());
Globals.cpp:            jstr.concat(": ");
Globals.cpp:            jstr.concat(desc_str->c_str());
Globals.cpp:        } else {
Globals.cpp:            jstr.concat(err_str->c_str());
Globals.cpp:        }
Globals.cpp:    } else {
Globals.cpp:        if (!desc_str->empty())
Globals.cpp:            jstr.concat(desc_str->c_str());
Globals.cpp:        else
Globals.cpp:            jstr.concat("No message");
Globals.cpp:    }
Globals.cpp:    //printd(LogLevel, "qore_exception_wrapper_get_message() xsink: %p %s\n", xsink, jstr.c_str());
Globals.cpp:    Env env(jenv);
Globals.cpp:    ModifiedUtf8String str(jstr);
Globals.cpp:    return env.newString(str.c_str()).release();
Globals.cpp:}
Globals.cpp:static jstring JNICALL qore_object_class_name(JNIEnv* jenv, jclass, jlong ptr) {
Globals.cpp:    assert(ptr);
Globals.cpp:    QoreObject* obj = reinterpret_cast<QoreObject*>(ptr);
Globals.cpp:    Env env(jenv);
Globals.cpp:    return env.newString(obj->getClassName()).release();
Globals.cpp:}
Globals.cpp:static jboolean JNICALL qore_object_instance_of(JNIEnv* jenv, jclass, jlong ptr, jstring cname) {
Globals.cpp:    assert(ptr);
Globals.cpp:    QoreObject* obj = reinterpret_cast<QoreObject*>(ptr);
Globals.cpp:    Env env(jenv);
Globals.cpp:    Env::GetStringUtfChars class_name(env, cname);
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    const QoreClass* cls = jni_get_program_context()->findClass(class_name.c_str(), &xsink);
Globals.cpp:    //printd(5, "qore_object_instance_of() cls: %p (%s) xsink: %d\n", cls, class_name.c_str(), (bool)xsink);
Globals.cpp:    if (!cls) {
Globals.cpp:        xsink.clear();
Globals.cpp:        return false;
Globals.cpp:    }
Globals.cpp:    assert(!xsink);
Globals.cpp:    return obj->validInstanceOf(*cls);
Globals.cpp:}
Globals.cpp:static jobject qore_object_closure_call_internal(JNIEnv* jenv, jclass, QoreProgram* pgm, jlong obj_ptr, jboolean save,
Globals.cpp:        jstring mname, jobjectArray args, const QoreMethod* m = nullptr,
Globals.cpp:        const QoreExternalMethodVariant* v = nullptr, bool flatten = false) {
Globals.cpp:    assert(obj_ptr);
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    // must ensure that the thread is attached before executing Qore code
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    try {
Globals.cpp:        // set program context before converting arguments
Globals.cpp:        QoreExternalProgramContextHelper pch(&xsink, pgm);
Globals.cpp:        if (xsink) {
Globals.cpp:            throw XsinkException(xsink);
Globals.cpp:        }
Globals.cpp:        jsize len = args ? env.getArrayLength(args) : 0;
Globals.cpp:        ReferenceHolder<QoreListNode> qore_args(&xsink);
Globals.cpp:        if (len) {
Globals.cpp:            Array::getArgList(qore_args, env, args, pgm,
Globals.cpp:                (v && v->getCodeFlags() & QCF_USES_EXTRA_ARGS) ? true : false);
Globals.cpp:        }
Globals.cpp:        QoreObject* obj;
Globals.cpp:        ValueHolder val(&xsink);
Globals.cpp:        if (mname || m) {
Globals.cpp:            // this is a method call and "obj" is a QoreObject*
Globals.cpp:            obj = reinterpret_cast<QoreObject*>(obj_ptr);
Globals.cpp:            if (!m) {
Globals.cpp:                Env::GetStringUtfChars method_name(env, mname);
Globals.cpp:                val = obj->evalMethod(method_name.c_str(), *qore_args, &xsink);
Globals.cpp:                printd(5, "qore_object_closure_call_internal() %s::%s() (v: %p) %d arg(s) obj: %p pgm: %p cpgm: %p " \
Globals.cpp:                    "opgm: %p\n", obj->getClassName(), method_name.c_str(), v, (int)len, obj, pgm,
Globals.cpp:                    obj->getClass()->getProgram(), obj->getProgram());
Globals.cpp:            } else {
Globals.cpp:                printd(5, "qore_object_closure_call_internal() %s::%s() (v: %p id: %d) %d arg(s) obj: %p\n",
Globals.cpp:                    m->getClassName(), m->getName(), v, m->getClass()->getID(), (int)len, obj);
Globals.cpp:                val = obj->evalMethodVariant(*m, v, *qore_args, &xsink);
Globals.cpp:                if (xsink) {
Globals.cpp:                    QoreStringMaker desc("cls: '%s' mcls: '%s' valid: %d mvalid: %d", obj->getClassName(), m->getClass()->getName(), obj->isValid(), obj->validInstanceOfStrict(*m->getClass()));
Globals.cpp:                    xsink.raiseException("INFO", desc.c_str());
Globals.cpp:                }
Globals.cpp:                // check for errors from objects with injected classes; make sure the error was raised due to
Globals.cpp:                // injection issues
Globals.cpp:                if (xsink && obj->isValid()
Globals.cpp:                    && !obj->validInstanceOfStrict(*m->getClass())
Globals.cpp:                    && xsink.getExceptionErr().getType() == NT_STRING
Globals.cpp:                    && *xsink.getExceptionErr().get<const QoreStringNode>() == "OBJECT-ALREADY-DELETED") {
Globals.cpp:                    xsink.clear();
Globals.cpp:                    val = obj->evalMethod(m->getName(), *qore_args, &xsink);
Globals.cpp:                }
Globals.cpp:            }
Globals.cpp:        } else {
Globals.cpp:            obj = nullptr;
Globals.cpp:            // otherwise must be a closure / call reference; "obj" is a ResolvedCallReferenceNode
Globals.cpp:            const ResolvedCallReferenceNode* call = reinterpret_cast<const ResolvedCallReferenceNode*>(obj_ptr);
Globals.cpp:            val = call->execValue(*qore_args, &xsink);
Globals.cpp:        }
Globals.cpp:        if (xsink) {
Globals.cpp:            throw XsinkException(xsink);
Globals.cpp:        }
Globals.cpp:        //printd(5, "qore_object_closure_call_internal() method: '%s::%s()' rv: %s\n", obj->getClassName(),
Globals.cpp:        //  method_name.c_str(), val->getFullTypeName());
Globals.cpp:        if (save && save_object(env, *val, pgm, xsink)) {
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:        return QoreToJava::toAnyObject(env, *val, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (const std::bad_alloc& e) {
Globals.cpp:        // translate OOM C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/OutOfMemoryError"), e.what());
Globals.cpp:    } catch (const std::exception& e) {
Globals.cpp:        // translate unknown C++ exceptions to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), e.what());
Globals.cpp:    } catch (...) {
Globals.cpp:        // translate unknown C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), "Unknown exception type");
Globals.cpp:    }
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_object_call_method(JNIEnv* jenv, jclass jcls, QoreProgram* pgm, jlong obj_ptr,
Globals.cpp:        jstring mname, jobjectArray args) {
Globals.cpp:    return qore_object_closure_call_internal(jenv, jcls, pgm, obj_ptr, false, mname, args);
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_object_call_method_save(JNIEnv* jenv, jclass jcls, QoreProgram* pgm, jlong obj_ptr,
Globals.cpp:        jstring mname, jobjectArray args) {
Globals.cpp:    return qore_object_closure_call_internal(jenv, jcls, pgm, obj_ptr, true, mname, args);
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_closure_call(JNIEnv* jenv, jclass jcls, QoreProgram* pgm, jlong obj_ptr,
Globals.cpp:        jobjectArray args) {
Globals.cpp:    return qore_object_closure_call_internal(jenv, jcls, pgm, obj_ptr, false, nullptr, args);
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_closure_call_save(JNIEnv* jenv, jclass jcls, QoreProgram* pgm, jlong obj_ptr,
Globals.cpp:        jobjectArray args) {
Globals.cpp:    return qore_object_closure_call_internal(jenv, jcls, pgm, obj_ptr, true, nullptr, args);
Globals.cpp:}
Globals.cpp:static void JNICALL qore_closure_finalize(JNIEnv*, jclass, jlong ptr) {
Globals.cpp:    assert(ptr);
Globals.cpp:    ResolvedCallReferenceNode* call = reinterpret_cast<ResolvedCallReferenceNode*>(ptr);
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    call->deref(&xsink);
Globals.cpp:    // NOTE: any exceptions would be printed to stderr; no way to capture them in any case
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_object_get_member_value(JNIEnv* jenv, jobject jobj, QoreObject* obj,
Globals.cpp:        jstring member) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    QoreJniStackLocationHelper slh;
Globals.cpp:    QoreProgram* pgm = obj->getProgram();
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    ValueHolder rv(&xsink);
Globals.cpp:    {
Globals.cpp:        QoreExternalProgramContextHelper epch(&xsink, pgm);
Globals.cpp:        if (xsink) {
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:        Env::GetStringUtfChars mem(env, member);
Globals.cpp:        rv = obj->evalMember(mem.c_str(), &xsink);
Globals.cpp:    }
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    if (save_object(env, *rv, pgm, xsink)) {
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        return QoreToJava::toAnyObject(env, *rv, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:struct class_info_t {
Globals.cpp:    unsigned compressed_len;
Globals.cpp:    unsigned len;
Globals.cpp:    unsigned char* byte_code;
Globals.cpp:};
Globals.cpp:typedef std::map<const char*, class_info_t, ltstr> cmap_t;
Globals.cpp:DLLLOCAL extern cmap_t jar_cmap;
Globals.cpp:static jbyteArray JNICALL qore_url_classloader_get_cached_class(JNIEnv* jenv, jclass jcls, jstring bin_name) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    Env::GetStringUtfChars bname(env, bin_name);
Globals.cpp:    cmap_t::const_iterator i = jar_cmap.find(bname.c_str());
Globals.cpp:    if (i == jar_cmap.end()) {
Globals.cpp:        //printd(LogLevel, "qore_url_classloader_get_cached_class() '%s' not found\n", bname.c_str());
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    // decompress class data
Globals.cpp:    SimpleRefHolder<BinaryNode> b(new BinaryNode);
Globals.cpp:    b->preallocate(i->second.len);
Globals.cpp:    unsigned size = i->second.len;
Globals.cpp:    int rc = BZ2_bzBuffToBuffDecompress((char*)b->getPtr(), &size, (char*)i->second.byte_code,
Globals.cpp:        i->second.compressed_len, 0, 0);
Globals.cpp:    assert(!rc);
Globals.cpp:    assert(size == i->second.len);
Globals.cpp:    LocalReference<jbyteArray> array = env.newByteArray(b->size()).as<jbyteArray>();
Globals.cpp:    for (jsize j = 0; j < static_cast<jsize>(i->second.len); ++j) {
Globals.cpp:        env.setByteArrayElement(array, j, ((const char*)b->getPtr())[j]);
Globals.cpp:    }
Globals.cpp:    //printd(LogLevel, "qore_url_classloader_get_cached_class() FOUND '%s'\n", bname.c_str());
Globals.cpp:    return array.release();
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_class_builder_do_normal_call(JNIEnv* jenv, jclass jcls, jstring mname, jlong qobj,
Globals.cpp:        jlong mptr, jlong vptr, jobjectArray args) {
Globals.cpp:    const QoreMethod* m = reinterpret_cast<const QoreMethod*>(mptr);
Globals.cpp:    const QoreExternalMethodVariant* v = reinterpret_cast<const QoreExternalMethodVariant*>(vptr);
Globals.cpp:    printd(5, "java_class_builder_do_normal_call() jcls: %p %s::%s() (%d) qobj: %p args: %p\n", jcls,
Globals.cpp:        m->getClassName(), m->getName(), m->getClass()->getID(), qobj, args);
Globals.cpp:    Env env(jenv);
Globals.cpp:    if (!qobj) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "JavaClassBuilder.doNormalCall0(): QoreObject " \
Globals.cpp:            "ptr passed as nullptr");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    QoreObject* obj = reinterpret_cast<QoreObject*>(qobj);
Globals.cpp:    QoreProgram* pgm = obj->getClass()->getProgram();
Globals.cpp:    if (!pgm) {
Globals.cpp:        jni_get_context_unconditional(pgm);
Globals.cpp:    }
Globals.cpp:    if (!pgm) {
Globals.cpp:        printd(5, "java_class_builder_do_normal_call() no Program ctx!\n");
Globals.cpp:        QoreStringMaker desc("JavaClassBuilder.doNormalCall0(): no Program context for object %p", obj);
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), desc.c_str());
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    return qore_object_closure_call_internal(jenv, jcls, pgm, qobj, true, mname, args, m, v);
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_class_builder_do_static_call(JNIEnv* jenv, jclass jcls, jstring mname, jlong qcls,
Globals.cpp:        jlong pgmptr, jlong mptr, jlong vptr, jobjectArray args) {
Globals.cpp:    printd(5, "java_class_builder_do_static_call() jcls: %p qcls: %p, args: %p\n", jcls, qcls, args);
Globals.cpp:    Env env(jenv);
Globals.cpp:    if (!qcls) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "JavaClassBuilder.doStaticCall0(): QoreClass ptr " \
Globals.cpp:            "passed as nullptr");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    const QoreClass* qc = reinterpret_cast<const QoreClass*>(qcls);
Globals.cpp:    //printd(5, "java_class_builder_do_static_call() mname: %p mptr: %p pgmptr: %p cpgm: %p curr pgm: %p\n", mname,
Globals.cpp:    //    mptr, pgmptr, qc->getProgram(), getProgram());
Globals.cpp:    return java_api_call_static_method_internal(jenv, nullptr, pgmptr, true, nullptr, mname,
Globals.cpp:        args, qc, reinterpret_cast<const QoreMethod*>(mptr),
Globals.cpp:        reinterpret_cast<const QoreExternalMethodVariant*>(vptr));
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_class_builder_do_function_call(JNIEnv* jenv, jclass jcls, QoreProgram* pgm,
Globals.cpp:        const QoreExternalFunction* func, const QoreExternalMethodVariant* v, jobjectArray args) {
Globals.cpp:    printd(5, "java_class_builder_do_function_call() %s() v: %p args: %p\n", func->getName(), v, args);
Globals.cpp:    assert(pgm);
Globals.cpp:    assert(func);
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    QoreJniStackLocationHelper slh;
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    QoreExternalProgramContextHelper epch(&xsink, pgm);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    jsize len = args ? env.getArrayLength(args) : 0;
Globals.cpp:    ReferenceHolder<QoreListNode> qore_args(&xsink);
Globals.cpp:    if (len) {
Globals.cpp:        Array::getArgList(qore_args, env, args, pgm, true);
Globals.cpp:    }
Globals.cpp:    ValueHolder rv(func->evalFunction(v, *qore_args, pgm, &xsink), &xsink);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    if (save_object(env, *rv, pgm, xsink)) {
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        return QoreToJava::toAnyObject(env, *rv, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static jobject JNICALL java_class_builder_get_constant_value(JNIEnv* jenv, jclass jcls, QoreProgram* pgm,
Globals.cpp:        const QoreExternalConstant* constant_entry) {
Globals.cpp:    assert(pgm);
Globals.cpp:    assert(constant_entry);
Globals.cpp:    JniExternalProgramData* jpc = jni_get_context_unconditional(pgm);
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    QoreExternalProgramContextHelper epch(&xsink, pgm);
Globals.cpp:    if (xsink) {
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    printd(5, "java_class_builder_get_constant_value() '%s' cl: %x pgm: %p jpc: %p\n", constant_entry->getName(),
Globals.cpp:        env.callIntMethod(jpc->getClassLoader(), jni::Globals::methodObjectHashCode, nullptr), pgm, jpc);
Globals.cpp:    ValueHolder val(constant_entry->getReferencedValue(), &xsink);
Globals.cpp:    printd(5, "java_class_builder_get_constant_value() '%s' = %s\n", constant_entry->getName(), val->getFullTypeName());
Globals.cpp:    try {
Globals.cpp:        return QoreToJava::toAnyObject(env, *val, jpc);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static int load_module(Env& env, Env::GetStringUtfChars& mod_str, QoreProgram* pgm) {
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    if (ModuleManager::runTimeLoadModule(mod_str.c_str(), pgm, &xsink)) {
Globals.cpp:        const char* err = xsink.getExceptionErr().get<const QoreStringNode>()->c_str();
Globals.cpp:        const char* desc = xsink.getExceptionDesc().get<const QoreStringNode>()->c_str();
Globals.cpp:        QoreStringMaker errdesc("%s: %s", err, desc);
Globals.cpp:        env.throwNew(env.findClass("java/lang/ClassNotFoundException"), errdesc.c_str());
Globals.cpp:        //printd(5, "load_module() '%s': %s\n", mod_str.c_str(), errdesc.c_str());
Globals.cpp:        return -1;
Globals.cpp:    }
Globals.cpp:    //printd(5, "load_module() '%s': OK\n", mod_str.c_str());
Globals.cpp:    return 0;
Globals.cpp:}
Globals.cpp:typedef int (*python_module_import_t)(ExceptionSink* xsink, QoreProgram* pgm, const char* module,
Globals.cpp:    const char* symbol);
Globals.cpp:static python_module_import_t python_module_import = nullptr;
Globals.cpp:// throws a Java exception and return -1 on failure
Globals.cpp:int load_python_module(Env& env, QoreProgram* pgm) {
Globals.cpp:    static bool python_loaded = false;
Globals.cpp:    if (!python_loaded) {
Globals.cpp:        ExceptionSink xsink;
Globals.cpp:        if (ModuleManager::runTimeLoadModule("python", pgm, &xsink)) {
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return -1;
Globals.cpp:        }
Globals.cpp:        printd(5, "load_python_module() python module loaded\n");
Globals.cpp:        python_module_import = (python_module_import_t)dlsym(RTLD_DEFAULT, "python_module_import");
Globals.cpp:        if (!python_module_import) {
Globals.cpp:            env.throwNew(env.findClass("java/lang/RuntimeException"), "python_module_import() symbol not found");
Globals.cpp:            return -1;
Globals.cpp:        }
Globals.cpp:        printd(5, "load_python_module() python_module_import symbol resolved\n");
Globals.cpp:        python_loaded = true;
Globals.cpp:    }
Globals.cpp:    return 0;
Globals.cpp:}
Globals.cpp:static jbyteArray JNICALL qore_url_classloader_generate_byte_code(JNIEnv* jenv, jobject class_loader, jlong ptr,
Globals.cpp:        jstring nspath, jstring jname, jstring module, jboolean python, jlong class_ptr) {
Globals.cpp:    assert(ptr);
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreString qpath;
Globals.cpp:    if (nspath) {
Globals.cpp:        Env::GetStringUtfChars jqpath(env, nspath);
Globals.cpp:        qpath = jqpath.c_str();
Globals.cpp:    }
Globals.cpp:    // must ensure that the thread is attached before calling Qore APIs
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    try {
Globals.cpp:        // verify that program is still valid
Globals.cpp:        QoreExternalProgramContextHelper pch(&xsink, pgm);
Globals.cpp:        if (xsink) {
Globals.cpp:            throw XsinkException(xsink);
Globals.cpp:        }
Globals.cpp:        JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
Globals.cpp:        if (!jpc) {
Globals.cpp:            //printd(5, "pgm: %p\n", pgm);
Globals.cpp:            env.throwNew(env.findClass("java/lang/RuntimeException"), "No JNI context for Qore Program");
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:        if (!Globals::classJavaClassBuilder) {
Globals.cpp:            env.throwNew(env.findClass("java/lang/RuntimeException"), "bytecode generation unavailable; cannot " \
Globals.cpp:                "perform dynamic imports in Java");
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:        QoreString modstr;
Globals.cpp:        if (module) {
Globals.cpp:            Env::GetStringUtfChars mod_str(env, module);
Globals.cpp:            printd(5, "qore_url_classloader_generate_byte_code() mod: '%s' python: %d\n", mod_str.c_str(), python);
Globals.cpp:            modstr = mod_str.c_str();
Globals.cpp:            if (!python) {
Globals.cpp:                if (load_module(env, mod_str, pgm)) {
Globals.cpp:                    return nullptr;
Globals.cpp:                }
Globals.cpp:            } else {
Globals.cpp:                qpath.insert("::", 0);
Globals.cpp:                qpath.insert(mod_str.c_str(), 0);
Globals.cpp:                qpath.insert("::Python::", 0);
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:        printd(5, "qore_url_classloader_generate_byte_code() p: %p path: '%s' (mod: %p) class_loader: %x\n", pgm,
Globals.cpp:            qpath.c_str(), modstr.c_str(),
Globals.cpp:            env.callIntMethod(class_loader, jni::Globals::methodObjectHashCode, nullptr));
Globals.cpp:        return jpc->generateByteCode(env, class_loader, qpath, jname, modstr.empty() ? nullptr : modstr.c_str(),
Globals.cpp:            reinterpret_cast<const QoreClass*>(class_ptr)).release();
Globals.cpp:    } catch (jni::JavaException& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (const std::bad_alloc& e) {
Globals.cpp:        // translate OOM C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/OutOfMemoryError"), e.what());
Globals.cpp:    } catch (const std::exception& e) {
Globals.cpp:        // translate unknown C++ exceptions to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), e.what());
Globals.cpp:    } catch (...) {
Globals.cpp:        // translate unknown C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), "Unknown exception type");
Globals.cpp:    }
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:typedef std::map<const char*, const QoreListNode*, ltstr> mod_dep_map_t;
Globals.cpp:static bool is_module(const QoreNamespace* parent, const char* name, const QoreHashNode* all_mod_info,
Globals.cpp:        mod_dep_map_t& mod_dep_map) {
Globals.cpp:    const char* mod = parent->getModuleName();
Globals.cpp:    if (!mod) {
Globals.cpp:        return false;
Globals.cpp:    }
Globals.cpp:    if (!strcmp(mod, name)) {
Globals.cpp:        return true;
Globals.cpp:    }
Globals.cpp:    if (!all_mod_info) {
Globals.cpp:        return false;
Globals.cpp:    }
Globals.cpp:    const QoreListNode* reexport_list = nullptr;
Globals.cpp:    // see if we have the reexport list already
Globals.cpp:    mod_dep_map_t::iterator i = mod_dep_map.lower_bound(mod);
Globals.cpp:    if (i == mod_dep_map.end() || !strcmp(i->first, mod)) {
Globals.cpp:        const QoreHashNode* mod_info = all_mod_info->getKeyValue(name).get<QoreHashNode>();
Globals.cpp:        if (!mod_info) {
Globals.cpp:            return false;
Globals.cpp:        }
Globals.cpp:        reexport_list = mod_info->getKeyValue("reexported-modules").get<QoreListNode>();
Globals.cpp:        if (!reexport_list) {
Globals.cpp:            return false;
Globals.cpp:        }
Globals.cpp:        mod_dep_map.insert(i, mod_dep_map_t::value_type(mod, reexport_list));
Globals.cpp:    } else {
Globals.cpp:        reexport_list = i->second;
Globals.cpp:    }
Globals.cpp:    ConstListIterator li(reexport_list);
Globals.cpp:    while (li.next()) {
Globals.cpp:        const QoreValue v = li.getValue();
Globals.cpp:        if (v.getType() == NT_STRING && (*v.get<const QoreStringNode>() == mod)) {
Globals.cpp:            return true;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    //printd(5, "is_module() NOT parent: '%s' mod: %s; not in reexport list\n", parent->getName(), mod ? mod : "n/a");
Globals.cpp:    return false;
Globals.cpp:}
Globals.cpp:static const QoreNamespace* get_module_root_ns_intern(const char* name, QoreProgram* mod_pgm,
Globals.cpp:        const QoreHashNode* all_mod_info, mod_dep_map_t& mod_dep_map, bool check_mod) {
Globals.cpp:    // try to find the namespace immediately
Globals.cpp:    {
Globals.cpp:        QoreString n(name);
Globals.cpp:        if (islower(*name)) {
Globals.cpp:            char* p = (char*)n.c_str();
Globals.cpp:            // convert first letter to upper case
Globals.cpp:            *p = *p - 32;
Globals.cpp:        }
Globals.cpp:        const QoreNamespace* ns = mod_pgm->findNamespace(n);
Globals.cpp:        if (ns) {
Globals.cpp:            const char* mod = ns->getModuleName();
Globals.cpp:            if (mod && ~strcmp(mod, name)) {
Globals.cpp:                return ns;
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    const QoreNamespace* root_ns = mod_pgm->getRootNS();
Globals.cpp:    QoreNamespaceConstIterator i(*root_ns);
Globals.cpp:    while (i.next()) {
Globals.cpp:        const QoreNamespace* ns = &i.get();
Globals.cpp:        if (!check_mod) {
Globals.cpp:            if (!strcmp(ns->getName(), name)) {
Globals.cpp:                return ns;
Globals.cpp:            }
Globals.cpp:            continue;
Globals.cpp:        }
Globals.cpp:        const char* mod = ns->getModuleName();
Globals.cpp:        if (!mod || strcmp(mod, name)) {
Globals.cpp:            continue;
Globals.cpp:        }
Globals.cpp:        //printd(5, "get_module_root_ns_intern('%s') found\n", name);
Globals.cpp:        // try to find parent ns
Globals.cpp:        while (true) {
Globals.cpp:            const QoreNamespace* parent = ns->getParent();
Globals.cpp:            if (!is_module(parent, name, all_mod_info, mod_dep_map)) {
Globals.cpp:                //printd(5, "get_module_root_ns_intern('%s') invalid parent '%s'\n", name, parent->getName());
Globals.cpp:                break;
Globals.cpp:            }
Globals.cpp:            ns = parent;
Globals.cpp:            //printd(5, "get_module_root_ns_intern('%s') got parent '%s'\n", name, ns->getName());
Globals.cpp:        }
Globals.cpp:        //printd(5, "get_module_root_ns_intern('%s') returning '%s'\n", name, ns->getName());
Globals.cpp:        return ns;
Globals.cpp:    }
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:const QoreNamespace* get_module_root_ns(const char* name, QoreProgram* mod_pgm) {
Globals.cpp:    AutoLocker al(qmnc_lock);
Globals.cpp:    qmnpc_t::iterator pi = qmnc.lower_bound(mod_pgm);
Globals.cpp:    qmnc_t::iterator i;
Globals.cpp:    if (pi == qmnc.end() || pi->first != mod_pgm) {
Globals.cpp:        pi = qmnc.insert(pi, qmnpc_t::value_type(mod_pgm, qmnc_t()));
Globals.cpp:        i = pi->second.end();
Globals.cpp:    } else {
Globals.cpp:        i = pi->second.lower_bound(name);
Globals.cpp:        if (i != pi->second.end() && i->first == name) {
Globals.cpp:            return i->second;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    ReferenceHolder<QoreHashNode> all_mod_info(MM.getModuleHash(), nullptr);
Globals.cpp:    mod_dep_map_t mod_dep_map;
Globals.cpp:    // look for a public namespace and then find the earliest ancestor provided by the module
Globals.cpp:    const QoreNamespace* rv = get_module_root_ns_intern(name, mod_pgm, *all_mod_info, mod_dep_map, true);
Globals.cpp:    if (!rv) {
Globals.cpp:        rv = get_module_root_ns_intern(name, mod_pgm, *all_mod_info, mod_dep_map, false);
Globals.cpp:    }
Globals.cpp:    if (rv) {
Globals.cpp:        pi->second.insert(i, qmnc_t::value_type(name, rv));
Globals.cpp:    }
Globals.cpp:    return rv;
Globals.cpp:}
Globals.cpp:static void get_java_pfx(QoreString& java_pfx, jboolean python, const char* mod_str, QoreString& py_path,
Globals.cpp:        const char* qname) {
Globals.cpp:    assert(java_pfx.empty());
Globals.cpp:    if (*mod_str) {
Globals.cpp:        if (python) {
Globals.cpp:            java_pfx = "pythonmod.";
Globals.cpp:        } else {
Globals.cpp:            java_pfx = "qoremod.";
Globals.cpp:        }
Globals.cpp:        if (python) {
Globals.cpp:            if (!py_path.empty()) {
Globals.cpp:                java_pfx.concat(py_path.c_str());
Globals.cpp:                java_pfx.concat('.');
Globals.cpp:            }
Globals.cpp:        } else {
Globals.cpp:            java_pfx.concat(mod_str);
Globals.cpp:            java_pfx.concat('.');
Globals.cpp:        }
Globals.cpp:    } else {
Globals.cpp:        if (python) {
Globals.cpp:            java_pfx = "python.";
Globals.cpp:            java_pfx += py_path.c_str();
Globals.cpp:            java_pfx += ".";
Globals.cpp:        } else {
Globals.cpp:            java_pfx = "qore.";
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    if (!python && *qname) {
Globals.cpp:        if (!strncmp(qname, "::", 2)) {
Globals.cpp:            if (*(qname + 2)) {
Globals.cpp:                java_pfx.concat(qname + 2);
Globals.cpp:                java_pfx.replaceAll("::", ".");
Globals.cpp:                java_pfx.concat('.');
Globals.cpp:            }
Globals.cpp:        } else {
Globals.cpp:            java_pfx.concat(qname);
Globals.cpp:            java_pfx.replaceAll("::", ".");
Globals.cpp:            java_pfx.concat('.');
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    assert(java_pfx.find("::") == -1);
Globals.cpp:    printd(5, "get_java_pfx() '%s' mod_str: '%s'\n", java_pfx.c_str(), mod_str ? mod_str : "n/a");
Globals.cpp:}
Globals.cpp:typedef std::vector<std::string> strlist_t;
Globals.cpp:static void get_string_list(strlist_t& l, std::string str, std::string separator = "::") {
Globals.cpp:    size_t start = 0;
Globals.cpp:    size_t len = separator.size();
Globals.cpp:    while (true) {
Globals.cpp:        size_t sep = str.find(separator, start);
Globals.cpp:        if (sep == std::string::npos) {
Globals.cpp:            break;
Globals.cpp:        }
Globals.cpp:        std::string element(str, start, sep - start);
Globals.cpp:        l.push_back(element);
Globals.cpp:        start = sep + len;
Globals.cpp:    }
Globals.cpp:    std::string element(str, start);
Globals.cpp:    l.push_back(element);
Globals.cpp:}
Globals.cpp:const QoreNamespace* find_ns_path(const QoreNamespace* ns, const char* ns_path) {
Globals.cpp:    strlist_t nslist;
Globals.cpp:    get_string_list(nslist, ns_path);
Globals.cpp:    for (std::string& i : nslist) {
Globals.cpp:        const QoreNamespace* nns = ns->findLocalNamespace(i.c_str());
Globals.cpp:        if (!nns) {
Globals.cpp:            printd(5, "find_ns_path() could not find ns '%s' in '%s'\n", i.c_str(), ns->getPath(true).c_str());
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:        ns = nns;
Globals.cpp:    }
Globals.cpp:    printd(5, "find_ns_path() resolved '%s' -> %p (%s)\n", ns_path, ns->getPath(true).c_str());
Globals.cpp:    return ns;
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_url_classloader_get_classes_in_namespace(JNIEnv* jenv, jclass jcls, jlong ptr,
Globals.cpp:        jstring qname, jstring module, jboolean python, jobject arraylist) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    assert(ptr);
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
Globals.cpp:    if (!jpc) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "No JNI context for Qore Program");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    Env::GetStringUtfChars mod_str(env);
Globals.cpp:    if (module) {
Globals.cpp:        mod_str.set(module);
Globals.cpp:    }
Globals.cpp:    Env::GetStringUtfChars nsname(env);
Globals.cpp:    if (qname) {
Globals.cpp:        nsname.set(qname);
Globals.cpp:    }
Globals.cpp:    QoreString py_path;
Globals.cpp:    if (python) {
Globals.cpp:        if (module) {
Globals.cpp:            printd(5, "ms: '%s'\n", mod_str.c_str());
Globals.cpp:            py_path.concat(mod_str.c_str());
Globals.cpp:            if (qname) {
Globals.cpp:                py_path.concat('.');
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:        if (qname) {
Globals.cpp:            printd(5, "q: '%s'\n", nsname.c_str());
Globals.cpp:            if (!strncmp(nsname.c_str(), "::Python::", 10)) {
Globals.cpp:                py_path.concat(nsname.c_str() + 10);
Globals.cpp:            } else {
Globals.cpp:                py_path.concat(nsname.c_str());
Globals.cpp:            }
Globals.cpp:            if (py_path.find("::") >= 0) {
Globals.cpp:                py_path.replaceAll("::", ".");
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    printd(5, "qore_url_classloader_get_classes_in_namespace() qname: '%s' (%p) module: '%s' (%p) python: %d "
Globals.cpp:        "py_path: '%s' pgm: %p jpc: %p\n", nsname.c_str(), qname, mod_str.c_str(), module, python, py_path.c_str(),
Globals.cpp:        pgm, jpc);
Globals.cpp:    if (python) {
Globals.cpp:        try {
Globals.cpp:            if (!python_module_import && load_python_module(env, pgm)) {
Globals.cpp:                return nullptr;
Globals.cpp:            }
Globals.cpp:            printd(5, "qore_url_classloader_get_classes_in_namespace() python import path: '%s'\n", py_path.c_str());
Globals.cpp:            if (python_module_import(&xsink, pgm, py_path.c_str(), nullptr)) {
Globals.cpp:                QoreToJava::wrapException(env, xsink);
Globals.cpp:                return nullptr;
Globals.cpp:            }
Globals.cpp:        } catch (AbstractException& e) {
Globals.cpp:            e.convert(&xsink);
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return nullptr;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    if (module && !python && load_module(env, mod_str, pgm)) {
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        // set program context before converting arguments
Globals.cpp:        QoreExternalProgramContextHelper pch(&xsink, pgm);
Globals.cpp:        if (xsink) {
Globals.cpp:            throw XsinkException(xsink);
Globals.cpp:        }
Globals.cpp:        const QoreNamespace* ns;
Globals.cpp:        if (python) {
Globals.cpp:            QoreString ns_path = py_path;
Globals.cpp:            ns_path.replaceAll(".", "::");
Globals.cpp:            ns = pgm->findNamespace(ns_path.c_str());
Globals.cpp:#if QORE_VERSION_CODE >= 10013
Globals.cpp:            if (!module) {
Globals.cpp:                ValueHolder pm(ns->getReferencedKeyValue("python_module"), nullptr);
Globals.cpp:                printd(5, "python_module: '%s'\n", pm ? pm->get<QoreStringNode>()->c_str() : "n/a");
Globals.cpp:                if (pm->getType() == NT_STRING) {
Globals.cpp:                    mod_str = pm->get<QoreStringNode>()->c_str();
Globals.cpp:                }
Globals.cpp:            }
Globals.cpp:#endif
Globals.cpp:            printd(5, "qore_url_classloader_get_classes_in_namespace() py_path: '%s' => '%s' ns: %p\n",
Globals.cpp:                py_path.c_str(), ns_path.c_str(), ns);
Globals.cpp:        } else if (qname) {
Globals.cpp:            ns = pgm->findNamespace(nsname.c_str());
Globals.cpp:            printd(5, "qore_url_classloader_get_classes_in_namespace() qname: '%s' ns: %p\n", nsname.c_str(), ns);
Globals.cpp:        } else {
Globals.cpp:            assert(module);
Globals.cpp:            ns = get_module_root_ns(mod_str.c_str(), pgm);
Globals.cpp:            printd(5, "qore_url_classloader_get_classes_in_namespace() loaded module mod_str: '%s' ns: %p (%s)\n",
Globals.cpp:                mod_str.c_str(), ns, ns ? ns->getPath(true).c_str() : "n/a");
Globals.cpp:            if (nsname) {
Globals.cpp:                ns = find_ns_path(ns, nsname.c_str());
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:#ifdef DEBUG
Globals.cpp:        {
Globals.cpp:            QoreStringNodeHolder name(pgm->getScriptPath());
Globals.cpp:            printd(5, "qore_url_classloader_get_classes_in_namespace() pgm: %p (%s) naname: '%s' " \
Globals.cpp:                "mod_str: '%s': ns: %p ('%s')\n", pgm,
Globals.cpp:                name ? name->c_str() : "n/a", nsname.c_str(), mod_str.c_str(), ns,
Globals.cpp:                ns ? ns->getPath(true).c_str() : "n/a");
Globals.cpp:        }
Globals.cpp:#endif
Globals.cpp:        if (ns) {
Globals.cpp:            QoreString java_pfx;
Globals.cpp:            if (!mod_str && !ns->isRoot()) {
Globals.cpp:                const char* mod = ns->getModuleName();
Globals.cpp:                if (mod && !jpc->isInjectedModule(mod)) {
Globals.cpp:                    // do not allow Qore symbols provided by modules to be accessed from the "qore" package
Globals.cpp:                    // or Python symbols provided by modules to be accessed from the 'python' package
Globals.cpp:                    printd(5, "qore_url_classloader_get_classes_in_namespace() not scanning ns %p (from mod %s)\n",
Globals.cpp:                        ns, ns->getModuleName());
Globals.cpp:                    return nullptr;
Globals.cpp:                }
Globals.cpp:            }
Globals.cpp:            QoreNamespaceClassIterator i(*ns);
Globals.cpp:            while (i.next()) {
Globals.cpp:                const QoreClass& qc = i.get();
Globals.cpp:                std::string pname;
Globals.cpp:                if (java_pfx.empty()) {
Globals.cpp:                    get_java_pfx(java_pfx, python, mod_str.c_str(), py_path, nsname.c_str());
Globals.cpp:                }
Globals.cpp:                pname = java_pfx.c_str();
Globals.cpp:                pname += qc.getName();
Globals.cpp:                printd(5, "pname: '%s'\n", pname.c_str());
Globals.cpp:#ifdef DEBUG
Globals.cpp:                std::string cnsn = qc.getNamespacePath();
Globals.cpp:                printd(5, "CLASS %s (%p) nsp: '%s' (%s)\n", qc.getName(), &qc, cnsn.c_str(), pname.c_str());
Globals.cpp:#endif
Globals.cpp:                printd(5, "qore_url_classloader_get_classes_in_namespace() pgm: %p '%s': qc: %p (%s -> %s)\n",
Globals.cpp:                    pgm, nsname.c_str(), &qc, qc.getName(), pname.c_str());
Globals.cpp:                assert(pname.find("::") == std::string::npos);
Globals.cpp:                // add to the ArrayList<String> var
Globals.cpp:                LocalReference<jstring> bin_name = env.newString(pname.c_str());
Globals.cpp:                jvalue jarg;
Globals.cpp:                jarg.l = bin_name;
Globals.cpp:                env.callBooleanMethod(arraylist, Globals::methodArrayListAdd, &jarg);
Globals.cpp:            }
Globals.cpp:            QoreNamespaceFunctionIterator fi(*ns);
Globals.cpp:            while (fi.next()) {
Globals.cpp:                // if there is at least one, then create the special "$Functions" class
Globals.cpp:                if (java_pfx.empty()) {
Globals.cpp:                    get_java_pfx(java_pfx, python, mod_str.c_str(), py_path, nsname.c_str());
Globals.cpp:                }
Globals.cpp:                std::string pname = java_pfx.c_str();
Globals.cpp:                pname += JniImportedFunctionClassName;
Globals.cpp:                printd(5, "function pname: '%s'\n", pname.c_str());
Globals.cpp:                LocalReference<jstring> bin_name = env.newString(pname.c_str());
Globals.cpp:                jvalue jarg;
Globals.cpp:                jarg.l = bin_name;
Globals.cpp:                env.callBooleanMethod(arraylist, Globals::methodArrayListAdd, &jarg);
Globals.cpp:                break;
Globals.cpp:            }
Globals.cpp:            QoreNamespaceConstantIterator ci(*ns);
Globals.cpp:            while (ci.next()) {
Globals.cpp:                // if there is at least one, then create the special "$Constants" class
Globals.cpp:                if (java_pfx.empty()) {
Globals.cpp:                    get_java_pfx(java_pfx, python, mod_str.c_str(), py_path, nsname.c_str());
Globals.cpp:                }
Globals.cpp:                std::string pname = java_pfx.c_str();
Globals.cpp:                pname += JniImportedConstantClassName;
Globals.cpp:                printd(5, "qore_url_classloader_get_classes_in_namespace() pgm: %p '%s' (%s)\n",
Globals.cpp:                    pgm, nsname.c_str(), pname.c_str());
Globals.cpp:                LocalReference<jstring> bin_name = env.newString(pname.c_str());
Globals.cpp:                jvalue jarg;
Globals.cpp:                jarg.l = bin_name;
Globals.cpp:                env.callBooleanMethod(arraylist, Globals::methodArrayListAdd, &jarg);
Globals.cpp:                break;
Globals.cpp:            }
Globals.cpp:            printd(5, "qore_url_classloader_get_classes_in_namespace() %s: DONE\n", nsname.c_str());
Globals.cpp:        }
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        ExceptionSink xsink;
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (const std::bad_alloc& e) {
Globals.cpp:        // translate OOM C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/OutOfMemoryError"), e.what());
Globals.cpp:    } catch (const std::exception& e) {
Globals.cpp:        // translate unknown C++ exceptions to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), e.what());
Globals.cpp:    } catch (...) {
Globals.cpp:        // translate unknown C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), "Unknown exception type");
Globals.cpp:    }
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static jlong JNICALL qore_url_classloader_get_context_program(JNIEnv* jenv, jclass jcls, jobject new_syscl,
Globals.cpp:        jobject created, jboolean finalize_init) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return 0;
Globals.cpp:    }
Globals.cpp:    printd(5, "qore_url_classloader_get_context_program() new_syscl: %p finalize_init: %d\n", new_syscl, finalize_init);
Globals.cpp:    if (finalize_init) {
Globals.cpp:        Globals::syscl = GlobalReference<jobject>::fromLocal(new_syscl);
Globals.cpp:        jni_module_init_finalize(true);
Globals.cpp:    }
Globals.cpp:    bool pcreated;
Globals.cpp:    jlong rv = Globals::getContextProgram(finalize_init ? nullptr : new_syscl, pcreated);
Globals.cpp:    if (pcreated) {
Globals.cpp:        env.callVoidMethod(created, Globals::methodBooleanWrapperSetTrue, nullptr);
Globals.cpp:    }
Globals.cpp:    printd(5, "qore_url_classloader_get_context_program() rv: %p created: %d\n", rv, pcreated);
Globals.cpp:    return rv;
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_url_classloader_clear_compilation_cache(JNIEnv* jenv, jclass jcls, jlong ptr) {
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
Globals.cpp:    if (!jpc) {
Globals.cpp:        Env env(jenv);
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "No JNI context for Qore Program");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    jpc->clearCompilationCache();
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_url_classloader_shutdown_context(JNIEnv* jenv, jclass jcls, jobject new_syscl,
Globals.cpp:        jobject created) {
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        Env env(jenv);
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    Globals::clearGlobalContext();
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_url_classloader_dummy(JNIEnv* jenv, jclass jcls) {
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_url_classloader_debug(JNIEnv* jenv, jclass jcls, jlong ptr) {
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static jlong JNICALL qore_object_create(JNIEnv* jenv, jclass ignore, const QoreClass* qc, const QoreMethod* meth,
Globals.cpp:        const QoreExternalMethodVariant* v, jobject java_this, jobjectArray args) {
Globals.cpp:    //printd(5, "qore_object_create() qc: %p meth: %p v: %p java_this: %p %s::%s() args: %p\n", qc, meth, v, java_this,
Globals.cpp:    //    qc->getName(), meth ? meth->getName() : "n/a", args);
Globals.cpp:    Env env(jenv);
Globals.cpp:    if (!qc) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "QoreClass ptr passed as nullptr");
Globals.cpp:        return 0;
Globals.cpp:    }
Globals.cpp:    // create the object in the current object's Program; using the QoreClass's program will result in the wrong
Globals.cpp:    // classloader being used to resolve any dependent classes
Globals.cpp:    QoreProgram* pgm = jni_get_program_context();
Globals.cpp:    if (!pgm) {
Globals.cpp:        pgm = Globals::getJavaContextProgram();
Globals.cpp:    }
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return 0;
Globals.cpp:    }
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    try {
Globals.cpp:        // see if "this" (in Java) is being instantiated for the Qore class directly or a child class; if it's a child
Globals.cpp:        // class, then create a new Qore class for the Java class
Globals.cpp:        LocalReference<jclass> jcls = env.callObjectMethod(java_this, Globals::methodObjectGetClass, nullptr).as<jclass>();
Globals.cpp:        // only look for a Qore class in the immediate local class
Globals.cpp:        const QoreClass* jqc = JniExternalProgramData::tryGetQoreClass(env, jcls, false);
Globals.cpp:        if (!jqc) {
Globals.cpp:            jqc = qjcm.findCreateQoreClass(env, jcls, pgm);
Globals.cpp:        }
Globals.cpp:        // ensure class can be instantiated
Globals.cpp:        if (jqc->runtimeCheckInstantiateClass(&xsink)) {
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return 0;
Globals.cpp:        }
Globals.cpp:        // set program context before converting arguments
Globals.cpp:        QoreExternalProgramContextHelper pch(&xsink, pgm);
Globals.cpp:        if (xsink) {
Globals.cpp:            throw XsinkException(xsink);
Globals.cpp:        }
Globals.cpp:        jsize len = args ? env.getArrayLength(args) : 0;
Globals.cpp:        ReferenceHolder<QoreListNode> qore_args(&xsink);
Globals.cpp:        if (len) {
Globals.cpp:            Array::getArgList(qore_args, env, args, pgm, true);
Globals.cpp:        }
Globals.cpp:        ValueHolder obj(qc->execConstructor(*jqc, *qore_args, true, &xsink), &xsink);
Globals.cpp:        if (xsink) {
Globals.cpp:            QoreToJava::wrapException(env, xsink);
Globals.cpp:            return 0;
Globals.cpp:        }
Globals.cpp:        assert(obj);
Globals.cpp:        save_object(env, *obj, pgm, xsink);
Globals.cpp:        printd(5, "qore_object_create() created %s: %p (%s)\n", jqc->getName(), obj->get<const QoreObject>(),
Globals.cpp:            obj->getFullTypeName());
Globals.cpp:        assert(obj);
Globals.cpp:        // increment weak ref count for assignment to QoreObjectBase
Globals.cpp:        QoreObject* qobj = obj->get<QoreObject>();
Globals.cpp:        qobj->tRef();
Globals.cpp:        if (jqc != qc) {
Globals.cpp:            // set private data for Java
Globals.cpp:            qobj->setPrivate(jqc->getID(), new QoreJniPrivateData(java_this));
Globals.cpp:        }
Globals.cpp:        return reinterpret_cast<jlong>(qobj);
Globals.cpp:    } catch (jni::QoreJniException& e) {
Globals.cpp:        QoreString buf;
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), e.what(buf));
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (const std::bad_alloc& e) {
Globals.cpp:        // translate OOM C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/OutOfMemoryError"), e.what());
Globals.cpp:    } catch (const std::exception& e) {
Globals.cpp:        // translate unknown C++ exceptions to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), e.what());
Globals.cpp:    } catch (...) {
Globals.cpp:        // translate unknown C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), "Unknown exception type");
Globals.cpp:    }
Globals.cpp:    //assert(false);
Globals.cpp:    return 0;
Globals.cpp:}
Globals.cpp:static void JNICALL qore_object_release(JNIEnv*, jclass, jlong ptr) {
Globals.cpp:    assert(ptr);
Globals.cpp:    reinterpret_cast<QoreObject*>(ptr)->tDeref();
Globals.cpp:}
Globals.cpp:static void JNICALL qore_object_destroy(JNIEnv* jenv, jclass, jlong ptr) {
Globals.cpp:    assert(ptr);
Globals.cpp:    // must ensure that the thread is attached before executing Qore code
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        // NOTE: this results in a memory leak
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return;
Globals.cpp:    }
Globals.cpp:    ExceptionSink xsink;
Globals.cpp:    try {
Globals.cpp:        reinterpret_cast<QoreObject*>(ptr)->doDelete(&xsink);
Globals.cpp:        reinterpret_cast<QoreObject*>(ptr)->tDeref();
Globals.cpp:        if (xsink) {
Globals.cpp:            throw XsinkException(xsink);
Globals.cpp:        }
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (const std::bad_alloc& e) {
Globals.cpp:        // translate OOM C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/OutOfMemoryError"), e.what());
Globals.cpp:    } catch (const std::exception& e) {
Globals.cpp:        // translate unknown C++ exceptions to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), e.what());
Globals.cpp:    } catch (...) {
Globals.cpp:        // translate unknown C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), "Unknown exception type");
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static void JNICALL qore_object_finalize(JNIEnv*, jclass, jlong ptr) {
Globals.cpp:    assert(ptr);
Globals.cpp:    reinterpret_cast<QoreObject*>(ptr)->tDeref();
Globals.cpp:}
Globals.cpp:static GlobalReference<jclass> getPrimitiveClass(Env& env, const char* wrapperName) {
Globals.cpp:    LocalReference<jclass> wrapperClass = env.findClass(wrapperName);
Globals.cpp:    jfieldID typeFieldId = env.getStaticField(wrapperClass, "TYPE", "Ljava/lang/Class;");
Globals.cpp:    return std::move(env.getStaticObjectField(wrapperClass, typeFieldId).as<jclass>().makeGlobal());
Globals.cpp:}
Globals.cpp:#include "JavaClassQoreInvocationHandler.inc"
Globals.cpp:#include "JavaClassQoreExceptionWrapper.inc"
Globals.cpp:#include "JavaClassQoreException.inc"
Globals.cpp:#include "JavaClassQoreObjectBase.inc"
Globals.cpp:#include "JavaClassQoreObject.inc"
Globals.cpp:#include "JavaClassQoreJavaClassBase.inc"
Globals.cpp:#include "JavaClassQoreClosure.inc"
Globals.cpp:#include "JavaClassQoreObjectWrapper.inc"
Globals.cpp:#include "JavaClassQoreClosureMarker.inc"
Globals.cpp:#include "JavaClassQoreClosureMarkerImpl.inc"
Globals.cpp:#include "JavaClassBooleanWrapper.inc"
Globals.cpp:#include "JavaClassClassModInfo.inc"
Globals.cpp:#include "JavaClassQoreURLClassLoader.inc"
Globals.cpp:#include "JavaClassQoreURLClassLoader_1.inc"
Globals.cpp:#include "JavaClassQoreURLClassLoader_2.inc"
Globals.cpp:#include "JavaClassQoreJavaFileObject.inc"
Globals.cpp:#include "JavaClassQoreJavaObjectPtr.inc"
Globals.cpp:#include "JavaClassJavaClassBuilder.inc"
Globals.cpp:#include "JavaClassJavaClassBuilder_1.inc"
Globals.cpp:#include "JavaClassJavaClassBuilder_2.inc"
Globals.cpp:#include "JavaClassStaticEntry.inc"
Globals.cpp:#include "JavaClassQoreJavaApi.inc"
Globals.cpp:#include "JavaClassQoreRelativeTime.inc"
Globals.cpp:#include "JavaClassQoreJavaDynamicApi.inc"
Globals.cpp:#include "JavaClassHash.inc"
Globals.cpp:#include "JavaClassHash_1.inc"
Globals.cpp:#include "JavaClassHash_2.inc"
Globals.cpp:#include "JavaClassHash_3.inc"
Globals.cpp:#include "JavaClassHash_4.inc"
Globals.cpp:#include "JavaClassHash_5.inc"
Globals.cpp:#include "JavaClassHash_6.inc"
Globals.cpp:#include "JavaClassHash_7.inc"
Globals.cpp:#include "JavaClassHash_8.inc"
Globals.cpp:#include "JavaClassHash_9.inc"
Globals.cpp:#include "JavaClassHash_10.inc"
Globals.cpp:// compiler: org.qore.jni.compiler
Globals.cpp:#include "JavaClassCompilerOutput.inc"
Globals.cpp:#include "JavaClassCustomJavaFileObject.inc"
Globals.cpp:#include "JavaClassPackageInternalsFinder.inc"
Globals.cpp:#include "JavaClassQoreJavaClassObject.inc"
Globals.cpp:#include "JavaClassQoreJavaCompiler.inc"
Globals.cpp:#include "JavaClassQoreJavaCompilerException.inc"
Globals.cpp:#include "JavaClassJavaFileObjectImpl.inc"
Globals.cpp:#include "JavaClassFileManagerImpl.inc"
Globals.cpp:#include "JavaClassQoreJavaFileManager.inc"
Globals.cpp:#include "JavaJarByteBuddy.inc"
Globals.cpp:// to repopulate list:
Globals.cpp:// ls *inc | grep -v ByteBuddy| while read a; do c=`echo $a|sed -e s/JavaClass// -e s/.inc$//`;
Globals.cpp://   b=`echo $c|sed s/_/$/`;
Globals.cpp://   printf "    {\"org.qore.jni.%s\", {java_org_qore_jni_%s_class_len, java_org_qore_jni_%s_class}},\n" "$b" "$c" "$c"; done
Globals.cpp:struct uncompressed_class_info_t {
Globals.cpp:    unsigned len;
Globals.cpp:    unsigned char* byte_code;
Globals.cpp:};
Globals.cpp:typedef std::map<const char*, uncompressed_class_info_t, ltstr> ucmap_t;
Globals.cpp:static ucmap_t ucmap = {
Globals.cpp:    {"org.qore.jni.BooleanWrapper", {java_org_qore_jni_BooleanWrapper_class_len, java_org_qore_jni_BooleanWrapper_class}},
Globals.cpp:    {"org.qore.jni.ClassModInfo", {java_org_qore_jni_ClassModInfo_class_len, java_org_qore_jni_ClassModInfo_class}},
Globals.cpp:    {"org.qore.jni.Hash", {java_org_qore_jni_Hash_class_len, java_org_qore_jni_Hash_class}},
Globals.cpp:    {"org.qore.jni.Hash$1", {java_org_qore_jni_Hash_1_class_len, java_org_qore_jni_Hash_1_class}},
Globals.cpp:    {"org.qore.jni.Hash$10", {java_org_qore_jni_Hash_10_class_len, java_org_qore_jni_Hash_10_class}},
Globals.cpp:    {"org.qore.jni.Hash$2", {java_org_qore_jni_Hash_2_class_len, java_org_qore_jni_Hash_2_class}},
Globals.cpp:    {"org.qore.jni.Hash$3", {java_org_qore_jni_Hash_3_class_len, java_org_qore_jni_Hash_3_class}},
Globals.cpp:    {"org.qore.jni.Hash$4", {java_org_qore_jni_Hash_4_class_len, java_org_qore_jni_Hash_4_class}},
Globals.cpp:    {"org.qore.jni.Hash$5", {java_org_qore_jni_Hash_5_class_len, java_org_qore_jni_Hash_5_class}},
Globals.cpp:    {"org.qore.jni.Hash$6", {java_org_qore_jni_Hash_6_class_len, java_org_qore_jni_Hash_6_class}},
Globals.cpp:    {"org.qore.jni.Hash$7", {java_org_qore_jni_Hash_7_class_len, java_org_qore_jni_Hash_7_class}},
Globals.cpp:    {"org.qore.jni.Hash$8", {java_org_qore_jni_Hash_8_class_len, java_org_qore_jni_Hash_8_class}},
Globals.cpp:    {"org.qore.jni.Hash$9", {java_org_qore_jni_Hash_9_class_len, java_org_qore_jni_Hash_9_class}},
Globals.cpp:    {"org.qore.jni.JavaClassBuilder", {java_org_qore_jni_JavaClassBuilder_class_len, java_org_qore_jni_JavaClassBuilder_class}},
Globals.cpp:    {"org.qore.jni.JavaClassBuilder$1", {java_org_qore_jni_JavaClassBuilder_1_class_len, java_org_qore_jni_JavaClassBuilder_1_class}},
Globals.cpp:    {"org.qore.jni.JavaClassBuilder$2", {java_org_qore_jni_JavaClassBuilder_2_class_len, java_org_qore_jni_JavaClassBuilder_2_class}},
Globals.cpp:    {"org.qore.jni.StaticEntry", {java_org_qore_jni_StaticEntry_class_len, java_org_qore_jni_StaticEntry_class}},
Globals.cpp:    {"org.qore.jni.QoreClosure", {java_org_qore_jni_QoreClosure_class_len, java_org_qore_jni_QoreClosure_class}},
Globals.cpp:    {"org.qore.jni.QoreClosureMarker", {java_org_qore_jni_QoreClosureMarker_class_len, java_org_qore_jni_QoreClosureMarker_class}},
Globals.cpp:    {"org.qore.jni.QoreClosureMarkerImpl", {java_org_qore_jni_QoreClosureMarkerImpl_class_len, java_org_qore_jni_QoreClosureMarkerImpl_class}},
Globals.cpp:    {"org.qore.jni.QoreException", {java_org_qore_jni_QoreException_class_len, java_org_qore_jni_QoreException_class}},
Globals.cpp:    {"org.qore.jni.QoreExceptionWrapper", {java_org_qore_jni_QoreExceptionWrapper_class_len, java_org_qore_jni_QoreExceptionWrapper_class}},
Globals.cpp:    {"org.qore.jni.QoreInvocationHandler", {java_org_qore_jni_QoreInvocationHandler_class_len, java_org_qore_jni_QoreInvocationHandler_class}},
Globals.cpp:    {"org.qore.jni.QoreJavaApi", {java_org_qore_jni_QoreJavaApi_class_len, java_org_qore_jni_QoreJavaApi_class}},
Globals.cpp:    {"org.qore.jni.QoreJavaClassBase", {java_org_qore_jni_QoreJavaClassBase_class_len, java_org_qore_jni_QoreJavaClassBase_class}},
Globals.cpp:    {"org.qore.jni.QoreJavaDynamicApi", {java_org_qore_jni_QoreJavaDynamicApi_class_len, java_org_qore_jni_QoreJavaDynamicApi_class}},
Globals.cpp:    {"org.qore.jni.QoreJavaFileObject", {java_org_qore_jni_QoreJavaFileObject_class_len, java_org_qore_jni_QoreJavaFileObject_class}},
Globals.cpp:    {"org.qore.jni.QoreJavaObjectPtr", {java_org_qore_jni_QoreJavaObjectPtr_class_len, java_org_qore_jni_QoreJavaObjectPtr_class}},
Globals.cpp:    {"org.qore.jni.QoreObject", {java_org_qore_jni_QoreObject_class_len, java_org_qore_jni_QoreObject_class}},
Globals.cpp:    {"org.qore.jni.QoreObjectBase", {java_org_qore_jni_QoreObjectBase_class_len, java_org_qore_jni_QoreObjectBase_class}},
Globals.cpp:    {"org.qore.jni.QoreObjectWrapper", {java_org_qore_jni_QoreObjectWrapper_class_len, java_org_qore_jni_QoreObjectWrapper_class}},
Globals.cpp:    {"org.qore.jni.QoreRelativeTime", {java_org_qore_jni_QoreRelativeTime_class_len, java_org_qore_jni_QoreRelativeTime_class}},
Globals.cpp:    {"org.qore.jni.QoreURLClassLoader", {java_org_qore_jni_QoreURLClassLoader_class_len, java_org_qore_jni_QoreURLClassLoader_class}},
Globals.cpp:    {"org.qore.jni.QoreURLClassLoader$1", {java_org_qore_jni_QoreURLClassLoader_1_class_len, java_org_qore_jni_QoreURLClassLoader_1_class}},
Globals.cpp:    {"org.qore.jni.QoreURLClassLoader$2", {java_org_qore_jni_QoreURLClassLoader_2_class_len, java_org_qore_jni_QoreURLClassLoader_2_class}},
Globals.cpp:    {"org.qore.jni.compiler.CompilerOutput", {java_org_qore_jni_CompilerOutput_class_len, java_org_qore_jni_CompilerOutput_class}},
Globals.cpp:    {"org.qore.jni.compiler.CustomJavaFileObject", {java_org_qore_jni_CustomJavaFileObject_class_len, java_org_qore_jni_CustomJavaFileObject_class}},
Globals.cpp:    {"org.qore.jni.compiler.PackageInternalsFinder", {java_org_qore_jni_PackageInternalsFinder_class_len, java_org_qore_jni_PackageInternalsFinder_class}},
Globals.cpp:    {"org.qore.jni.compiler.QoreJavaClassObject", {java_org_qore_jni_QoreJavaClassObject_class_len, java_org_qore_jni_QoreJavaClassObject_class}},
Globals.cpp:    {"org.qore.jni.compiler.QoreJavaCompiler", {java_org_qore_jni_QoreJavaCompiler_class_len, java_org_qore_jni_QoreJavaCompiler_class}},
Globals.cpp:    {"org.qore.jni.compiler.QoreJavaCompilerException", {java_org_qore_jni_QoreJavaCompilerException_class_len, java_org_qore_jni_QoreJavaCompilerException_class}},
Globals.cpp:    {"org.qore.jni.compiler.JavaFileObjectImpl", {java_org_qore_jni_JavaFileObjectImpl_class_len, java_org_qore_jni_JavaFileObjectImpl_class}},
Globals.cpp:    {"org.qore.jni.compiler.FileManagerImpl", {java_org_qore_jni_FileManagerImpl_class_len, java_org_qore_jni_FileManagerImpl_class}},
Globals.cpp:    {"org.qore.jni.compiler.QoreJavaFileManager", {java_org_qore_jni_QoreJavaFileManager_class_len, java_org_qore_jni_QoreJavaFileManager_class}},
Globals.cpp:};
Globals.cpp:// returns byte[] of class data if found
Globals.cpp:static jbyteArray qore_url_classloader_get_internal_class(JNIEnv* jenv, jclass jcls, jstring bin_name) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    Env::GetStringUtfChars bname(env, bin_name);
Globals.cpp:    ucmap_t::const_iterator i = ucmap.find(bname.c_str());
Globals.cpp:    if (i == ucmap.end()) {
Globals.cpp:        //printd(LogLevel, "qore_url_classloader_get_internal_class() '%s' not found\n", bname.c_str());
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    LocalReference<jbyteArray> array = env.newByteArray(i->second.len).as<jbyteArray>();
Globals.cpp:    for (jsize j = 0; j < static_cast<jsize>(i->second.len); ++j) {
Globals.cpp:        env.setByteArrayElement(array, j, i->second.byte_code[j]);
Globals.cpp:    }
Globals.cpp:    //printd(LogLevel, "qore_url_classloader_get_internal_class() FOUND '%s'\n", bname.c_str());
Globals.cpp:    return array.release();
Globals.cpp:}
Globals.cpp:static jobject JNICALL qore_url_classloader_get_internal_classes_for_package(JNIEnv* jenv, jclass jcls, jlong ptr,
Globals.cpp:        jstring pkg, jobject arraylist) {
Globals.cpp:    Env env(jenv);
Globals.cpp:    QoreThreadAttachHelper attach_helper;
Globals.cpp:    try {
Globals.cpp:        attach_helper.attach();
Globals.cpp:    } catch (Exception& e) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "Unable to attach thread to Qore");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    assert(ptr);
Globals.cpp:    QoreProgram* pgm = reinterpret_cast<QoreProgram*>(ptr);
Globals.cpp:    JniExternalProgramData* jpc = static_cast<JniExternalProgramData*>(pgm->getExternalData("jni"));
Globals.cpp:    if (!jpc) {
Globals.cpp:        env.throwNew(env.findClass("java/lang/RuntimeException"), "No JNI context for Qore Program");
Globals.cpp:        return nullptr;
Globals.cpp:    }
Globals.cpp:    try {
Globals.cpp:        Env::GetStringUtfChars pname(env, pkg);
Globals.cpp:        unsigned len = strlen(pname.c_str());
Globals.cpp:        for (auto& i : ucmap) {
Globals.cpp:            unsigned plen = strlen(i.first);
Globals.cpp:            if (plen < len || i.first[len] != '.') {
Globals.cpp:                continue;
Globals.cpp:            }
Globals.cpp:            if (strncmp(pname.c_str(), i.first, len) || strchr(i.first + len + 1, '.')) {
Globals.cpp:                continue;
Globals.cpp:            }
Globals.cpp:            LocalReference<jstring> bin_name = env.newString(i.first);
Globals.cpp:            jvalue jarg;
Globals.cpp:            jarg.l = bin_name;
Globals.cpp:            env.callBooleanMethod(arraylist, Globals::methodArrayListAdd, &jarg);
Globals.cpp:        }
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        ExceptionSink xsink;
Globals.cpp:        e.convert(&xsink);
Globals.cpp:        QoreToJava::wrapException(env, xsink);
Globals.cpp:    } catch (const std::bad_alloc& e) {
Globals.cpp:        // translate OOM C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/OutOfMemoryError"), e.what());
Globals.cpp:    } catch (const std::exception& e) {
Globals.cpp:        // translate unknown C++ exceptions to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), e.what());
Globals.cpp:    } catch (...) {
Globals.cpp:        // translate unknown C++ exception to a Java exception
Globals.cpp:        env.throwNew(env.findClass("java/lang/Error"), "Unknown exception type");
Globals.cpp:    }
Globals.cpp:    return nullptr;
Globals.cpp:}
Globals.cpp:static JNINativeMethod invocationHandlerNativeMethods[2] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("finalize0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(invocation_handler_finalize)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("invoke0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(invocation_handler_invoke)
Globals.cpp:    }
Globals.cpp:};
Globals.cpp:static JNINativeMethod qoreJavaApiNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("initQore0"),
Globals.cpp:        const_cast<char*>("()J"),
Globals.cpp:        reinterpret_cast<void*>(java_api_init_qore)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("initQoreBootstrap0"),
Globals.cpp:        const_cast<char*>("()V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_dummy)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callFunction0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_api_call_function)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callFunctionSave0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_api_call_function_save)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callStaticMethod0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_api_call_static_method)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callStaticMethodSave0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_api_call_static_method_save)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        // private native static QoreObject newObjectSave0(long pgm_ptr, String key, String class_name, Object...args);
Globals.cpp:        const_cast<char*>("newObjectSave0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;[Ljava/lang/Object;)Lorg/qore/jni/QoreObject;"),
Globals.cpp:        reinterpret_cast<void*>(java_api_new_object_save)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        // private native static boolean registerJavaThread0();
Globals.cpp:        const_cast<char*>("registerJavaThread0"),
Globals.cpp:        const_cast<char*>("()Z"),
Globals.cpp:        reinterpret_cast<void*>(java_api_register_java_thread)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        // private native static void deregisterJavaThread0();
Globals.cpp:        const_cast<char*>("deregisterJavaThread0"),
Globals.cpp:        const_cast<char*>("()V"),
Globals.cpp:        reinterpret_cast<void*>(java_api_deregister_java_thread)
Globals.cpp:    },
Globals.cpp:};
Globals.cpp:static JNINativeMethod qoreExceptionWrapperNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("finalize0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_exception_wrapper_finalize)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getMessage0"),
Globals.cpp:        const_cast<char*>("(J)Ljava/lang/String;"),
Globals.cpp:        reinterpret_cast<void*>(qore_exception_wrapper_get_message)
Globals.cpp:    }
Globals.cpp:};
Globals.cpp:static JNINativeMethod qoreObjectBaseNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("create0"),
Globals.cpp:        const_cast<char*>("(JJJLjava/lang/Object;[Ljava/lang/Object;)J"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_create)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("release0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_release)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("destroy0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_destroy)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("finalize0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_finalize)
Globals.cpp:    },
Globals.cpp:};
Globals.cpp:static JNINativeMethod qoreObjectNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("className0"),
Globals.cpp:        const_cast<char*>("(J)Ljava/lang/String;"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_class_name)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("instanceOf0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;)Z"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_instance_of)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callMethod0"),
Globals.cpp:        const_cast<char*>("(JJLjava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_call_method)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callMethodSave0"),
Globals.cpp:        const_cast<char*>("(JJLjava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_call_method_save)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getMemberValue0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(qore_object_get_member_value)
Globals.cpp:    },
Globals.cpp:};
Globals.cpp:static JNINativeMethod qoreClosureNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("call0"),
Globals.cpp:        const_cast<char*>("(JJ[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(qore_closure_call)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("callSave0"),
Globals.cpp:        const_cast<char*>("(JJ[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(qore_closure_call_save)
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("finalize0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_closure_finalize)
Globals.cpp:    },
Globals.cpp:};
Globals.cpp:static JNINativeMethod qoreURLClassLoaderNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getCachedClass0"),
Globals.cpp:        const_cast<char*>("(Ljava/lang/String;)[B"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_get_cached_class),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getInternalClass0"),
Globals.cpp:        const_cast<char*>("(Ljava/lang/String;)[B"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_get_internal_class),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("generateByteCode0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZJ)[B"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_generate_byte_code),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getClassesInNamespace0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;Ljava/lang/String;ZLjava/util/ArrayList;)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_get_classes_in_namespace),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getInternalClassesForPackage0"),
Globals.cpp:        const_cast<char*>("(JLjava/lang/String;Ljava/util/ArrayList;)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_get_internal_classes_for_package),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getContextProgram0"),
Globals.cpp:        const_cast<char*>("(Lorg/qore/jni/QoreURLClassLoader;Lorg/qore/jni/BooleanWrapper;Z)J"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_get_context_program),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("clearCompilationCache0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_clear_compilation_cache),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("shutdownContext0"),
Globals.cpp:        const_cast<char*>("()V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_shutdown_context),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("dummy0"),
Globals.cpp:        const_cast<char*>("()V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_dummy),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("debug0"),
Globals.cpp:        const_cast<char*>("(J)V"),
Globals.cpp:        reinterpret_cast<void*>(qore_url_classloader_debug),
Globals.cpp:    },
Globals.cpp:};
Globals.cpp:static JNINativeMethod javaClassBuilderNativeMethods[] = {
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("doStaticCall0"),
Globals.cpp:        const_cast<char*>("(Ljava/lang/String;JJJJ[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_class_builder_do_static_call),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("doNormalCall0"),
Globals.cpp:        const_cast<char*>("(Ljava/lang/String;JJJ[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_class_builder_do_normal_call),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("doFunctionCall0"),
Globals.cpp:        const_cast<char*>("(JJJ[Ljava/lang/Object;)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_class_builder_do_function_call),
Globals.cpp:    },
Globals.cpp:    {
Globals.cpp:        const_cast<char*>("getConstantValue0"),
Globals.cpp:        const_cast<char*>("(JJ)Ljava/lang/Object;"),
Globals.cpp:        reinterpret_cast<void*>(java_class_builder_get_constant_value),
Globals.cpp:    },
Globals.cpp:};
Globals.cpp:// calling Env::FindClass() when the class is not available will cause the class lookup to fail later after we define it
Globals.cpp:// therefore we have to only define the class if the java classes have not already been loaded
Globals.cpp:LocalReference<jclass> Globals::findDefineClass(Env& env, const char* name, jobject loader, const unsigned char* buf,
Globals.cpp:    jsize bufLen) {
Globals.cpp:    if (!loader) {
Globals.cpp:        QoreString jname(name);
Globals.cpp:        jname.replaceAll(".", "/");
Globals.cpp:        if (already_initialized) {
Globals.cpp:            return env.findDefineClass(jname.c_str(), nullptr, buf, bufLen);
Globals.cpp:        } else {
Globals.cpp:            return env.defineClass(jname.c_str(), nullptr, buf, bufLen);
Globals.cpp:        }
Globals.cpp:    } else {
Globals.cpp:        std::vector<jvalue> jargs(2);
Globals.cpp:        LocalReference<jbyteArray> jbyte_code = env.newByteArray(bufLen).as<jbyteArray>();
Globals.cpp:        for (jsize i = 0; i < static_cast<jsize>(bufLen); ++i) {
Globals.cpp:            env.setByteArrayElement(jbyte_code, i, ((const char*)buf)[i]);
Globals.cpp:        }
Globals.cpp:        LocalReference<jstring> bname = env.newString(name);
Globals.cpp:        jargs[0].l = bname;
Globals.cpp:        jargs[1].l = jbyte_code;
Globals.cpp:        return env.callObjectMethod(loader, Globals::methodQoreURLClassLoaderDefineClassUnconditional, &jargs[0]).as<jclass>();
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:static bool digits_only(const char* s) {
Globals.cpp:    while (*s) {
Globals.cpp:        if (!isdigit(*s++)) {
Globals.cpp:            return false;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    return true;
Globals.cpp:}
Globals.cpp:static void check_java_version() {
Globals.cpp:    jni::Env env;
Globals.cpp:    LocalReference<jstring> jprop = env.newString("java.version");
Globals.cpp:    std::vector<jvalue> jargs(1);
Globals.cpp:    jargs[0].l = jprop;
Globals.cpp:    LocalReference<jstring> str = env.callStaticObjectMethod(Globals::classSystem,
Globals.cpp:        Globals::methodSystemGetProperty, &jargs[0]).as<jstring>();
Globals.cpp:    int mver = -1;
Globals.cpp:    Env::GetStringUtfChars jver(env, str);
Globals.cpp:    const char* p = strchr(jver.c_str(), '.');
Globals.cpp:    if (p) {
Globals.cpp:        QoreString maj(jver.c_str(), p - jver.c_str());
Globals.cpp:        mver = atoi(maj.c_str());
Globals.cpp:    } else {
Globals.cpp:        p = strchr(jver.c_str(), '-');
Globals.cpp:        if (p || digits_only(jver.c_str())) {
Globals.cpp:            mver = atoi(jver.c_str());
Globals.cpp:        } else {
Globals.cpp:            mver = atoi(jver.c_str());
Globals.cpp:            throw QoreStandardException("JAVA-VERSION-ERROR", "the jni module was compiled with Java %d, but runtime " \
Globals.cpp:                "Java version cannot be determined from '%s'; please install the correct version of Java and try again (%d)",
Globals.cpp:                JAVA_VERSION_MAJOR, jver.c_str());
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    if (JAVA_VERSION_MAJOR != mver) {
Globals.cpp:        throw QoreStandardException("JAVA-VERSION-ERROR", "the jni module was compiled with Java %d; the runtime " \
Globals.cpp:            "Java version is %s; please install the correct version of Java and try again", JAVA_VERSION_MAJOR,
Globals.cpp:            jver.c_str());
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:constexpr const char* INIT_PROP_NAME = "qore.QoreURLClassLoader.init";
Globals.cpp:void Globals::defineQoreURLClassLoader(Env& env) {
Globals.cpp:    printd(5, "defineQoreURLClassLoader() starting\n");
Globals.cpp:    findDefineClass(env, "org.qore.jni.QoreJavaFileObject", nullptr,
Globals.cpp:        java_org_qore_jni_QoreJavaFileObject_class, java_org_qore_jni_QoreJavaFileObject_class_len).makeGlobal();
Globals.cpp:    classBooleanWrapper = findDefineClass(env, "org.qore.jni.BooleanWrapper", nullptr,
Globals.cpp:        java_org_qore_jni_BooleanWrapper_class, java_org_qore_jni_BooleanWrapper_class_len).makeGlobal();
Globals.cpp:    methodBooleanWrapperSetTrue = env.getMethod(classBooleanWrapper, "setTrue", "()V");
Globals.cpp:    findDefineClass(env, "org.qore.jni.ClassModInfo", nullptr,
Globals.cpp:        java_org_qore_jni_ClassModInfo_class, java_org_qore_jni_ClassModInfo_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.QoreURLClassLoader$1", nullptr, java_org_qore_jni_QoreURLClassLoader_1_class,
Globals.cpp:        java_org_qore_jni_QoreURLClassLoader_1_class_len);
Globals.cpp:    findDefineClass(env, "org.qore.jni.QoreURLClassLoader$2", nullptr, java_org_qore_jni_QoreURLClassLoader_2_class,
Globals.cpp:        java_org_qore_jni_QoreURLClassLoader_2_class_len);
Globals.cpp:    // create our class loader to load module classes
Globals.cpp:    classQoreURLClassLoader = findDefineClass(env, "org.qore.jni.QoreURLClassLoader", nullptr,
Globals.cpp:        java_org_qore_jni_QoreURLClassLoader_class, java_org_qore_jni_QoreURLClassLoader_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreURLClassLoader, qoreURLClassLoaderNativeMethods,
Globals.cpp:        sizeof(qoreURLClassLoaderNativeMethods) / sizeof(JNINativeMethod));
Globals.cpp:    ctorQoreURLClassLoader = env.getMethod(classQoreURLClassLoader, "<init>", "(JLjava/lang/ClassLoader;)V");
Globals.cpp:    methodQoreURLClassLoaderAddPath = env.getMethod(classQoreURLClassLoader, "addPath", "(Ljava/lang/String;)V");
Globals.cpp:    methodQoreURLClassLoaderLoadClass = env.getMethod(classQoreURLClassLoader, "loadClass",
Globals.cpp:        "(Ljava/lang/String;)Ljava/lang/Class;");
Globals.cpp:    methodQoreURLClassLoaderLoadClassWithPtr = env.getMethod(classQoreURLClassLoader, "loadClassWithPtr",
Globals.cpp:        "(Ljava/lang/String;J)Ljava/lang/Class;");
Globals.cpp:    methodQoreURLClassLoaderLoadResolveClass = env.getMethod(classQoreURLClassLoader, "loadResolveClass",
Globals.cpp:        "(Ljava/lang/String;)Ljava/lang/Class;");
Globals.cpp:    methodQoreURLClassLoaderSetContext = env.getMethod(classQoreURLClassLoader, "setContext", "()V");
Globals.cpp:    methodQoreURLClassLoaderGetProgramPtr = env.getStaticMethod(classQoreURLClassLoader, "getProgramPtr", "()J");
Globals.cpp:    methodQoreURLClassLoaderAddPendingClass = env.getMethod(classQoreURLClassLoader, "addPendingClass",
Globals.cpp:        "(Ljava/lang/String;[B)V");
Globals.cpp:    methodQoreURLClassLoaderDefineResolveClass = env.getMethod(classQoreURLClassLoader, "defineResolveClass",
Globals.cpp:        "(Ljava/lang/String;[BII)Ljava/lang/Class;");
Globals.cpp:    methodQoreURLClassLoaderGetResolveClass = env.getMethod(classQoreURLClassLoader, "getResolveClass",
Globals.cpp:        "(Ljava/lang/String;)Ljava/lang/Class;");
Globals.cpp:    methodQoreURLClassLoaderClearCache = env.getMethod(classQoreURLClassLoader, "clearCache", "()V");
Globals.cpp:    methodQoreURLClassLoaderDefineClassUnconditional = env.getMethod(classQoreURLClassLoader, "defineClassUnconditional",
Globals.cpp:        "(Ljava/lang/String;[B)Ljava/lang/Class;");
Globals.cpp:    methodQoreURLClassLoaderGetPtr = env.getMethod(classQoreURLClassLoader, "getPtr", "()J");
Globals.cpp:    methodQoreURLClassLoaderGetCurrent = env.getStaticMethod(classQoreURLClassLoader, "getCurrent",
Globals.cpp:        "()Lorg/qore/jni/QoreURLClassLoader;");
Globals.cpp:    methodQoreURLClassLoaderCheckInProgress = env.getMethod(classQoreURLClassLoader, "checkInProgress",
Globals.cpp:        "(Ljava/lang/String;)Z");
Globals.cpp:    methodQoreURLClassLoaderClearProgramPtr = env.getMethod(classQoreURLClassLoader, "clearProgramPtr", "()V");
Globals.cpp:    //printd(5, "defineQoreURLClassLoader() done\n");
Globals.cpp:}
Globals.cpp:bool Globals::init() {
Globals.cpp:    Env env(false);
Globals.cpp:    // check version first
Globals.cpp:    classSystem = env.findClass("java/lang/System").makeGlobal();
Globals.cpp:    methodSystemSetProperty = env.getStaticMethod(classSystem, "setProperty",
Globals.cpp:        "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
Globals.cpp:    methodSystemGetProperty = env.getStaticMethod(classSystem, "getProperty",
Globals.cpp:        "(Ljava/lang/String;)Ljava/lang/String;");
Globals.cpp:    check_java_version();
Globals.cpp:    // check for bootstrap initialization
Globals.cpp:    bool bootstrap = false;
Globals.cpp:    {
Globals.cpp:        jvalue jarg;
Globals.cpp:        LocalReference<jstring> jprop = env.newString(INIT_PROP_NAME);
Globals.cpp:        jarg.l = jprop;
Globals.cpp:        LocalReference<jstring> val = env.callObjectMethod(classSystem, methodSystemGetProperty, &jarg).as<jstring>();
Globals.cpp:        if (val) {
Globals.cpp:            Env::GetStringUtfChars strval(env, val);
Globals.cpp:            if (!strcmp(strval.c_str(), "true")) {
Globals.cpp:                bootstrap = true;
Globals.cpp:                printd(5, "Globals::init() %s = %s\n", INIT_PROP_NAME, strval.c_str());
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:        printd(5, "Globals::init() %sbootstrap init\n", bootstrap ? "" : "non-");
Globals.cpp:    }
Globals.cpp:    // get exception info second
Globals.cpp:    classThrowable = env.findClass("java/lang/Throwable").makeGlobal();
Globals.cpp:    methodThrowableGetMessage = env.getMethod(classThrowable, "getMessage", "()Ljava/lang/String;");
Globals.cpp:    methodThrowableGetStackTrace = env.getMethod(classThrowable, "getStackTrace", "()[Ljava/lang/StackTraceElement;");
Globals.cpp:    methodThrowableGetCause = env.getMethod(classThrowable, "getCause", "()Ljava/lang/Throwable;");
Globals.cpp:    classStackTraceElement = env.findClass("java/lang/StackTraceElement").makeGlobal();
Globals.cpp:    methodStackTraceElementGetClassName = env.getMethod(classStackTraceElement, "getClassName",
Globals.cpp:        "()Ljava/lang/String;");
Globals.cpp:    methodStackTraceElementGetFileName = env.getMethod(classStackTraceElement, "getFileName", "()Ljava/lang/String;");
Globals.cpp:    methodStackTraceElementGetLineNumber = env.getMethod(classStackTraceElement, "getLineNumber", "()I");
Globals.cpp:    methodStackTraceElementGetMethodName = env.getMethod(classStackTraceElement, "getMethodName",
Globals.cpp:        "()Ljava/lang/String;");
Globals.cpp:    methodStackTraceElementIsNativeMethod = env.getMethod(classStackTraceElement, "isNativeMethod", "()Z");
Globals.cpp:    classQoreExceptionWrapper = findDefineClass(env, "org.qore.jni.QoreExceptionWrapper", nullptr,
Globals.cpp:        java_org_qore_jni_QoreExceptionWrapper_class, java_org_qore_jni_QoreExceptionWrapper_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreExceptionWrapper, qoreExceptionWrapperNativeMethods, 2);
Globals.cpp:    ctorQoreExceptionWrapper = env.getMethod(classQoreExceptionWrapper, "<init>", "(J)V");
Globals.cpp:    methodQoreExceptionWrapperGet = env.getMethod(classQoreExceptionWrapper, "get", "()J");
Globals.cpp:    classQoreException = findDefineClass(env, "org.qore.jni.QoreException", nullptr,
Globals.cpp:        java_org_qore_jni_QoreException_class, java_org_qore_jni_QoreException_class_len).makeGlobal();
Globals.cpp:    methodQoreExceptionGetErr = env.getMethod(classQoreException, "getErr", "()Ljava/lang/String;");
Globals.cpp:    methodQoreExceptionGetDesc = env.getMethod(classQoreException, "getDesc", "()Ljava/lang/String;");
Globals.cpp:    methodQoreExceptionGetArg = env.getMethod(classQoreException, "getArg", "()Ljava/lang/Object;");
Globals.cpp:    // needed for exception handling
Globals.cpp:    classClass = env.findClass("java/lang/Class").makeGlobal();
Globals.cpp:    methodClassIsArray = env.getMethod(classClass, "isArray", "()Z");
Globals.cpp:    methodClassIsInterface = env.getMethod(classClass, "isInterface", "()Z");
Globals.cpp:    methodClassGetComponentType = env.getMethod(classClass, "getComponentType", "()Ljava/lang/Class;");
Globals.cpp:    methodClassGetClassLoader = env.getMethod(classClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
Globals.cpp:    methodClassGetName = env.getMethod(classClass, "getName", "()Ljava/lang/String;");
Globals.cpp:    methodClassGetDeclaredFields = env.getMethod(classClass, "getDeclaredFields", "()[Ljava/lang/reflect/Field;");
Globals.cpp:    methodClassGetSuperClass = env.getMethod(classClass, "getSuperclass", "()Ljava/lang/Class;");
Globals.cpp:    methodClassGetInterfaces = env.getMethod(classClass, "getInterfaces", "()[Ljava/lang/Class;");
Globals.cpp:    methodClassGetDeclaredConstructors = env.getMethod(classClass, "getDeclaredConstructors",
Globals.cpp:        "()[Ljava/lang/reflect/Constructor;");
Globals.cpp:    methodClassGetDeclaredConstructor = env.getMethod(classClass, "getDeclaredConstructor",
Globals.cpp:        "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;");
Globals.cpp:    methodClassGetModifiers = env.getMethod(classClass, "getModifiers", "()I");
Globals.cpp:    methodClassIsPrimitive = env.getMethod(classClass, "isPrimitive", "()Z");
Globals.cpp:    methodClassGetDeclaredMethods = env.getMethod(classClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
Globals.cpp:    methodClassGetCanonicalName = env.getMethod(classClass, "getCanonicalName", "()Ljava/lang/String;");
Globals.cpp:    methodClassGetDeclaredField = env.getMethod(classClass, "getDeclaredField",
Globals.cpp:        "(Ljava/lang/String;)Ljava/lang/reflect/Field;");
Globals.cpp:    methodClassIsAssignableFrom = env.getMethod(classClass, "isAssignableFrom", "(Ljava/lang/Class;)Z");
Globals.cpp:    methodClassGetMethod = env.getMethod(classClass, "getMethod",
Globals.cpp:        "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;");
Globals.cpp:    classClassLoader = env.findClass("java/lang/ClassLoader").makeGlobal();
Globals.cpp:    methodClassLoaderLoadClass = env.getMethod(classClassLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
Globals.cpp:    classQoreObjectBase = findDefineClass(env, "org.qore.jni.QoreObjectBase", nullptr,
Globals.cpp:        java_org_qore_jni_QoreObjectBase_class, java_org_qore_jni_QoreObjectBase_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreObjectBase, qoreObjectBaseNativeMethods,
Globals.cpp:        sizeof(qoreObjectBaseNativeMethods) / sizeof(JNINativeMethod));
Globals.cpp:    //printd(5, "QoreObjectBase: %p\n", (jclass)classQoreObjectBase);
Globals.cpp:    classQoreObject = findDefineClass(env, "org.qore.jni.QoreObject", nullptr, java_org_qore_jni_QoreObject_class,
Globals.cpp:        java_org_qore_jni_QoreObject_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreObject, qoreObjectNativeMethods,
Globals.cpp:        sizeof(qoreObjectNativeMethods) / sizeof(JNINativeMethod));
Globals.cpp:    ctorQoreObject = env.getMethod(classQoreObject, "<init>", "(J)V");
Globals.cpp:    classQoreJavaClassBase = findDefineClass(env, "org.qore.jni.QoreJavaClassBase", nullptr,
Globals.cpp:        java_org_qore_jni_QoreJavaClassBase_class, java_org_qore_jni_QoreJavaClassBase_class_len).makeGlobal();
Globals.cpp:    methodQoreObjectBaseGet = env.getMethod(classQoreObjectBase, "get", "()J");
Globals.cpp:    classQoreClosureMarker = findDefineClass(env, "org.qore.jni.QoreClosureMarker", nullptr,
Globals.cpp:        java_org_qore_jni_QoreClosureMarker_class, java_org_qore_jni_QoreClosureMarker_class_len).makeGlobal();
Globals.cpp:    classQoreClosureMarkerImpl = findDefineClass(env, "org.qore.jni.QoreClosureMarkerImpl", nullptr,
Globals.cpp:        java_org_qore_jni_QoreClosureMarkerImpl_class,
Globals.cpp:        java_org_qore_jni_QoreClosureMarkerImpl_class_len).makeGlobal();
Globals.cpp:    classQoreClosure = findDefineClass(env, "org.qore.jni.QoreClosure", nullptr, java_org_qore_jni_QoreClosure_class,
Globals.cpp:        java_org_qore_jni_QoreClosure_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreClosure, qoreClosureNativeMethods,
Globals.cpp:        sizeof(qoreClosureNativeMethods) / sizeof(JNINativeMethod));
Globals.cpp:    ctorQoreClosure = env.getMethod(classQoreClosure, "<init>", "(J)V");
Globals.cpp:    methodQoreClosureGet = env.getMethod(classQoreClosure, "get", "()J");
Globals.cpp:    classQoreObjectWrapper = findDefineClass(env, "org.qore.jni.QoreObjectWrapper", nullptr,
Globals.cpp:        java_org_qore_jni_QoreObjectWrapper_class, java_org_qore_jni_QoreObjectWrapper_class_len).makeGlobal();
Globals.cpp:    classQoreJavaObjectPtr = findDefineClass(env, "org.qore.jni.QoreJavaObjectPtr", nullptr,
Globals.cpp:        java_org_qore_jni_QoreJavaObjectPtr_class, java_org_qore_jni_QoreJavaObjectPtr_class_len).makeGlobal();
Globals.cpp:    ctorQoreJavaObjectPtr = env.getMethod(classQoreJavaObjectPtr, "<init>", "(J)V");
Globals.cpp:    classPrimitiveVoid = getPrimitiveClass(env, "java/lang/Void");
Globals.cpp:    classPrimitiveBoolean = getPrimitiveClass(env, "java/lang/Boolean");
Globals.cpp:    classPrimitiveByte = getPrimitiveClass(env, "java/lang/Byte");
Globals.cpp:    classPrimitiveChar = getPrimitiveClass(env, "java/lang/Character");
Globals.cpp:    classPrimitiveShort = getPrimitiveClass(env, "java/lang/Short");
Globals.cpp:    classPrimitiveInt = getPrimitiveClass(env, "java/lang/Integer");
Globals.cpp:    classPrimitiveLong = getPrimitiveClass(env, "java/lang/Long");
Globals.cpp:    classPrimitiveFloat = getPrimitiveClass(env, "java/lang/Float");
Globals.cpp:    classPrimitiveDouble = getPrimitiveClass(env, "java/lang/Double");
Globals.cpp:    arrayClassByte = env.findClass("[B").makeGlobal();
Globals.cpp:    arrayClassObject = env.findClass("[Ljava/lang/Object;").makeGlobal();
Globals.cpp:    classObject = env.findClass("java/lang/Object").makeGlobal();
Globals.cpp:    methodObjectClone = env.getMethod(classObject, "clone", "()Ljava/lang/Object;");
Globals.cpp:    methodObjectGetClass = env.getMethod(classObject, "getClass", "()Ljava/lang/Class;");
Globals.cpp:    methodObjectEquals = env.getMethod(classObject, "equals", "(Ljava/lang/Object;)Z");
Globals.cpp:    methodObjectHashCode = env.getMethod(classObject, "hashCode", "()I");
Globals.cpp:    classString = env.findClass("java/lang/String").makeGlobal();
Globals.cpp:    classField = env.findClass("java/lang/reflect/Field").makeGlobal();
Globals.cpp:    methodFieldGetType = env.getMethod(classField, "getType", "()Ljava/lang/Class;");
Globals.cpp:    methodFieldGetDeclaringClass = env.getMethod(classField, "getDeclaringClass", "()Ljava/lang/Class;");
Globals.cpp:    methodFieldGetModifiers = env.getMethod(classField, "getModifiers", "()I");
Globals.cpp:    methodFieldGetName = env.getMethod(classField, "getName", "()Ljava/lang/String;");
Globals.cpp:    methodFieldGet = env.getMethod(classField, "get", "(Ljava/lang/Object;)Ljava/lang/Object;");
Globals.cpp:    methodFieldGetLong = env.getMethod(classField, "getLong", "(Ljava/lang/Object;)J");
Globals.cpp:    methodFieldSetAccessible = env.getMethod(classField, "setAccessible", "(Z)V");
Globals.cpp:    classMethod = env.findClass("java/lang/reflect/Method").makeGlobal();
Globals.cpp:    methodMethodGetReturnType = env.getMethod(classMethod, "getReturnType", "()Ljava/lang/Class;");
Globals.cpp:    methodMethodGetParameterTypes = env.getMethod(classMethod, "getParameterTypes", "()[Ljava/lang/Class;");
Globals.cpp:    methodMethodGetDeclaringClass = env.getMethod(classMethod, "getDeclaringClass", "()Ljava/lang/Class;");
Globals.cpp:    methodMethodGetModifiers = env.getMethod(classMethod, "getModifiers", "()I");
Globals.cpp:    methodMethodIsVarArgs = env.getMethod(classMethod, "isVarArgs", "()Z");
Globals.cpp:    methodMethodGetName = env.getMethod(classMethod, "getName", "()Ljava/lang/String;");
Globals.cpp:    methodMethodToGenericString = env.getMethod(classMethod, "toGenericString", "()Ljava/lang/String;");
Globals.cpp:    classConstructor = env.findClass("java/lang/reflect/Constructor").makeGlobal();
Globals.cpp:    methodConstructorGetParameterTypes = env.getMethod(classConstructor, "getParameterTypes", "()[Ljava/lang/Class;");
Globals.cpp:    methodConstructorToString = env.getMethod(classConstructor, "toString", "()Ljava/lang/String;");
Globals.cpp:    methodConstructorGetModifiers = env.getMethod(classConstructor, "getModifiers", "()I");
Globals.cpp:    methodConstructorIsVarArgs = env.getMethod(classConstructor, "isVarArgs", "()Z");
Globals.cpp:    methodConstructorNewInstance = env.getMethod(classConstructor, "newInstance",
Globals.cpp:        "([Ljava/lang/Object;)Ljava/lang/Object;");
Globals.cpp:    classQoreInvocationHandler = findDefineClass(env, "org.qore.jni.QoreInvocationHandler", nullptr,
Globals.cpp:        java_org_qore_jni_QoreInvocationHandler_class, java_org_qore_jni_QoreInvocationHandler_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreInvocationHandler, invocationHandlerNativeMethods, 2);
Globals.cpp:    ctorQoreInvocationHandler = env.getMethod(classQoreInvocationHandler, "<init>", "(J)V");
Globals.cpp:    methodQoreInvocationHandlerDestroy = env.getMethod(classQoreInvocationHandler, "destroy", "()V");
Globals.cpp:    classQoreJavaApi = findDefineClass(env, "org.qore.jni.QoreJavaApi", nullptr, java_org_qore_jni_QoreJavaApi_class,
Globals.cpp:        java_org_qore_jni_QoreJavaApi_class_len).makeGlobal();
Globals.cpp:    env.registerNatives(classQoreJavaApi, qoreJavaApiNativeMethods,
Globals.cpp:        sizeof(qoreJavaApiNativeMethods) / sizeof(JNINativeMethod));
Globals.cpp:    methodQoreJavaApiGetStackTrace = env.getStaticMethod(classQoreJavaApi, "getStackTrace",
Globals.cpp:        "()[Ljava/lang/StackTraceElement;");
Globals.cpp:    classProxy = env.findClass("java/lang/reflect/Proxy").makeGlobal();
Globals.cpp:    methodProxyNewProxyInstance = env.getStaticMethod(classProxy, "newProxyInstance",
Globals.cpp:        "(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;");
Globals.cpp:    classThread = env.findClass("java/lang/Thread").makeGlobal();
Globals.cpp:    methodThreadCurrentThread = env.getStaticMethod(classThread, "currentThread", "()Ljava/lang/Thread;");
Globals.cpp:    methodThreadGetContextClassLoader = env.getMethod(classThread, "getContextClassLoader",
Globals.cpp:        "()Ljava/lang/ClassLoader;");
Globals.cpp:    classHashMap = env.findClass("java/util/HashMap").makeGlobal();
Globals.cpp:    classHash = findDefineClass(env, "org.qore.jni.Hash", nullptr, java_org_qore_jni_Hash_class,
Globals.cpp:        java_org_qore_jni_Hash_class_len).makeGlobal();
Globals.cpp:    ctorHash = env.getMethod(classHash, "<init>", "()V");
Globals.cpp:    methodHashPut = env.getMethod(classHash, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$1", nullptr, java_org_qore_jni_Hash_1_class,
Globals.cpp:        java_org_qore_jni_Hash_1_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$2", nullptr, java_org_qore_jni_Hash_2_class,
Globals.cpp:        java_org_qore_jni_Hash_2_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$3", nullptr, java_org_qore_jni_Hash_3_class,
Globals.cpp:        java_org_qore_jni_Hash_3_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$4", nullptr, java_org_qore_jni_Hash_4_class,
Globals.cpp:        java_org_qore_jni_Hash_4_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$5", nullptr, java_org_qore_jni_Hash_5_class,
Globals.cpp:        java_org_qore_jni_Hash_5_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$6", nullptr, java_org_qore_jni_Hash_6_class,
Globals.cpp:        java_org_qore_jni_Hash_6_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$7", nullptr, java_org_qore_jni_Hash_7_class,
Globals.cpp:        java_org_qore_jni_Hash_7_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$8", nullptr, java_org_qore_jni_Hash_8_class,
Globals.cpp:        java_org_qore_jni_Hash_8_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$9", nullptr, java_org_qore_jni_Hash_9_class,
Globals.cpp:        java_org_qore_jni_Hash_9_class_len).makeGlobal();
Globals.cpp:    findDefineClass(env, "org.qore.jni.Hash$10", nullptr, java_org_qore_jni_Hash_10_class,
Globals.cpp:        java_org_qore_jni_Hash_10_class_len).makeGlobal();
Globals.cpp:    classMap = env.findClass("java/util/Map").makeGlobal();
Globals.cpp:    methodMapEntrySet = env.getMethod(classMap, "entrySet", "()Ljava/util/Set;");
Globals.cpp:    classList = env.findClass("java/util/List").makeGlobal();
Globals.cpp:    methodListSize = env.getMethod(classList, "size", "()I");
Globals.cpp:    methodListGet = env.getMethod(classList, "get", "(I)Ljava/lang/Object;");
Globals.cpp:    classArrayList = env.findClass("java/util/ArrayList").makeGlobal();
Globals.cpp:    ctorArrayList = env.getMethod(classArrayList, "<init>", "()V");
Globals.cpp:    methodArrayListAdd = env.getMethod(classArrayList, "add", "(Ljava/lang/Object;)Z");
Globals.cpp:    methodArrayListGet = env.getMethod(classArrayList, "get", "(I)Ljava/lang/Object;");
Globals.cpp:    methodArrayListRemove = env.getMethod(classArrayList, "remove", "(I)Ljava/lang/Object;");
Globals.cpp:    methodArrayListSize = env.getMethod(classArrayList, "size", "()I");
Globals.cpp:    methodArrayListToArray = env.getMethod(classArrayList, "toArray", "()[Ljava/lang/Object;");
Globals.cpp:    classSet = env.findClass("java/util/Set").makeGlobal();
Globals.cpp:    methodSetIterator = env.getMethod(classSet, "iterator", "()Ljava/util/Iterator;");
Globals.cpp:    classEntry = env.findClass("java/util/Map$Entry").makeGlobal();
Globals.cpp:    methodEntryGetKey = env.getMethod(classEntry, "getKey", "()Ljava/lang/Object;");
Globals.cpp:    methodEntryGetValue = env.getMethod(classEntry, "getValue", "()Ljava/lang/Object;");
Globals.cpp:    classIterator = env.findClass("java/util/Iterator").makeGlobal();
Globals.cpp:    methodIteratorHasNext = env.getMethod(classIterator, "hasNext", "()Z");
Globals.cpp:    methodIteratorNext = env.getMethod(classIterator, "next", "()Ljava/lang/Object;");
Globals.cpp:    classZonedDateTime = env.findClass("java/time/ZonedDateTime").makeGlobal();
Globals.cpp:    methodZonedDateTimeParse = env.getStaticMethod(classZonedDateTime, "parse",
Globals.cpp:        "(Ljava/lang/CharSequence;)Ljava/time/ZonedDateTime;");
Globals.cpp:    methodZonedDateTimeToString = env.getMethod(classZonedDateTime, "toString", "()Ljava/lang/String;");
Globals.cpp:    classQoreRelativeTime = findDefineClass(env, "org.qore.jni.QoreRelativeTime", nullptr,
Globals.cpp:        java_org_qore_jni_QoreRelativeTime_class, java_org_qore_jni_QoreRelativeTime_class_len).makeGlobal();
Globals.cpp:    ctorQoreRelativeTime = env.getMethod(classQoreRelativeTime, "<init>", "(IIIIIII)V");
Globals.cpp:    fieldQoreRelativeTimeYear = env.getField(classQoreRelativeTime, "year", "I");
Globals.cpp:    fieldQoreRelativeTimeMonth = env.getField(classQoreRelativeTime, "month", "I");
Globals.cpp:    fieldQoreRelativeTimeDay = env.getField(classQoreRelativeTime, "day", "I");
Globals.cpp:    fieldQoreRelativeTimeHour = env.getField(classQoreRelativeTime, "hour", "I");
Globals.cpp:    fieldQoreRelativeTimeMinute = env.getField(classQoreRelativeTime, "minute", "I");
Globals.cpp:    fieldQoreRelativeTimeSecond = env.getField(classQoreRelativeTime, "second", "I");
Globals.cpp:    fieldQoreRelativeTimeUs = env.getField(classQoreRelativeTime, "us", "I");
Globals.cpp:    classBigDecimal = env.findClass("java/math/BigDecimal").makeGlobal();
Globals.cpp:    ctorBigDecimal = env.getMethod(classBigDecimal, "<init>", "(Ljava/lang/String;)V");
Globals.cpp:    methodBigDecimalToString = env.getMethod(classBigDecimal, "toString", "()Ljava/lang/String;");
Globals.cpp:    classArrays = env.findClass("java/util/Arrays").makeGlobal();
Globals.cpp:    methodArraysToString = env.getStaticMethod(classArrays, "toString", "([Ljava/lang/Object;)Ljava/lang/String;");
Globals.cpp:    methodArraysDeepToString = env.getStaticMethod(classArrays, "deepToString",
Globals.cpp:        "([Ljava/lang/Object;)Ljava/lang/String;");
Globals.cpp:    classBoolean = env.findClass("java/lang/Boolean").makeGlobal();
Globals.cpp:    ctorBoolean = env.getMethod(classBoolean, "<init>", "(Z)V");
Globals.cpp:    methodBooleanBooleanValue = env.getMethod(classBoolean, "booleanValue", "()Z");
Globals.cpp:    classInteger = env.findClass("java/lang/Integer").makeGlobal();
Globals.cpp:    ctorInteger = env.getMethod(classInteger, "<init>", "(I)V");
Globals.cpp:    methodIntegerIntValue = env.getMethod(classInteger, "intValue", "()I");
Globals.cpp:    classDouble = env.findClass("java/lang/Double").makeGlobal();
Globals.cpp:    ctorDouble = env.getMethod(classDouble, "<init>", "(D)V");
Globals.cpp:    methodDoubleDoubleValue = env.getMethod(classDouble, "doubleValue", "()D");
Globals.cpp:    classLong = env.findClass("java/lang/Long").makeGlobal();
Globals.cpp:    ctorLong = env.getMethod(classLong, "<init>", "(J)V");
Globals.cpp:    methodLongLongValue = env.getMethod(classLong, "longValue", "()J");
Globals.cpp:    classShort = env.findClass("java/lang/Short").makeGlobal();
Globals.cpp:    ctorShort = env.getMethod(classShort, "<init>", "(S)V");
Globals.cpp:    methodShortShortValue = env.getMethod(classShort, "shortValue", "()S");
Globals.cpp:    classByte = env.findClass("java/lang/Byte").makeGlobal();
Globals.cpp:    ctorByte = env.getMethod(classByte, "<init>", "(B)V");
Globals.cpp:    methodByteByteValue = env.getMethod(classByte, "byteValue", "()B");
Globals.cpp:    classFloat = env.findClass("java/lang/Float").makeGlobal();
Globals.cpp:    ctorFloat = env.getMethod(classFloat, "<init>", "(F)V");
Globals.cpp:    methodFloatFloatValue = env.getMethod(classFloat, "floatValue", "()F");
Globals.cpp:    classCharacter = env.findClass("java/lang/Character").makeGlobal();
Globals.cpp:    ctorCharacter = env.getMethod(classCharacter, "<init>", "(C)V");
Globals.cpp:    methodCharacterCharValue = env.getMethod(classCharacter, "charValue", "()C");
Globals.cpp:    classCharSequence = env.findClass("java/lang/CharSequence").makeGlobal();
Globals.cpp:    classProperties = env.findClass("java/util/Properties").makeGlobal();
Globals.cpp:    ctorProperties = env.getMethod(classProperties, "<init>", "()V");
Globals.cpp:    methodPropertiesSetProperty = env.getMethod(classProperties, "setProperty",
Globals.cpp:        "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;");
Globals.cpp:    classDriverManager = env.findClass("java/sql/DriverManager").makeGlobal();
Globals.cpp:    methodDriverManagerGetConnection = env.getStaticMethod(classDriverManager, "getConnection",
Globals.cpp:        "(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;");
Globals.cpp:    classConnection = env.findClass("java/sql/Connection").makeGlobal();
Globals.cpp:    methodConnectionClose = env.getMethod(classConnection, "close", "()V");
Globals.cpp:    methodConnectionCommit = env.getMethod(classConnection, "commit", "()V");
Globals.cpp:    methodConnectionRollback = env.getMethod(classConnection, "rollback", "()V");
Globals.cpp:    methodConnectionCreateArrayOf = env.getMethod(classConnection, "createArrayOf",
Globals.cpp:        "(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;");
Globals.cpp:    methodConnectionGetMetaData = env.getMethod(classConnection, "getMetaData", "()Ljava/sql/DatabaseMetaData;");
Globals.cpp:    methodConnectionPrepareStatement = env.getMethod(classConnection, "prepareStatement",
Globals.cpp:        "(Ljava/lang/String;)Ljava/sql/PreparedStatement;");
Globals.cpp:    methodConnectionPrepareStatementArray = env.getMethod(classConnection, "prepareStatement",
Globals.cpp:        "(Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/PreparedStatement;");
Globals.cpp:    methodConnectionSetAutoCommit = env.getMethod(classConnection, "setAutoCommit", "(Z)V");
Globals.cpp:    methodConnectionIsValid = env.getMethod(classConnection, "isValid", "(I)Z");
Globals.cpp:    classDatabaseMetaData = env.findClass("java/sql/DatabaseMetaData").makeGlobal();
Globals.cpp:    methodDatabaseMetaDataGetDatabaseMajorVersion = env.getMethod(classDatabaseMetaData, "getDatabaseMajorVersion",
Globals.cpp:        "()I");
Globals.cpp:    methodDatabaseMetaDataGetDatabaseMinorVersion = env.getMethod(classDatabaseMetaData, "getDatabaseMinorVersion",
Globals.cpp:        "()I");
Globals.cpp:    methodDatabaseMetaDataGetDatabaseProductName = env.getMethod(classDatabaseMetaData, "getDatabaseProductName",
Globals.cpp:        "()Ljava/lang/String;");
Globals.cpp:    methodDatabaseMetaDataGetDatabaseProductVersion = env.getMethod(classDatabaseMetaData,
Globals.cpp:        "getDatabaseProductVersion", "()Ljava/lang/String;");
Globals.cpp:    methodDatabaseMetaDataGetDriverMajorVersion = env.getMethod(classDatabaseMetaData, "getDriverMajorVersion",
Globals.cpp:        "()I");
Globals.cpp:    methodDatabaseMetaDataGetDriverMinorVersion = env.getMethod(classDatabaseMetaData, "getDriverMinorVersion",
Globals.cpp:        "()I");
Globals.cpp:    methodDatabaseMetaDataGetDriverName = env.getMethod(classDatabaseMetaData, "getDriverName",
Globals.cpp:        "()Ljava/lang/String;");
Globals.cpp:    methodDatabaseMetaDataGetDriverVersion = env.getMethod(classDatabaseMetaData, "getDriverVersion",
Globals.cpp:        "()Ljava/lang/String;");
Globals.cpp:    classPreparedStatement = env.findClass("java/sql/PreparedStatement").makeGlobal();
Globals.cpp:    methodPreparedStatementAddBatch = env.getMethod(classPreparedStatement, "addBatch", "()V");
Globals.cpp:    methodPreparedStatementClose = env.getMethod(classPreparedStatement, "close", "()V");
Globals.cpp:    methodPreparedStatementExecute = env.getMethod(classPreparedStatement, "execute", "()Z");
Globals.cpp:    methodPreparedStatementExecuteBatch = env.getMethod(classPreparedStatement, "executeBatch", "()[I");
Globals.cpp:    methodPreparedStatementGetResultSet = env.getMethod(classPreparedStatement, "getResultSet",
Globals.cpp:        "()Ljava/sql/ResultSet;");
Globals.cpp:    methodPreparedStatementGetMoreResults = env.getMethod(classPreparedStatement, "getMoreResults", "()Z");
Globals.cpp:    methodPreparedStatementGetUpdateCount = env.getMethod(classPreparedStatement, "getUpdateCount", "()I");
Globals.cpp:    methodPreparedStatementSetArray = env.getMethod(classPreparedStatement, "setArray", "(ILjava/sql/Array;)V");
Globals.cpp:    methodPreparedStatementSetBigDecimal = env.getMethod(classPreparedStatement, "setBigDecimal",
Globals.cpp:        "(ILjava/math/BigDecimal;)V");
Globals.cpp:    methodPreparedStatementSetBoolean = env.getMethod(classPreparedStatement, "setBoolean", "(IZ)V");
Globals.cpp:    methodPreparedStatementSetByte = env.getMethod(classPreparedStatement, "setByte", "(IB)V");
Globals.cpp:    methodPreparedStatementSetBytes = env.getMethod(classPreparedStatement, "setBytes", "(I[B)V");
Globals.cpp:    methodPreparedStatementSetDouble = env.getMethod(classPreparedStatement, "setDouble", "(ID)V");
Globals.cpp:    methodPreparedStatementSetInt = env.getMethod(classPreparedStatement, "setInt", "(II)V");
Globals.cpp:    methodPreparedStatementSetLong = env.getMethod(classPreparedStatement, "setLong", "(IJ)V");
Globals.cpp:    methodPreparedStatementSetShort = env.getMethod(classPreparedStatement, "setShort", "(IS)V");
Globals.cpp:    methodPreparedStatementSetNull = env.getMethod(classPreparedStatement, "setNull", "(II)V");
Globals.cpp:    methodPreparedStatementSetString = env.getMethod(classPreparedStatement, "setString", "(ILjava/lang/String;)V");
Globals.cpp:    methodPreparedStatementSetTimestamp = env.getMethod(classPreparedStatement, "setTimestamp",
Globals.cpp:        "(ILjava/sql/Timestamp;)V");
Globals.cpp:    classTimestamp = env.findClass("java/sql/Timestamp").makeGlobal();
Globals.cpp:    ctorTimestamp = env.getMethod(classTimestamp, "<init>", "(J)V");
Globals.cpp:    methodTimestampSetNanos = env.getMethod(classTimestamp, "setNanos", "(I)V");
Globals.cpp:    methodTimestampToString = env.getMethod(classTimestamp, "toString", "()Ljava/lang/String;");
Globals.cpp:    classDate = env.findClass("java/sql/Date").makeGlobal();
Globals.cpp:    methodDateToString = env.getMethod(classDate, "toString", "()Ljava/lang/String;");
Globals.cpp:    classTime = env.findClass("java/sql/Time").makeGlobal();
Globals.cpp:    methodTimeToString = env.getMethod(classTime, "toString", "()Ljava/lang/String;");
Globals.cpp:    classResultSet = env.findClass("java/sql/ResultSet").makeGlobal();
Globals.cpp:    methodResultSetClose = env.getMethod(classResultSet, "close", "()V");
Globals.cpp:    methodResultSetNext = env.getMethod(classResultSet, "next", "()Z");
Globals.cpp:    methodResultSetGetMetaData = env.getMethod(classResultSet, "getMetaData", "()Ljava/sql/ResultSetMetaData;");
Globals.cpp:    methodResultSetGetArray = env.getMethod(classResultSet, "getArray", "(I)Ljava/sql/Array;");
Globals.cpp:    methodResultSetGetObject = env.getMethod(classResultSet, "getObject", "(I)Ljava/lang/Object;");
Globals.cpp:    classResultSetMetaData = env.findClass("java/sql/ResultSetMetaData").makeGlobal();
Globals.cpp:    methodResultSetMetaDataGetColumnClassName = env.getMethod(classResultSetMetaData, "getColumnClassName",
Globals.cpp:        "(I)Ljava/lang/String;");
Globals.cpp:    methodResultSetMetaDataGetColumnCount = env.getMethod(classResultSetMetaData, "getColumnCount", "()I");
Globals.cpp:    methodResultSetMetaDataGetColumnLabel = env.getMethod(classResultSetMetaData, "getColumnLabel",
Globals.cpp:        "(I)Ljava/lang/String;");
Globals.cpp:    methodResultSetMetaDataGetColumnType = env.getMethod(classResultSetMetaData, "getColumnType",
Globals.cpp:        "(I)I");
Globals.cpp:    classArray = env.findClass("java/sql/Array").makeGlobal();
Globals.cpp:    methodArrayGetArray = env.getMethod(classArray, "getArray", "()Ljava/lang/Object;");
Globals.cpp:    classSQLException = env.findClass("java/sql/SQLException").makeGlobal();
Globals.cpp:    classServiceLoader = env.findClass("java/util/ServiceLoader").makeGlobal();
Globals.cpp:    methodServiceLoaderIterator = env.getMethod(classServiceLoader, "iterator",
Globals.cpp:        "()Ljava/util/Iterator;");
Globals.cpp:    classDriver = env.findClass("java/sql/Driver").makeGlobal();
Globals.cpp:    {
Globals.cpp:        LocalReference<jclass> classTypes = env.findClass("java/sql/Types");
Globals.cpp:        jfieldID field = env.getStaticField(classTypes, "NULL", "I");
Globals.cpp:        typeNull = env.getStaticIntField(classTypes, field);
Globals.cpp:        field = env.getStaticField(classTypes, "CHAR", "I");
Globals.cpp:        typeChar = env.getStaticIntField(classTypes, field);
Globals.cpp:    }
Globals.cpp:    assert(!classQoreURLClassLoader);
Globals.cpp:    defineQoreURLClassLoader(env);
Globals.cpp:    javaQoreClassField = env.newString(JAVA_QORE_CLASS_FIELD).makeGlobal();
Globals.cpp:    if (bootstrap) {
Globals.cpp:        classJavaClassBuilder = env.findClass("org/qore/jni/JavaClassBuilder").makeGlobal();
Globals.cpp:        // check if we are using QoreURLClassLoader as the system class loader
Globals.cpp:        LocalReference<jstring> jprop = env.newString("java.system.class.loader");
Globals.cpp:        std::vector<jvalue> jargs(1);
Globals.cpp:        jargs[0].l = jprop;
Globals.cpp:        LocalReference<jstring> str = env.callStaticObjectMethod(Globals::classSystem,
Globals.cpp:            Globals::methodSystemGetProperty, &jargs[0]).as<jstring>();
Globals.cpp:        if (!str) {
Globals.cpp:            bootstrap = false;
Globals.cpp:        } else {
Globals.cpp:            Env::GetStringUtfChars val(env, str);
Globals.cpp:            if (val != "org.qore.jni.QoreURLClassLoader") {
Globals.cpp:                bootstrap = false;
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:        // the bootstrap class loader will assign itself when it is created
Globals.cpp:    }
Globals.cpp:    if (!bootstrap) {
Globals.cpp:        printd(5, "Globals::init() creating syscl\n");
Globals.cpp:        jmethodID ctorQoreURLClassLoaderSys = env.getMethod(classQoreURLClassLoader, "<init>", "(J)V");
Globals.cpp:        jvalue jarg;
Globals.cpp:        jarg.j = (jlong)Globals::createJavaContextProgram();
Globals.cpp:        printd(5, "Global syscl pgm: %p\n", jarg.j);
Globals.cpp:        syscl = env.newObject(classQoreURLClassLoader, ctorQoreURLClassLoaderSys, &jarg).makeGlobal();
Globals.cpp:        {
Globals.cpp:            std::vector<jvalue> jargs(2);
Globals.cpp:            LocalReference<jbyteArray> jbyte_code =
Globals.cpp:                env.newByteArray(java_org_qore_jni_JavaClassBuilder_1_class_len).as<jbyteArray>();
Globals.cpp:            for (jsize i = 0; i < static_cast<jsize>(java_org_qore_jni_JavaClassBuilder_1_class_len); ++i) {
Globals.cpp:                env.setByteArrayElement(jbyte_code, i, ((const char*)java_org_qore_jni_JavaClassBuilder_1_class)[i]);
Globals.cpp:            }
Globals.cpp:            LocalReference<jstring> bname = env.newString("org.qore.jni.JavaClassBuilder$1");
Globals.cpp:            jargs[0].l = bname;
Globals.cpp:            jargs[1].l = jbyte_code;
Globals.cpp:            env.callVoidMethod(syscl, Globals::methodQoreURLClassLoaderAddPendingClass, &jargs[0]);
Globals.cpp:            env.callObjectMethod(syscl, Globals::methodQoreURLClassLoaderGetResolveClass,
Globals.cpp:                &jargs[0]).as<jclass>().makeGlobal();
Globals.cpp:        }
Globals.cpp:        {
Globals.cpp:            std::vector<jvalue> jargs(2);
Globals.cpp:            LocalReference<jbyteArray> jbyte_code =
Globals.cpp:                env.newByteArray(java_org_qore_jni_JavaClassBuilder_class_len).as<jbyteArray>();
Globals.cpp:            for (jsize i = 0; i < static_cast<jsize>(java_org_qore_jni_JavaClassBuilder_class_len); ++i) {
Globals.cpp:                env.setByteArrayElement(jbyte_code, i, ((const char*)java_org_qore_jni_JavaClassBuilder_class)[i]);
Globals.cpp:            }
Globals.cpp:            LocalReference<jstring> bname = env.newString("org.qore.jni.JavaClassBuilder");
Globals.cpp:            jargs[0].l = bname;
Globals.cpp:            jargs[1].l = jbyte_code;
Globals.cpp:            env.callVoidMethod(syscl, Globals::methodQoreURLClassLoaderAddPendingClass, &jargs[0]);
Globals.cpp:        }
Globals.cpp:        {
Globals.cpp:            std::vector<jvalue> jargs(1);
Globals.cpp:            LocalReference<jstring> bname = env.newString("org.qore.jni.JavaClassBuilder");
Globals.cpp:            jargs[0].l = bname;
Globals.cpp:            classJavaClassBuilder = env.callObjectMethod(syscl, Globals::methodQoreURLClassLoaderGetResolveClass,
Globals.cpp:                &jargs[0]).as<jclass>().makeGlobal();
Globals.cpp:#ifdef DEBUG
Globals.cpp:            LocalReference<jobject> cl = env.callObjectMethod(classJavaClassBuilder,
Globals.cpp:                Globals::methodClassGetClassLoader, nullptr);
Globals.cpp:            assert(env.isSameObject(cl, syscl));
Globals.cpp:#endif
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    env.registerNatives(classJavaClassBuilder, javaClassBuilderNativeMethods,
Globals.cpp:        sizeof(javaClassBuilderNativeMethods) / sizeof(JNINativeMethod));
Globals.cpp:    methodJavaClassBuilderGetClassBuilder = env.getStaticMethod(classJavaClassBuilder, "getClassBuilder",
Globals.cpp:        "(Ljava/lang/String;Ljava/lang/Class;Ljava/util/ArrayList;ZJ)" \
Globals.cpp:        "Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderGetFunctionConstantClassBuilder = env.getStaticMethod(classJavaClassBuilder,
Globals.cpp:        "getFunctionConstantClassBuilder",
Globals.cpp:        "(Ljava/lang/String;)Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderAddFunction = env.getStaticMethod(classJavaClassBuilder, "addFunction",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Ljava/lang/String;JJJ" \
Globals.cpp:        "Lnet/bytebuddy/description/type/TypeDefinition;Ljava/util/List;Z)" \
Globals.cpp:        "Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderAddStaticField = env.getStaticMethod(classJavaClassBuilder, "addStaticField",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Ljava/lang/String;I" \
Globals.cpp:        "Lnet/bytebuddy/description/type/TypeDescription;JLjava/util/ArrayList;)" \
Globals.cpp:        "Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderCreateStaticInitializer = env.getStaticMethod(classJavaClassBuilder,
Globals.cpp:        "createStaticInitializer",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Ljava/lang/String;JLjava/util/ArrayList;)" \
Globals.cpp:        "Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderAddConstructor = env.getStaticMethod(classJavaClassBuilder, "addConstructor",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Ljava/lang/Class;" \
Globals.cpp:            "JJILjava/util/List;Z)Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderAddNormalMethod = env.getStaticMethod(classJavaClassBuilder, "addNormalMethod",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Ljava/lang/String;JJI" \
Globals.cpp:        "Lnet/bytebuddy/description/type/TypeDefinition;Ljava/util/List;ZZ)" \
Globals.cpp:        "Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderAddStaticMethod = env.getStaticMethod(classJavaClassBuilder, "addStaticMethod",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Ljava/lang/String;JJJI" \
Globals.cpp:        "Lnet/bytebuddy/description/type/TypeDefinition;Ljava/util/List;Z)" \
Globals.cpp:        "Lnet/bytebuddy/dynamic/DynamicType$Builder;");
Globals.cpp:    methodJavaClassBuilderGetByteCodeFromBuilder = env.getStaticMethod(classJavaClassBuilder,
Globals.cpp:        "getByteCodeFromBuilder",
Globals.cpp:        "(Lnet/bytebuddy/dynamic/DynamicType$Builder;Lorg/qore/jni/QoreURLClassLoader;)[B");
Globals.cpp:    methodJavaClassBuilderGetTypeDescriptionCls = env.getStaticMethod(classJavaClassBuilder, "getTypeDescription",
Globals.cpp:        "(Ljava/lang/Class;)Lnet/bytebuddy/description/type/TypeDescription;");
Globals.cpp:    methodJavaClassBuilderGetTypeDescriptionStr = env.getStaticMethod(classJavaClassBuilder, "getTypeDescription",
Globals.cpp:        "(Ljava/lang/String;)Lnet/bytebuddy/description/type/TypeDescription;");
Globals.cpp:    methodJavaClassBuilderFindBaseClassMethodConflict = env.getStaticMethod(classJavaClassBuilder,
Globals.cpp:        "findBaseClassMethodConflict", "(Ljava/lang/Class;Ljava/lang/String;Ljava/util/List;Z)Z");
Globals.cpp:    classGraphicsEnvironment = env.findClass("java/awt/GraphicsEnvironment").makeGlobal();;
Globals.cpp:    methodGraphicsEnvironmentIsHeadless = env.getStaticMethod(classGraphicsEnvironment, "isHeadless", "()Z");
Globals.cpp:    return bootstrap;
Globals.cpp:}
Globals.cpp:void Globals::cleanup() {
Globals.cpp:    // delete classes
Globals.cpp:    classThrowable = nullptr;
Globals.cpp:    classStackTraceElement = nullptr;
Globals.cpp:    classPrimitiveVoid = nullptr;
Globals.cpp:    classPrimitiveBoolean = nullptr;
Globals.cpp:    classPrimitiveByte = nullptr;
Globals.cpp:    classPrimitiveChar = nullptr;
Globals.cpp:    classPrimitiveShort = nullptr;
Globals.cpp:    classPrimitiveInt = nullptr;
Globals.cpp:    classPrimitiveLong = nullptr;
Globals.cpp:    classPrimitiveFloat = nullptr;
Globals.cpp:    classPrimitiveDouble = nullptr;
Globals.cpp:    arrayClassByte = nullptr;
Globals.cpp:    arrayClassObject = nullptr;
Globals.cpp:    classSystem = nullptr;
Globals.cpp:    classObject = nullptr;
Globals.cpp:    classClass = nullptr;
Globals.cpp:    classString = nullptr;
Globals.cpp:    classField = nullptr;
Globals.cpp:    classMethod = nullptr;
Globals.cpp:    classConstructor = nullptr;
Globals.cpp:    classQoreInvocationHandler = nullptr;
Globals.cpp:    classQoreExceptionWrapper = nullptr;
Globals.cpp:    classQoreException = nullptr;
Globals.cpp:    classQoreObjectBase = nullptr;
Globals.cpp:    classQoreJavaClassBase = nullptr;
Globals.cpp:    classQoreJavaObjectPtr = nullptr;
Globals.cpp:    classQoreObject = nullptr;
Globals.cpp:    classQoreClosure = nullptr;
Globals.cpp:    classQoreObjectWrapper = nullptr;
Globals.cpp:    classQoreClosureMarker = nullptr;
Globals.cpp:    classQoreClosureMarkerImpl = nullptr;
Globals.cpp:    classQoreJavaApi = nullptr;
Globals.cpp:    classProxy = nullptr;
Globals.cpp:    classClassLoader = nullptr;
Globals.cpp:    classQoreURLClassLoader = nullptr;
Globals.cpp:    classJavaClassBuilder = nullptr;
Globals.cpp:    classGraphicsEnvironment = nullptr;
Globals.cpp:    classThread = nullptr;
Globals.cpp:    classHashMap = nullptr;
Globals.cpp:    classHash = nullptr;
Globals.cpp:    classMap = nullptr;
Globals.cpp:    classList = nullptr;
Globals.cpp:    classArrayList = nullptr;
Globals.cpp:    classSet = nullptr;
Globals.cpp:    classEntry = nullptr;
Globals.cpp:    classIterator = nullptr;
Globals.cpp:    classZonedDateTime = nullptr;
Globals.cpp:    classQoreRelativeTime = nullptr;
Globals.cpp:    classBigDecimal = nullptr;
Globals.cpp:    classArrays = nullptr;
Globals.cpp:    classBoolean = nullptr;
Globals.cpp:    classInteger = nullptr;
Globals.cpp:    classLong = nullptr;
Globals.cpp:    classShort = nullptr;
Globals.cpp:    classByte = nullptr;
Globals.cpp:    classDouble = nullptr;
Globals.cpp:    classFloat = nullptr;
Globals.cpp:    classCharacter = nullptr;
Globals.cpp:    classCharSequence = nullptr;
Globals.cpp:    classBooleanWrapper = nullptr;
Globals.cpp:    classProperties = nullptr;
Globals.cpp:    classDriverManager = nullptr;
Globals.cpp:    classConnection = nullptr;
Globals.cpp:    classDatabaseMetaData = nullptr;
Globals.cpp:    classPreparedStatement = nullptr;
Globals.cpp:    classTimestamp = nullptr;
Globals.cpp:    classDate = nullptr;
Globals.cpp:    classTime = nullptr;
Globals.cpp:    classResultSet = nullptr;
Globals.cpp:    classResultSetMetaData = nullptr;
Globals.cpp:    classArray = nullptr;
Globals.cpp:    classSQLException = nullptr;
Globals.cpp:    classServiceLoader = nullptr;
Globals.cpp:    classDriver = nullptr;
Globals.cpp:    javaQoreClassField = nullptr;
Globals.cpp:}
Globals.cpp:GlobalReference<jclass> Globals::getQoreJavaClassBase(Env& env, jobject classLoader) {
Globals.cpp:    return Globals::findDefineClass(env, "org.qore.jni.QoreJavaClassBase", classLoader,
Globals.cpp:        java_org_qore_jni_QoreJavaClassBase_class, java_org_qore_jni_QoreJavaClassBase_class_len).makeGlobal();
Globals.cpp:}
Globals.cpp:Type Globals::getType(jclass cls) {
Globals.cpp:    Env env;
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveInt)) {
Globals.cpp:        return Type::Int;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveVoid)) {
Globals.cpp:        return Type::Void;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveBoolean)) {
Globals.cpp:        return Type::Boolean;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveByte)) {
Globals.cpp:        return Type::Byte;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveChar)) {
Globals.cpp:        return Type::Char;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveShort)) {
Globals.cpp:        return Type::Short;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveLong)) {
Globals.cpp:        return Type::Long;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveFloat)) {
Globals.cpp:        return Type::Float;
Globals.cpp:    }
Globals.cpp:    if (env.isSameObject(cls, classPrimitiveDouble)) {
Globals.cpp:        return Type::Double;
Globals.cpp:    }
Globals.cpp:    return Type::Reference;
Globals.cpp:}
Globals.cpp:jlong Globals::getContextProgram(jobject new_syscl, bool& created) {
Globals.cpp:    created = false;
Globals.cpp:    if (!qph) {
Globals.cpp:        createJavaContextProgram();
Globals.cpp:        printd(5, "Globals::getContextProgram() new_sycl: %p syscl: %p pgm: %p\n", new_syscl, (jobject)syscl, **qph);
Globals.cpp:        if (new_syscl && !syscl) {
Globals.cpp:            syscl = GlobalReference<jobject>::fromLocal(new_syscl);
Globals.cpp:            created = true;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    return reinterpret_cast<jlong>(**qph);
Globals.cpp:}
Globals.cpp:QoreProgram* Globals::createJavaContextProgram() {
Globals.cpp:    if (!qph) {
Globals.cpp:        try {
Globals.cpp:            // create global QoreProgram object
Globals.cpp:            qph.reset(new QoreProgramHelper(PO_NEW_STYLE, global_xsink));
Globals.cpp:            QoreNamespace* jnins = qjcm.getJniNs().copy();
Globals.cpp:            RootQoreNamespace* rns = (*qph)->getRootNS();
Globals.cpp:            rns->addNamespace(jnins);
Globals.cpp:            (*qph)->setExternalData("jni", new JniExternalProgramData(jnins, **qph));
Globals.cpp:            (*qph)->setScriptPath("Qore jni module global Program context");
Globals.cpp:            printd(5, "Globals::createJavaContextProgram() created %p\n", **qph);
Globals.cpp:        } catch (jni::JavaException& e) {
Globals.cpp:#ifdef DEBUG
Globals.cpp:            SimpleRefHolder<QoreStringNode> err(e.toString());
Globals.cpp:            printd(5, "Globals::createJavaContextProgram(): %s\n", err->c_str());
Globals.cpp:#endif
Globals.cpp:            qph.reset();
Globals.cpp:            throw;
Globals.cpp:        } catch (...) {
Globals.cpp:            qph.reset();
Globals.cpp:            throw;
Globals.cpp:        }
Globals.cpp:    }
Globals.cpp:    printd(5, "Globals::createJavaContextProgram() pgm: %p jpc: %p\n", **qph, (**qph)->getExternalData("jni"));
Globals.cpp:    assert((**qph)->getExternalData("jni"));
Globals.cpp:    return **qph;
Globals.cpp:}
Globals.cpp:QoreProgram* Globals::getJavaContextProgram() {
Globals.cpp:    QoreProgram* rv = qph ? **qph : nullptr;
Globals.cpp:    if (rv) {
Globals.cpp:        return rv;
Globals.cpp:    }
Globals.cpp:    static QoreThreadLock jcl;
Globals.cpp:    AutoLocker al(jcl);
Globals.cpp:    return createJavaContextProgram();
Globals.cpp:}
Globals.cpp:QoreJniStackLocationHelper::QoreJniStackLocationHelper() {
Globals.cpp:}
Globals.cpp:const std::string& QoreJniStackLocationHelper::getCallName() const {
Globals.cpp:    if (tid != q_gettid()) {
Globals.cpp:        return jni_no_call_name;
Globals.cpp:    }
Globals.cpp:    checkInit();
Globals.cpp:    assert((unsigned)current < size());
Globals.cpp:    //printd(5, "QoreJniStackLocationHelper::getCallName() this: %p %d/%d '%s'\n", this, (int)current, (int)size,
Globals.cpp:    //    stack_call[current].c_str());
Globals.cpp:    return stack_call[current];
Globals.cpp:}
Globals.cpp:qore_call_t QoreJniStackLocationHelper::getCallType() const {
Globals.cpp:    if (tid != q_gettid()) {
Globals.cpp:        return CT_BUILTIN;
Globals.cpp:    }
Globals.cpp:    checkInit();
Globals.cpp:    assert((unsigned)current < size());
Globals.cpp:    return stack_native[current] ? CT_BUILTIN : CT_USER;
Globals.cpp:}
Globals.cpp:const QoreProgramLocation& QoreJniStackLocationHelper::getLocation() const {
Globals.cpp:    if (tid != q_gettid()) {
Globals.cpp:        return jni_loc_builtin.get();
Globals.cpp:    }
Globals.cpp:    checkInit();
Globals.cpp:    assert((unsigned)current < size());
Globals.cpp:    //printd(5, "QoreJniStackLocationHelper::getLocation() %s:%d (%s)\n", stack_loc[current].getFile(), stack_loc[current].getStartLine());
Globals.cpp:    return stack_loc[current].get();
Globals.cpp:}
Globals.cpp:const QoreStackLocation* QoreJniStackLocationHelper::getNext() const {
Globals.cpp:    if (tid != q_gettid()) {
Globals.cpp:        return stack_next;
Globals.cpp:    }
Globals.cpp:    checkInit();
Globals.cpp:    assert((unsigned)current < size());
Globals.cpp:    // issue #3169: reset the pointer after iterating all the information in the stack
Globals.cpp:    // the exception stack can be iterated multiple times
Globals.cpp:    ++current;
Globals.cpp:    if ((unsigned)current < size()) {
Globals.cpp:        return this;
Globals.cpp:    }
Globals.cpp:    current = 0;
Globals.cpp:    return stack_next;
Globals.cpp:}
Globals.cpp:void QoreJniStackLocationHelper::checkInit() const {
Globals.cpp:    assert(tid == q_gettid());
Globals.cpp:    if (init) {
Globals.cpp:        return;
Globals.cpp:    }
Globals.cpp:    init = true;
Globals.cpp:    Env env;
Globals.cpp:    try {
Globals.cpp:        LocalReference<jobjectArray> jstack = env.callStaticObjectMethod(Globals::classQoreJavaApi,
Globals.cpp:            Globals::methodQoreJavaApiGetStackTrace, nullptr).as<jobjectArray>();
Globals.cpp:        if (jstack) {
Globals.cpp:            jsize len = env.getArrayLength(jstack);
Globals.cpp:            stack_loc.reserve(len);
Globals.cpp:            stack_native.reserve(len);
Globals.cpp:            stack_call.reserve(len);
Globals.cpp:            for (jsize i = 0; i < len; ++i) {
Globals.cpp:                LocalReference<jobject> jste = env.getObjectArrayElement(jstack, i);
Globals.cpp:                LocalReference<jstring> jcls = env.callObjectMethod(jste, Globals::methodStackTraceElementGetClassName, nullptr).as<jstring>();
Globals.cpp:                jni::Env::GetStringUtfChars cname(env, jcls);
Globals.cpp:                LocalReference<jstring> jmethod = env.callObjectMethod(jste, Globals::methodStackTraceElementGetMethodName, nullptr).as<jstring>();
Globals.cpp:                jni::Env::GetStringUtfChars mname(env, jmethod);
Globals.cpp:                LocalReference<jstring> jfilename = env.callObjectMethod(jste, Globals::methodStackTraceElementGetFileName, nullptr).as<jstring>();
Globals.cpp:                jni::Env::GetStringUtfChars file(env, jfilename);
Globals.cpp:                jint line = env.callIntMethod(jste, Globals::methodStackTraceElementGetLineNumber, nullptr);
Globals.cpp:                jboolean native = env.callBooleanMethod(jste, Globals::methodStackTraceElementIsNativeMethod, nullptr);
Globals.cpp:                QoreStringMaker code("%s.%s", cname.c_str(), mname.c_str());
Globals.cpp:                QoreExternalProgramLocationWrapper loc(file.c_str(), line, line, nullptr, 0, "Java");
Globals.cpp:                //printd(5, "QoreJniStackLocationHelper::checkInit() %d/%d %s:%d %s::%s()\n", (int)i, (int)len,
Globals.cpp:                //    file.c_str(), line, cname.c_str(), mname.c_str());
Globals.cpp:                stack_loc.push_back(loc);
Globals.cpp:                stack_call.push_back(code.c_str());
Globals.cpp:                stack_native.push_back(native);
Globals.cpp:            }
Globals.cpp:        }
Globals.cpp:    } catch (jni::Exception& e) {
Globals.cpp:        e.ignore();
Globals.cpp:    }
Globals.cpp:    if (!size()) {
Globals.cpp:        stack_call.push_back(jni_no_call_name);
Globals.cpp:        stack_native.push_back(true);
Globals.cpp:        stack_loc.push_back(jni_loc_builtin);
Globals.cpp:    }
Globals.cpp:}
Globals.cpp:} // namespace jni
QoreJniPrivateData.h:/* -*- mode: c++; indent-tabs-mode: nil -*- */
QoreJniPrivateData.h:/*
QoreJniPrivateData.h:    QoreJniClassMap.h
QoreJniPrivateData.h:    Qore Programming Language JNI Module
QoreJniPrivateData.h:    Copyright (C) 2016 - 2023 Qore Technologies, s.r.o.
QoreJniPrivateData.h:    This library is free software; you can redistribute it and/or
QoreJniPrivateData.h:    modify it under the terms of the GNU Lesser General Public
QoreJniPrivateData.h:    License as published by the Free Software Foundation; either
QoreJniPrivateData.h:    version 2.1 of the License, or (at your option) any later version.
QoreJniPrivateData.h:    This library is distributed in the hope that it will be useful,
QoreJniPrivateData.h:    but WITHOUT ANY WARRANTY; without even the implied warranty of
QoreJniPrivateData.h:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
QoreJniPrivateData.h:    Lesser General Public License for more details.
QoreJniPrivateData.h:    You should have received a copy of the GNU Lesser General Public
QoreJniPrivateData.h:    License along with this library; if not, write to the Free Software
QoreJniPrivateData.h:    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
QoreJniPrivateData.h:*/
QoreJniPrivateData.h:#ifndef _QORE_JNI_QOREJNIPRIVATEDATA_H
QoreJniPrivateData.h:#define _QORE_JNI_QOREJNIPRIVATEDATA_H
QoreJniPrivateData.h:#include "GlobalReference.h"
QoreJniPrivateData.h:#include "LocalReference.h"
QoreJniPrivateData.h:namespace jni {
QoreJniPrivateData.h:class QoreJniPrivateData : public AbstractPrivateData {
QoreJniPrivateData.h:public:
QoreJniPrivateData.h:   DLLLOCAL QoreJniPrivateData(jobject n_jobj) : jobj(GlobalReference<jobject>::fromLocal(n_jobj)) {
QoreJniPrivateData.h:   }
QoreJniPrivateData.h:   template <typename T>
QoreJniPrivateData.h:   DLLLOCAL T cast() const {
QoreJniPrivateData.h:      return jobj.cast<T>();
QoreJniPrivateData.h:   }
QoreJniPrivateData.h:   DLLLOCAL jobject getObject() const {
QoreJniPrivateData.h:      return jobj;
QoreJniPrivateData.h:   }
QoreJniPrivateData.h:   DLLLOCAL LocalReference<jobject> makeLocal() const {
QoreJniPrivateData.h:      return jobj.toLocal();
QoreJniPrivateData.h:   }
QoreJniPrivateData.h:protected:
QoreJniPrivateData.h:   GlobalReference<jobject> jobj;
QoreJniPrivateData.h:   DLLLOCAL QoreJniPrivateData() = default;
QoreJniPrivateData.h:};
QoreJniPrivateData.h:}
QoreJniPrivateData.h:#endif
