• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

evolvedbinary / elemental / 982

29 Apr 2025 08:34PM UTC coverage: 56.409% (+0.007%) from 56.402%
982

push

circleci

adamretter
[feature] Improve README.md badges

28451 of 55847 branches covered (50.94%)

Branch coverage included in aggregate %.

77468 of 131924 relevant lines covered (58.72%)

0.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

21.74
/extensions/modules/sql/src/main/java/org/exist/xquery/modules/sql/CloseConnectionFunction.java
1
/*
2
 * Elemental
3
 * Copyright (C) 2024, Evolved Binary Ltd
4
 *
5
 * admin@evolvedbinary.com
6
 * https://www.evolvedbinary.com | https://www.elemental.xyz
7
 *
8
 * Use of this software is governed by the Business Source License 1.1
9
 * included in the LICENSE file and at www.mariadb.com/bsl11.
10
 *
11
 * Change Date: 2028-04-27
12
 *
13
 * On the date above, in accordance with the Business Source License, use
14
 * of this software will be governed by the Apache License, Version 2.0.
15
 *
16
 * Additional Use Grant: Production use of the Licensed Work for a permitted
17
 * purpose. A Permitted Purpose is any purpose other than a Competing Use.
18
 * A Competing Use means making the Software available to others in a commercial
19
 * product or service that: substitutes for the Software; substitutes for any
20
 * other product or service we offer using the Software that exists as of the
21
 * date we make the Software available; or offers the same or substantially
22
 * similar functionality as the Software.
23
 */
24
package org.exist.xquery.modules.sql;
25

26
import org.apache.logging.log4j.LogManager;
27
import org.apache.logging.log4j.Logger;
28

29
import org.exist.dom.QName;
30
import org.exist.xquery.*;
31
import org.exist.xquery.value.*;
32

33
import java.sql.Connection;
34
import java.sql.SQLException;
35

36
import static org.exist.xquery.FunctionDSL.*;
37
import static org.exist.xquery.modules.sql.SQLModule.*;
38

39

40
/**
41
 * SQL Module Extension function for XQuery to explicitly close a connection.
42
 *
43
 * @author <a href="mailto:adam@evolvedbinary.com">Adam Retter</a>
44
 */
45
public class CloseConnectionFunction extends BasicFunction {
46

47
    private static final Logger LOGGER = LogManager.getLogger(GetConnectionFunction.class);
1✔
48

49
    private static final String FN_CLOSE_CONNECTION = "close-connection";
50
    public static final FunctionSignature FS_CLOSE_CONNECTION = functionSignature(
1✔
51
            FN_CLOSE_CONNECTION,
52
            "Closes a connection to a SQL Database, or if the connection was taken from a connection pool then it is returned to the pool",
53
            returns(Type.BOOLEAN, "true if the connection was closed, false if there was no such connection"),
1✔
54
            param("connection-handle", Type.LONG, "an xs:long representing the connection handle")
1✔
55
    );
56

57
    public CloseConnectionFunction(final XQueryContext context, final FunctionSignature signature) {
58
        super(context, signature);
×
59
    }
×
60

61
    /**
62
     * Evaluate the call to the xquery close-connection().
63
     *
64
     * @param args arguments from the close-connection() function call
65
     * @param contextSequence the Context Sequence to operate on (not used here internally!)
66
     *
67
     * @return An empty sequence
68
     *
69
     * @throws XPathException if an error occurs.
70
     */
71
    @Override
72
    public Sequence eval(final Sequence[] args, final Sequence contextSequence) throws XPathException {
73
        final IntegerValue connectionHandle = (IntegerValue) args[0].itemAt(0);
×
74
        final long connectionUid = connectionHandle.toJavaObject(long.class);
×
75

76
        final Connection connection = SQLModule.removeConnection(context, connectionUid);
×
77
        if (connection == null) {
×
78
            return BooleanValue.FALSE;
×
79
        }
80

81
        try {
82
            if (connection.isClosed()) {
×
83
                LOGGER.warn("sql:close-connection() Cannot close connection with handle: {}, as it is already closed!", connectionUid);
×
84
                return BooleanValue.FALSE;
×
85
            }
86

87
            connection.close();
×
88
            return BooleanValue.TRUE;
×
89

90
        } catch (final SQLException e) {
×
91
            throw new XPathException(this, "Unable to close connection with handle: " + connectionUid + ". " + e.getMessage());
×
92
        }
93
    }
94

95
    private static FunctionSignature functionSignature(final String name, final String description, final FunctionReturnSequenceType returnType, final FunctionParameterSequenceType... paramTypes) {
96
        return FunctionDSL.functionSignature(new QName(name, NAMESPACE_URI, PREFIX), description, returnType, paramTypes);
1✔
97
    }
98
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc