Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
cooperl22 authored and Maxime Rault committed Jun 23, 2017
1 parent dd6771f commit 0b0a2a5
Show file tree
Hide file tree
Showing 12 changed files with 351 additions and 423 deletions.
166 changes: 88 additions & 78 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@ Add the laravel-db2 Service Provider to your config in ``app/config/app.php``:

### Configuration

There are two ways to configure laravel-db2. You can choose the most convenient way for you. You can put your DB2 credentials into ``app/config/database.php`` (option 1) file or use package config file which you can be generated through command line by artisan (option 2).
There are two ways to configure laravel-db2. You can choose the most convenient way for you. You can put your DB2 credentials into ``app/config/database.php`` (option 1) file or use package config file which you can generate through command line by artisan (option 2).

Please check appropriate specific DSN parameters for your connection.
For instance here are the ODBC keywords for IBMi
https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_73/rzaik/connectkeywords.htm

#### Option 1: Configure DB2 using ``app/config/database.php`` file

Expand All @@ -57,97 +61,103 @@ Simply add this code at the end of your ``app/config/database.php`` file:
*/

'ibmi' => [
'driver' => 'odbc' / 'ibm' / 'odbczos',
'driverName' => '{IBM i Access ODBC Driver}' / '{iSeries Access ODBC Driver}',
// General settings
'host' => 'server',
'username' => '',
'password' => '',
//Server settings
'database' => 'WRKRDBDIRE entry',
'prefix' => '',
'schema' => 'default schema',
'port' => 50000,
'signon' => 3,
'ssl' => 0,
'commitMode' => 2,
'connectionType' => 0,
'defaultLibraries' => '',
'naming' => 0,
'unicodeSql' => 0,
// Format settings
'dateFormat' => 5,
'dateSeperator' => 0,
'decimal' => 0,
'timeFormat' => 0,
'timeSeparator' => 0,
// Performances settings
'blockFetch' => 1,
'blockSizeKB' => 32,
'allowDataCompression' => 1,
'concurrency' => 0,
'lazyClose' => 0,
'maxFieldLength' => 15360,
'prefetch' => 0,
'queryTimeout' => 1,
// Modules settings
'defaultPkgLibrary' => 'QGPL',
'defaultPackage' => 'A/DEFAULT(IBM),2,0,1,0',
'extendedDynamic' => 1,
// Diagnostic settings
'QAQQINILibrary' => '',
'sqDiagCode' => '',
// Sort settings
'languageId' => 'ENU',
'sortTable' => '',
'sortSequence' => 0,
'sortWeight' => 0,
'jobSort' => 0,
// Conversion settings
'allowUnsupportedChar' => 0,
'ccsid' => 1208,
'graphic' => 0,
'forceTranslation' => 0,
// Other settings
'allowProcCalls' => 0,
'DB2SqlStates' => 0,
'debug' => 0,
'trueAutoCommit' => 0,
'catalogOptions' => 3,
'libraryView' => 0,
'ODBCRemarks' => 0,
'searchPattern' => 1,
'translationDLL' => '',
'translationOption' => 0,
'maxTraceSize' => 0,
'multipleTraceFiles' => 1,
'trace' => 0,
'traceFilename' => '',
'extendedColInfo' => 0,
'options' => [
'driver' => 'db2_ibmi_odbc',
// or 'db2_ibmi_ibm' / 'db2_zos_odbc' / 'db2_expressc_odbc
'driverName' => '{IBM i Access ODBC Driver}',
// or '{iSeries Access ODBC Driver}' / '{IBM i Access ODBC Driver 64-bit}'
'host' => 'server',
'username' => '',
'password' => '',
'database' => 'WRKRDBDIRE entry',
'prefix' => '',
'schema' => 'default schema',
'port' => 50000,
'date_format' => 'Y-m-d H:i:s',
// or 'Y-m-d H:i:s.u' / 'Y-m-d-H.i.s.u'...
'odbc_keywords' => [
'SIGNON' => 3,
'SSL' => 0,
'CommitMode' => 2,
'ConnectionType' => 0,
'DefaultLibraries' => '',
'Naming' => 0,
'UNICODESQL' => 0,
'DateFormat' => 5,
'DateSeperator' => 0,
'Decimal' => 0,
'TimeFormat' => 0,
'TimeSeparator' => 0,
'TimestampFormat' => 0,
'ConvertDateTimeToChar' => 0,
'BLOCKFETCH' => 1,
'BlockSizeKB' => 32,
'AllowDataCompression' => 1,
'CONCURRENCY' => 0,
'LAZYCLOSE' => 0,
'MaxFieldLength' => 15360,
'PREFETCH' => 0,
'QUERYTIMEOUT' => 1,
'DefaultPkgLibrary' => 'QGPL',
'DefaultPackage' => 'A /DEFAULT(IBM),2,0,1,0',
'ExtendedDynamic' => 0,
'QAQQINILibrary' => '',
'SQDIAGCODE' => '',
'LANGUAGEID' => 'ENU',
'SORTTABLE' => '',
'SortSequence' => 0,
'SORTWEIGHT' => 0,
'AllowUnsupportedChar' => 0,
'CCSID' => 819,
'GRAPHIC' => 0,
'ForceTranslation' => 0,
'ALLOWPROCCALLS' => 0,
'DB2SQLSTATES' => 0,
'DEBUG' => 0,
'TRUEAUTOCOMMIT' => 0,
'CATALOGOPTIONS' => 3,
'LibraryView' => 0,
'ODBCRemarks' => 0,
'SEARCHPATTERN' => 1,
'TranslationDLL' => '',
'TranslationOption' => 0,
'MAXTRACESIZE' => 0,
'MultipleTraceFiles' => 1,
'TRACE' => 0,
'TRACEFILENAME' => '',
'ExtendedColInfo' => 0,
],
'options' => [
PDO::ATTR_CASE => PDO::CASE_LOWER,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_PERSISTENT => false
PDO::ATTR_PERSISTENT => false,
PDO::I5_ATTR_DBC_SYS_NAMING => false,
PDO::I5_ATTR_COMMIT => PDO::I5_TXN_NO_COMMIT,
PDO::I5_ATTR_JOB_SORT => false,
PDO::I5_ATTR_DBC_LIBL => '',
PDO::I5_ATTR_DBC_CURLIB => '',
]
],

```
driver setting is either 'odbc' for ODBC connection or 'ibm' for pdo_ibm connection
Then if driver is 'odbc', database must be set to ODBC connection name.
if driver is 'ibm', database must be set to IBMi database name (WRKRDBDIRE).
```
driver setting can be:
- 'db2_ibmi_odbc' for IBMi ODBC connection
- 'db2_ibmi_ibm' for IBMi PDO_IBM connection
- 'db2_zos_odbc' for zOS ODBC connection
- 'db2_expressc_odbc for Express-C ODBC connection

Then if driver is 'db2_*_odbc', database must be set to ODBC connection name.
if driver is 'db2_ibmi_ibm', database must be set to IBMi database name (WRKRDBDIRE).

#### Option 2: Configure DB2 using package config file

Run on the command line from the root of your project:

```
$ php artisan config:publish cooperl/laravel-db2
$ php artisan vendor:publish
```

Set your laravel-db2 credentials in ``app/config/packages/cooperl/laravel-db2/config.php``
Set your laravel-db2 credentials in ``app/config/db2.php``
the same way as above


## Usage

Consult the [Laravel framework documentation](http://laravel.com/docs).
35 changes: 35 additions & 0 deletions src/Connectors/DB2Connector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?php

namespace Cooperl\Database\DB2\Connectors;

use Illuminate\Database\Connectors\Connector;
use Illuminate\Database\Connectors\ConnectorInterface;

/**
* Class IBMConnector
*
* @package Cooperl\Database\DB2\Connectors
*/
class DB2Connector extends Connector implements ConnectorInterface
{
/**
* @param array $config
*
* @return \PDO
*/
public function connect(array $config)
{
$dsn = $this->getDsn($config);
$options = $this->getOptions($config);
$connection = $this->createConnection($dsn, $config, $options);

if (isset($config['schema'])) {
$schema = $config['schema'];

$connection->prepare('set schema ' . $schema)
->execute();
}

return $connection;
}
}
82 changes: 1 addition & 81 deletions src/Connectors/IBMConnector.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,93 +2,13 @@

namespace Cooperl\Database\DB2\Connectors;

use Illuminate\Database\Connectors\Connector;
use Illuminate\Database\Connectors\ConnectorInterface;

/**
* Class IBMConnector
*
* @package Cooperl\Database\DB2\Connectors
*/
class IBMConnector extends Connector implements ConnectorInterface
class IBMConnector extends DB2Connector
{
/**
* @param array $config
*
* @return \PDO
*/
public function connect(array $config)
{
$dsn = $this->getDsn($config);
$options = [
\PDO::I5_ATTR_DBC_SYS_NAMING => false,
\PDO::I5_ATTR_COMMIT => \PDO::I5_TXN_NO_COMMIT,
\PDO::I5_ATTR_JOB_SORT => false,
];

// Naming mode
switch ($config['naming']) {
case 1:
$options[\PDO::I5_ATTR_DBC_SYS_NAMING] = true;

break;
case 0:
default:
$options[\PDO::I5_ATTR_DBC_SYS_NAMING] = false;

break;
}

// Isolation mode
switch ($config['commitMode']) {
case 1:
$options[\PDO::I5_ATTR_COMMIT] = \PDO::I5_TXN_READ_COMMITTED;

break;
case 2:
$options[\PDO::I5_ATTR_COMMIT] = \PDO::I5_TXN_READ_UNCOMMITTED;

break;
case 3:
$options[\PDO::I5_ATTR_COMMIT] = \PDO::I5_TXN_REPEATABLE_READ;

break;
case 4:
$options[\PDO::I5_ATTR_COMMIT] = \PDO::I5_TXN_SERIALIZABLE;

break;
case 0:
default:
$options[PDO::I5_ATTR_COMMIT] = PDO::I5_TXN_NO_COMMIT;

break;
}

// Job sort mode
switch ($config['jobSort']) {
case 1:
$options[\PDO::I5_ATTR_DBC_SYS_NAMING] = true;

break;
case 0:
default:
$options[\PDO::I5_ATTR_DBC_SYS_NAMING] = false;

break;
}

$options = $this->getOptions($config) + $options;
$connection = $this->createConnection($dsn, $config, $options);

if (isset($config['schema'])) {
$schema = $config['schema'];

$connection->prepare("set schema $schema")->execute();
}

return $connection;
}

/**
* @param array $config
*
Expand Down
Loading

0 comments on commit 0b0a2a5

Please sign in to comment.