mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
enable tests with mssql-backend (#3136)
This commit is contained in:
parent
24a11fc8e8
commit
abc3260e75
25
test/README
25
test/README
@ -1,9 +1,12 @@
|
|||||||
You need MySQL, PostgreSQL and Redis up and running.
|
You need MySQL, MSSQL, PostgreSQL and Redis up and running.
|
||||||
MySQL should be accepting TCP connections on localhost:3306.
|
MySQL should be accepting TCP connections on localhost:3306.
|
||||||
|
MSSQL should be accepting TCP connections on localhost:1433.
|
||||||
PostgreSQL should be accepting TCP connections on localhost:5432.
|
PostgreSQL should be accepting TCP connections on localhost:5432.
|
||||||
Redis should be accepting TCP connections on localhost:6379.
|
Redis should be accepting TCP connections on localhost:6379.
|
||||||
MySQL and PostgreSQL should grant full access to user 'ejabberd_test' with
|
MySQL and PostgreSQL should grant full access to user 'ejabberd_test' with
|
||||||
password 'ejabberd_test' on database 'ejabberd_test'.
|
password 'ejabberd_test' on database 'ejabberd_test'.
|
||||||
|
MSSQL should grant full access to user 'ejabberd_test' with
|
||||||
|
password 'ejabberd_Test1' on database 'ejabberd_test'.
|
||||||
|
|
||||||
Here is a quick setup example:
|
Here is a quick setup example:
|
||||||
|
|
||||||
@ -24,3 +27,23 @@ mysql> CREATE USER 'ejabberd_test'@'localhost' IDENTIFIED BY 'ejabberd_test';
|
|||||||
mysql> CREATE DATABASE ejabberd_test;
|
mysql> CREATE DATABASE ejabberd_test;
|
||||||
mysql> GRANT ALL ON ejabberd_test.* TO 'ejabberd_test'@'localhost';
|
mysql> GRANT ALL ON ejabberd_test.* TO 'ejabberd_test'@'localhost';
|
||||||
$ mysql ejabberd_test < sql/mysql.sql
|
$ mysql ejabberd_test < sql/mysql.sql
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
MS SQL Server
|
||||||
|
-------------------
|
||||||
|
$ sqlcmd -U SA -P ejabberd_Test1 -S localhost
|
||||||
|
1> CREATE DATABASE ejabberd_test;
|
||||||
|
2> GO
|
||||||
|
1> USE ejabberd_test;
|
||||||
|
2> GO
|
||||||
|
Changed database context to 'ejabberd_test'.
|
||||||
|
1> CREATE LOGIN ejabberd_test WITH PASSWORD = 'ejabberd_Test1';
|
||||||
|
2> GO
|
||||||
|
1> CREATE USER ejabberd_test FOR LOGIN ejabberd_test;
|
||||||
|
2> GO
|
||||||
|
1> GRANT ALL TO ejabberd_test;
|
||||||
|
2> GO
|
||||||
|
The ALL permission is deprecated and maintained only for compatibility. It DOES NOT imply ALL permissions defined on the entity.
|
||||||
|
1> GRANT CONTROL ON SCHEMA ::dbo TO ejabberd_test;
|
||||||
|
2> GO
|
||||||
|
$ sqlcmd -U ejabberd_test -P ejabberd_Test1 -S localhost -d ejabberd_test -i sql/mssql.sql
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
You can start the Docker environment with Docker Compose, from ejabberd repository root.
|
You can start the Docker environment with Docker Compose, from ejabberd repository root.
|
||||||
|
|
||||||
The following command will launch MySQL, PostgreSQL, Redis and keep the console
|
The following command will launch MySQL, MSSQL, PostgreSQL, Redis and keep the console
|
||||||
attached to it.
|
attached to it.
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -15,6 +15,17 @@ mkdir test/docker/db/postgres/data
|
|||||||
|
|
||||||
You can stop all the databases with CTRL-C.
|
You can stop all the databases with CTRL-C.
|
||||||
|
|
||||||
|
## Creating database for MSSQL
|
||||||
|
|
||||||
|
The following commands will create the necessary login, user and database, will grant rights on the database in MSSQL and create the ejabberd schema:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker cp test/docker/db/mssql/initdb/initdb_mssql.sql ejabberd-mssql:/
|
||||||
|
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -i /initdb_mssql.sql
|
||||||
|
docker cp sql/mssql.sql ejabberd-mssql:/
|
||||||
|
docker exec ejabberd-mssql /opt/mssql-tools/bin/sqlcmd -U SA -P ejabberd_Test1 -S localhost -i /mssql.sql
|
||||||
|
```
|
||||||
|
|
||||||
## Running tests
|
## Running tests
|
||||||
|
|
||||||
Before running the test, you can ensure there is no running instance of Erlang common test tool. You can run the following
|
Before running the test, you can ensure there is no running instance of Erlang common test tool. You can run the following
|
||||||
@ -43,4 +54,5 @@ If you want to clean the data, you can remove the data directories after the `do
|
|||||||
```
|
```
|
||||||
rm -rf test/docker/db/mysql/data
|
rm -rf test/docker/db/mysql/data
|
||||||
rm -rf test/docker/db/postgres/data
|
rm -rf test/docker/db/postgres/data
|
||||||
|
docker volume rm docker_mssqldata
|
||||||
```
|
```
|
||||||
|
23
test/docker/db/mssql/initdb/initdb_mssql.sql
Normal file
23
test/docker/db/mssql/initdb/initdb_mssql.sql
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
USE [master]
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF DB_ID('ejabberd_test') IS NOT NULL
|
||||||
|
set noexec on -- prevent creation when already exists
|
||||||
|
|
||||||
|
CREATE DATABASE ejabberd_test;
|
||||||
|
GO
|
||||||
|
|
||||||
|
USE ejabberd_test;
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE LOGIN ejabberd_test WITH PASSWORD = 'ejabberd_Test1';
|
||||||
|
GO
|
||||||
|
|
||||||
|
CREATE USER ejabberd_test FOR LOGIN ejabberd_test;
|
||||||
|
GO
|
||||||
|
|
||||||
|
GRANT ALL TO ejabberd_test;
|
||||||
|
GO
|
||||||
|
|
||||||
|
GRANT CONTROL ON SCHEMA ::dbo TO ejabberd_test;
|
||||||
|
GO
|
@ -17,6 +17,18 @@ services:
|
|||||||
MYSQL_USER: ejabberd_test
|
MYSQL_USER: ejabberd_test
|
||||||
MYSQL_PASSWORD: ejabberd_test
|
MYSQL_PASSWORD: ejabberd_test
|
||||||
|
|
||||||
|
mssql:
|
||||||
|
image: mcr.microsoft.com/mssql/server
|
||||||
|
container_name: ejabberd-mssql
|
||||||
|
volumes:
|
||||||
|
- mssqldata:/var/opt/mssql
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 1433:1433
|
||||||
|
environment:
|
||||||
|
ACCEPT_EULA: Y
|
||||||
|
SA_PASSWORD: ejabberd_Test1
|
||||||
|
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:latest
|
image: postgres:latest
|
||||||
container_name: ejabberd-postgres
|
container_name: ejabberd-postgres
|
||||||
@ -35,3 +47,6 @@ services:
|
|||||||
container_name: ejabberd-redis
|
container_name: ejabberd-redis
|
||||||
ports:
|
ports:
|
||||||
- 6379:6379
|
- 6379:6379
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mssqldata:
|
||||||
|
@ -77,6 +77,15 @@ init_per_group(Group, Config) ->
|
|||||||
do_init_per_group(Group, Config);
|
do_init_per_group(Group, Config);
|
||||||
Backends ->
|
Backends ->
|
||||||
%% Skipped backends that were not explicitely enabled
|
%% Skipped backends that were not explicitely enabled
|
||||||
|
case Group of
|
||||||
|
mssql ->
|
||||||
|
case lists:member(odbc, Backends) of
|
||||||
|
true ->
|
||||||
|
do_init_per_group(Group, Config);
|
||||||
|
false ->
|
||||||
|
{skip, {disabled_backend, Group}}
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
case lists:member(Group, Backends) of
|
case lists:member(Group, Backends) of
|
||||||
true ->
|
true ->
|
||||||
do_init_per_group(Group, Config);
|
do_init_per_group(Group, Config);
|
||||||
@ -84,6 +93,7 @@ init_per_group(Group, Config) ->
|
|||||||
{skip, {disabled_backend, Group}}
|
{skip, {disabled_backend, Group}}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
do_init_per_group(no_db, Config) ->
|
do_init_per_group(no_db, Config) ->
|
||||||
@ -104,6 +114,15 @@ do_init_per_group(mysql, Config) ->
|
|||||||
Err ->
|
Err ->
|
||||||
{skip, {mysql_not_available, Err}}
|
{skip, {mysql_not_available, Err}}
|
||||||
end;
|
end;
|
||||||
|
do_init_per_group(mssql, Config) ->
|
||||||
|
case catch ejabberd_sql:sql_query(?MSSQL_VHOST, [<<"select 1;">>]) of
|
||||||
|
{selected, _, _} ->
|
||||||
|
mod_muc:shutdown_rooms(?MSSQL_VHOST),
|
||||||
|
clear_sql_tables(mssql, ?config(base_dir, Config)),
|
||||||
|
set_opt(server, ?MSSQL_VHOST, Config);
|
||||||
|
Err ->
|
||||||
|
{skip, {mssql_not_available, Err}}
|
||||||
|
end;
|
||||||
do_init_per_group(pgsql, Config) ->
|
do_init_per_group(pgsql, Config) ->
|
||||||
case catch ejabberd_sql:sql_query(?PGSQL_VHOST, [<<"select 1;">>]) of
|
case catch ejabberd_sql:sql_query(?PGSQL_VHOST, [<<"select 1;">>]) of
|
||||||
{selected, _, _} ->
|
{selected, _, _} ->
|
||||||
@ -158,6 +177,8 @@ end_per_group(redis, _Config) ->
|
|||||||
ok;
|
ok;
|
||||||
end_per_group(mysql, _Config) ->
|
end_per_group(mysql, _Config) ->
|
||||||
ok;
|
ok;
|
||||||
|
end_per_group(mssql, _Config) ->
|
||||||
|
ok;
|
||||||
end_per_group(pgsql, _Config) ->
|
end_per_group(pgsql, _Config) ->
|
||||||
ok;
|
ok;
|
||||||
end_per_group(sqlite, _Config) ->
|
end_per_group(sqlite, _Config) ->
|
||||||
@ -486,6 +507,7 @@ groups() ->
|
|||||||
{mnesia, [sequence], db_tests(mnesia)},
|
{mnesia, [sequence], db_tests(mnesia)},
|
||||||
{redis, [sequence], db_tests(redis)},
|
{redis, [sequence], db_tests(redis)},
|
||||||
{mysql, [sequence], db_tests(mysql)},
|
{mysql, [sequence], db_tests(mysql)},
|
||||||
|
{mssql, [sequence], db_tests(mssql)},
|
||||||
{pgsql, [sequence], db_tests(pgsql)},
|
{pgsql, [sequence], db_tests(pgsql)},
|
||||||
{sqlite, [sequence], db_tests(sqlite)}].
|
{sqlite, [sequence], db_tests(sqlite)}].
|
||||||
|
|
||||||
@ -495,6 +517,7 @@ all() ->
|
|||||||
{group, mnesia},
|
{group, mnesia},
|
||||||
{group, redis},
|
{group, redis},
|
||||||
{group, mysql},
|
{group, mysql},
|
||||||
|
{group, mssql},
|
||||||
{group, pgsql},
|
{group, pgsql},
|
||||||
{group, sqlite},
|
{group, sqlite},
|
||||||
{group, extauth},
|
{group, extauth},
|
||||||
@ -1013,6 +1036,14 @@ clear_sql_tables(Type, BaseDir) ->
|
|||||||
"mysql.sql"
|
"mysql.sql"
|
||||||
end,
|
end,
|
||||||
{?MYSQL_VHOST, Path};
|
{?MYSQL_VHOST, Path};
|
||||||
|
mssql ->
|
||||||
|
Path = case ejabberd_sql:use_new_schema() of
|
||||||
|
true ->
|
||||||
|
"mssql.new.sql";
|
||||||
|
false ->
|
||||||
|
"mssql.sql"
|
||||||
|
end,
|
||||||
|
{?MSSQL_VHOST, Path};
|
||||||
pgsql ->
|
pgsql ->
|
||||||
Path = case ejabberd_sql:use_new_schema() of
|
Path = case ejabberd_sql:use_new_schema() of
|
||||||
true ->
|
true ->
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
{hosts, ["localhost",
|
{hosts, ["localhost",
|
||||||
"mnesia.localhost",
|
"mnesia.localhost",
|
||||||
"mysql.localhost",
|
"mysql.localhost",
|
||||||
|
"mssql.localhost",
|
||||||
"pgsql.localhost",
|
"pgsql.localhost",
|
||||||
"sqlite.localhost",
|
"sqlite.localhost",
|
||||||
"extauth.localhost",
|
"extauth.localhost",
|
||||||
@ -102,6 +103,27 @@
|
|||||||
{mod_roster, [{db_type, odbc}]},
|
{mod_roster, [{db_type, odbc}]},
|
||||||
{mod_vcard, [{db_type, odbc}]}]}
|
{mod_vcard, [{db_type, odbc}]}]}
|
||||||
]}.
|
]}.
|
||||||
|
{host_config, "mssql.localhost",
|
||||||
|
[{auth_method, odbc},
|
||||||
|
{odbc_pool_size, 1},
|
||||||
|
{odbc_server, {mssql, "localhost", "ejabberd_test",
|
||||||
|
"ejabberd_test", "ejabberd_Test1"}},
|
||||||
|
{{add, modules}, [{mod_announce, [{db_type, odbc}]},
|
||||||
|
{mod_blocking, [{db_type, odbc}]},
|
||||||
|
{mod_caps, [{db_type, odbc}]},
|
||||||
|
{mod_last, [{db_type, odbc}]},
|
||||||
|
{mod_muc, [{db_type, odbc}]},
|
||||||
|
{mod_offline, [{db_type, odbc}]},
|
||||||
|
{mod_privacy, [{db_type, odbc}]},
|
||||||
|
{mod_private, [{db_type, odbc}]},
|
||||||
|
{mod_pubsub, [{db_type, odbc},
|
||||||
|
{access_createnode, pubsub_createnode},
|
||||||
|
{ignore_pep_from_offline, true},
|
||||||
|
{last_item_cache, false},
|
||||||
|
{plugins, ["flat", "hometree", "pep"]}]},
|
||||||
|
{mod_roster, [{db_type, odbc}]},
|
||||||
|
{mod_vcard, [{db_type, odbc}]}]}
|
||||||
|
]}.
|
||||||
{host_config, "pgsql.localhost",
|
{host_config, "pgsql.localhost",
|
||||||
[{auth_method, odbc},
|
[{auth_method, odbc},
|
||||||
{odbc_pool_size, 1},
|
{odbc_pool_size, 1},
|
||||||
|
71
test/ejabberd_SUITE_data/ejabberd.mssql.yml
Normal file
71
test/ejabberd_SUITE_data/ejabberd.mssql.yml
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
define_macro:
|
||||||
|
MSSQL_CONFIG:
|
||||||
|
sql_username: MSSQL_USER
|
||||||
|
sql_type: mssql
|
||||||
|
sql_server: MSSQL_SERVER
|
||||||
|
sql_port: MSSQL_PORT
|
||||||
|
sql_pool_size: 1
|
||||||
|
sql_password: MSSQL_PASS
|
||||||
|
sql_database: MSSQL_DB
|
||||||
|
auth_method: sql
|
||||||
|
sm_db_type: sql
|
||||||
|
modules:
|
||||||
|
mod_announce:
|
||||||
|
db_type: sql
|
||||||
|
access: local
|
||||||
|
mod_blocking: []
|
||||||
|
mod_caps:
|
||||||
|
db_type: sql
|
||||||
|
mod_last:
|
||||||
|
db_type: sql
|
||||||
|
mod_muc:
|
||||||
|
db_type: sql
|
||||||
|
ram_db_type: sql
|
||||||
|
vcard: VCARD
|
||||||
|
mod_offline:
|
||||||
|
use_cache: true
|
||||||
|
db_type: sql
|
||||||
|
mod_privacy:
|
||||||
|
db_type: sql
|
||||||
|
mod_private:
|
||||||
|
db_type: sql
|
||||||
|
mod_pubsub:
|
||||||
|
db_type: sql
|
||||||
|
access_createnode: pubsub_createnode
|
||||||
|
ignore_pep_from_offline: true
|
||||||
|
last_item_cache: false
|
||||||
|
plugins:
|
||||||
|
- "flat"
|
||||||
|
- "pep"
|
||||||
|
vcard: VCARD
|
||||||
|
mod_roster:
|
||||||
|
versioning: true
|
||||||
|
store_current_id: true
|
||||||
|
db_type: sql
|
||||||
|
mod_mam:
|
||||||
|
db_type: sql
|
||||||
|
mod_vcard:
|
||||||
|
db_type: sql
|
||||||
|
vcard: VCARD
|
||||||
|
mod_vcard_xupdate: []
|
||||||
|
mod_adhoc: []
|
||||||
|
mod_configure: []
|
||||||
|
mod_disco: []
|
||||||
|
mod_ping: []
|
||||||
|
mod_proxy65: []
|
||||||
|
mod_push:
|
||||||
|
db_type: sql
|
||||||
|
include_body: false
|
||||||
|
mod_push_keepalive: []
|
||||||
|
mod_s2s_dialback: []
|
||||||
|
mod_stream_mgmt:
|
||||||
|
resume_timeout: 3
|
||||||
|
mod_legacy_auth: []
|
||||||
|
mod_register:
|
||||||
|
welcome_message:
|
||||||
|
subject: "Welcome!"
|
||||||
|
body: "Hi.
|
||||||
|
Welcome to this XMPP server."
|
||||||
|
mod_stats: []
|
||||||
|
mod_time: []
|
||||||
|
mod_version: []
|
@ -4,6 +4,7 @@ include_config_file:
|
|||||||
- ejabberd.ldap.yml
|
- ejabberd.ldap.yml
|
||||||
- ejabberd.mnesia.yml
|
- ejabberd.mnesia.yml
|
||||||
- ejabberd.mysql.yml
|
- ejabberd.mysql.yml
|
||||||
|
- ejabberd.mssql.yml
|
||||||
- ejabberd.pgsql.yml
|
- ejabberd.pgsql.yml
|
||||||
- ejabberd.redis.yml
|
- ejabberd.redis.yml
|
||||||
- ejabberd.sqlite.yml
|
- ejabberd.sqlite.yml
|
||||||
@ -12,6 +13,7 @@ host_config:
|
|||||||
pgsql.localhost: PGSQL_CONFIG
|
pgsql.localhost: PGSQL_CONFIG
|
||||||
sqlite.localhost: SQLITE_CONFIG
|
sqlite.localhost: SQLITE_CONFIG
|
||||||
mysql.localhost: MYSQL_CONFIG
|
mysql.localhost: MYSQL_CONFIG
|
||||||
|
mssql.localhost: MSSQL_CONFIG
|
||||||
mnesia.localhost: MNESIA_CONFIG
|
mnesia.localhost: MNESIA_CONFIG
|
||||||
redis.localhost: REDIS_CONFIG
|
redis.localhost: REDIS_CONFIG
|
||||||
ldap.localhost: LDAP_CONFIG
|
ldap.localhost: LDAP_CONFIG
|
||||||
@ -26,6 +28,7 @@ hosts:
|
|||||||
- mnesia.localhost
|
- mnesia.localhost
|
||||||
- redis.localhost
|
- redis.localhost
|
||||||
- mysql.localhost
|
- mysql.localhost
|
||||||
|
- mssql.localhost
|
||||||
- pgsql.localhost
|
- pgsql.localhost
|
||||||
- extauth.localhost
|
- extauth.localhost
|
||||||
- ldap.localhost
|
- ldap.localhost
|
||||||
|
@ -19,6 +19,11 @@ define_macro:
|
|||||||
MYSQL_PORT: @@mysql_port@@
|
MYSQL_PORT: @@mysql_port@@
|
||||||
MYSQL_PASS: "@@mysql_pass@@"
|
MYSQL_PASS: "@@mysql_pass@@"
|
||||||
MYSQL_DB: "@@mysql_db@@"
|
MYSQL_DB: "@@mysql_db@@"
|
||||||
|
MSSQL_USER: "@@mssql_user@@"
|
||||||
|
MSSQL_SERVER: "@@mssql_server@@"
|
||||||
|
MSSQL_PORT: @@mssql_port@@
|
||||||
|
MSSQL_PASS: "@@mssql_pass@@"
|
||||||
|
MSSQL_DB: "@@mssql_db@@"
|
||||||
PGSQL_USER: "@@pgsql_user@@"
|
PGSQL_USER: "@@pgsql_user@@"
|
||||||
PGSQL_SERVER: "@@pgsql_server@@"
|
PGSQL_SERVER: "@@pgsql_server@@"
|
||||||
PGSQL_PORT: @@pgsql_port@@
|
PGSQL_PORT: @@pgsql_port@@
|
||||||
|
@ -70,6 +70,11 @@ init_config(Config) ->
|
|||||||
{mysql_db, <<"ejabberd_test">>},
|
{mysql_db, <<"ejabberd_test">>},
|
||||||
{mysql_user, <<"ejabberd_test">>},
|
{mysql_user, <<"ejabberd_test">>},
|
||||||
{mysql_pass, <<"ejabberd_test">>},
|
{mysql_pass, <<"ejabberd_test">>},
|
||||||
|
{mssql_server, <<"localhost">>},
|
||||||
|
{mssql_port, 1433},
|
||||||
|
{mssql_db, <<"ejabberd_test">>},
|
||||||
|
{mssql_user, <<"ejabberd_test">>},
|
||||||
|
{mssql_pass, <<"ejabberd_Test1">>},
|
||||||
{pgsql_server, <<"localhost">>},
|
{pgsql_server, <<"localhost">>},
|
||||||
{pgsql_port, 5432},
|
{pgsql_port, 5432},
|
||||||
{pgsql_db, <<"ejabberd_test">>},
|
{pgsql_db, <<"ejabberd_test">>},
|
||||||
@ -140,6 +145,17 @@ copy_backend_configs(DataDir, CWD, Backends) ->
|
|||||||
Backend = list_to_atom(SBackend),
|
Backend = list_to_atom(SBackend),
|
||||||
Macro = list_to_atom(string:to_upper(SBackend) ++ "_CONFIG"),
|
Macro = list_to_atom(string:to_upper(SBackend) ++ "_CONFIG"),
|
||||||
Dst = filename:join([CWD, File]),
|
Dst = filename:join([CWD, File]),
|
||||||
|
case Backend of
|
||||||
|
mssql ->
|
||||||
|
case lists:member(odbc, Backends) of
|
||||||
|
true ->
|
||||||
|
{ok, _} = file:copy(Src, Dst);
|
||||||
|
false ->
|
||||||
|
ok = file:write_file(
|
||||||
|
Dst, fast_yaml:encode(
|
||||||
|
[{define_macro, [{Macro, []}]}]))
|
||||||
|
end;
|
||||||
|
_ ->
|
||||||
case lists:member(Backend, Backends) of
|
case lists:member(Backend, Backends) of
|
||||||
true ->
|
true ->
|
||||||
{ok, _} = file:copy(Src, Dst);
|
{ok, _} = file:copy(Src, Dst);
|
||||||
@ -147,6 +163,7 @@ copy_backend_configs(DataDir, CWD, Backends) ->
|
|||||||
ok = file:write_file(
|
ok = file:write_file(
|
||||||
Dst, fast_yaml:encode(
|
Dst, fast_yaml:encode(
|
||||||
[{define_macro, [{Macro, []}]}]))
|
[{define_macro, [{Macro, []}]}]))
|
||||||
|
end
|
||||||
end;
|
end;
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
|
@ -92,6 +92,7 @@
|
|||||||
-define(MNESIA_VHOST, <<"mnesia.localhost">>).
|
-define(MNESIA_VHOST, <<"mnesia.localhost">>).
|
||||||
-define(REDIS_VHOST, <<"redis.localhost">>).
|
-define(REDIS_VHOST, <<"redis.localhost">>).
|
||||||
-define(MYSQL_VHOST, <<"mysql.localhost">>).
|
-define(MYSQL_VHOST, <<"mysql.localhost">>).
|
||||||
|
-define(MSSQL_VHOST, <<"mssql.localhost">>).
|
||||||
-define(PGSQL_VHOST, <<"pgsql.localhost">>).
|
-define(PGSQL_VHOST, <<"pgsql.localhost">>).
|
||||||
-define(SQLITE_VHOST, <<"sqlite.localhost">>).
|
-define(SQLITE_VHOST, <<"sqlite.localhost">>).
|
||||||
-define(LDAP_VHOST, <<"ldap.localhost">>).
|
-define(LDAP_VHOST, <<"ldap.localhost">>).
|
||||||
@ -99,7 +100,7 @@
|
|||||||
-define(S2S_VHOST, <<"s2s.localhost">>).
|
-define(S2S_VHOST, <<"s2s.localhost">>).
|
||||||
-define(UPLOAD_VHOST, <<"upload.localhost">>).
|
-define(UPLOAD_VHOST, <<"upload.localhost">>).
|
||||||
|
|
||||||
-define(BACKENDS, [mnesia, redis, mysql, pgsql, sqlite, ldap, extauth]).
|
-define(BACKENDS, [mnesia, redis, mysql, mssql, odbc, pgsql, sqlite, ldap, extauth]).
|
||||||
|
|
||||||
insert(Val, N, Tuple) ->
|
insert(Val, N, Tuple) ->
|
||||||
L = tuple_to_list(Tuple),
|
L = tuple_to_list(Tuple),
|
||||||
|
Loading…
Reference in New Issue
Block a user