### Example project's package.json that add sourcecode/loopback-connector-mysql library
```
{
"name": "testnpm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"loopback-connector-mysql": "git+ssh://git@git.sourcecode.co.th:1223/sourcecode/loopback-connector-mysql.git"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
```
# loopback-connector-mysql
[MySQL](https://www.mysql.com/) is a popular open-source relational database management system (RDBMS). The `loopback-connector-mysql` module provides the MySQL connector module for the LoopBack framework.
## Installation
In your application root directory, enter this command to install the connector:
```sh
npm install loopback-connector-mysql --save
```
This installs the module from npm and adds it as a dependency to the application's `package.json` file.
If you create a MySQL data source using the data source generator as described below, you don't have to do this, since the generator will run `npm install` for you.
## Creating a MySQL data source
Use the [Data source generator](http://loopback.io/doc/en/lb3/Data-source-generator.html) to add a MySQL data source to your application.
The generator will prompt for the database server hostname, port, and other settings
required to connect to a MySQL database. It will also run the `npm install` command above for you.
The entry in the application's `/server/datasources.json` will look like this:
```javascript
"mydb": {
"name": "mydb",
"connector": "mysql",
"host": "myserver",
"port": 3306,
"database": "mydb",
"password": "mypassword",
"user": "admin"
}
```
Edit `datasources.json` to add any other additional properties that you require.
### Properties
Property |
Type |
Description |
collation |
String |
Determines the charset for the connection. Default is utf8_general_ci. |
connector |
String |
Connector name, either “loopback-connector-mysql” or “mysql”. |
connectionLimit |
Number |
The maximum number of connections to create at once. Default is 10. |
database |
String |
Database name |
debug |
Boolean |
If true, turn on verbose mode to debug database queries and lifecycle. |
host |
String |
Database host name |
password |
String |
Password to connect to database |
port |
Number |
Database TCP port |
socketPath |
String |
The path to a unix domain socket to connect to. When used host and port are ignored. |
supportBigNumbers |
Boolean |
Enable this option to deal with big numbers (BIGINT and DECIMAL columns) in the database. Default is false. |
timeZone |
String |
The timezone used to store local dates. Default is ‘local’. |
url |
String |
Connection URL of form mysql://user:password@host/db . Overrides other connection settings. |
username |
String |
Username to connect to database |
**NOTE**: In addition to these properties, you can use additional parameters supported by [`node-mysql`](https://github.com/felixge/node-mysql).
## Type mappings
See [LoopBack types](http://loopback.io/doc/en/lb3/LoopBack-types.html) for details on LoopBack's data types.
### LoopBack to MySQL types
LoopBack Type |
MySQL Type |
String/JSON |
VARCHAR |
Text |
TEXT |
Number |
INT |
Date |
DATETIME |
Boolean |
TINYINT(1) |
GeoPoint object |
POINT |
Custom Enum type (See Enum below) |
ENUM |
### MySQL to LoopBack types
MySQL Type |
LoopBack Type |
CHAR |
String |
CHAR(1) |
Boolean |
VARCHAR TINYTEXT MEDIUMTEXT LONGTEXT TEXT ENUM SET |
String |
TINYBLOB MEDIUMBLOB LONGBLOB BLOB BINARY VARBINARY BIT |
Node.js Buffer object |
TINYINT SMALLINT INT MEDIUMINT YEAR FLOAT DOUBLE NUMERIC DECIMAL |
Number For FLOAT and DOUBLE, see Floating-point types.
For NUMERIC and DECIMAL, see Fixed-point exact value types
|
DATE TIMESTAMP DATETIME |
Date |
## Using the datatype field/column option with MySQL
Use the `mysql` model property to specify additional MySQL-specific properties for a LoopBack model.
For example:
{% include code-caption.html content="/common/models/model.json" %}
```javascript
"locationId":{
"type":"String",
"required":true,
"length":20,
"mysql":
{
"columnName":"LOCATION_ID",
"dataType":"VARCHAR",
"dataLength":20,
"nullable":"N"
}
}
```
You can also use the dataType column/property attribute to specify what MySQL column type to use for many loopback-datasource-juggler types.
The following type-dataType combinations are supported:
* Number
* integer
* tinyint
* smallint
* mediumint
* int
* bigint
Use the `limit` option to alter the display width. Example:
```javascript
{ userName : {
type: String,
dataType: 'char',
limit: 24
}
}
```
### Floating-point types
For Float and Double data types, use the `precision` and `scale` options to specify custom precision. Default is (16,8). For example:
```javascript
{ average :
{ type: Number,
dataType: 'float',
precision: 20,
scale: 4
}
}
```
### Fixed-point exact value types
For Decimal and Numeric types, use the `precision` and `scale` options to specify custom precision. Default is (9,2).
These aren't likely to function as true fixed-point.
Example:
```javascript
{ stdDev :
{ type: Number,
dataType: 'decimal',
precision: 12,
scale: 8
}
}
```
### Other types
Convert String / DataSource.Text / DataSource.JSON to the following MySQL types:
* varchar
* char
* text
* mediumtext
* tinytext
* longtext
Example:
```javascript
{ userName :
{ type: String,
dataType: 'char',
limit: 24
}
}
```
Example:
```javascript
{ biography :
{ type: String,
dataType: 'longtext'
}
}
```
Convert JSON Date types to datetime or timestamp
Example:
```javascript
{ startTime :
{ type: Date,
dataType: 'timestamp'
}
}
```
### Enum
Enums are special. Create an Enum using Enum factory:
```javascript
var MOOD = dataSource.EnumFactory('glad', 'sad', 'mad');
MOOD.SAD; // 'sad'
MOOD(2); // 'sad'
MOOD('SAD'); // 'sad'
MOOD('sad'); // 'sad'
{ mood: { type: MOOD }}
{ choice: { type: dataSource.EnumFactory('yes', 'no', 'maybe'), null: false }}
```
## Discovery and auto-migration
### Model discovery
The MySQL connector supports _model discovery_ that enables you to create LoopBack models
based on an existing database schema using the unified [database discovery API](http://apidocs.strongloop.com/loopback-datasource-juggler/#datasource-prototype-discoverandbuildmodels). For more information on discovery, see [Discovering models from relational databases](https://loopback.io/doc/en/lb3/Discovering-models-from-relational-databases.html).
### Auto-migratiion
The MySQL connector also supports _auto-migration_ that enables you to create a database schema
from LoopBack models using the [LoopBack automigrate method](http://apidocs.strongloop.com/loopback-datasource-juggler/#datasource-prototype-automigrate).
For more information on auto-migration, see [Creating a database schema from models](https://loopback.io/doc/en/lb3/Creating-a-database-schema-from-models.html) for more information.
Destroying models may result in errors due to foreign key integrity. First delete any related models first calling delete on models with relationships.
## Running tests
The tests in this repository are mainly integration tests, meaning you will need to run them using our preconfigured test server.
1. Ask a core developer for instructions on how to set up test server credentials on your machine
2. `npm test`