res_pjsip: Change suppress_moh_on_sendonly to OPT_BOOL_T

The suppress_moh_on_sendonly endpoint option should have been
defined as OPT_BOOL_T in pjsip_configuration.c and AST_BOOL_VALUES
in the alembic script instead of OPT_YESNO_T and YESNO_VALUES.

Also updated contrib/ast-db-manage/README.md to indicate that
AST_BOOL_VALUES should always be used and provided an example.

Resolves: #995
pull/1060/head
George Joseph 6 months ago
parent d443a960e2
commit 297559dc1e

@ -1,5 +1,4 @@
Asterisk Database Manager # Asterisk Database Manager
=========================
Asterisk includes optional database integration for a variety of features. Asterisk includes optional database integration for a variety of features.
The purpose of this effort is to assist in managing the database schema The purpose of this effort is to assist in managing the database schema
@ -17,11 +16,8 @@ repositories include:
Alembic uses SQLAlchemy, which has support for Alembic uses SQLAlchemy, which has support for
[many databases](http://docs.sqlalchemy.org/en/rel_0_8/dialects/index.html). [many databases](http://docs.sqlalchemy.org/en/rel_0_8/dialects/index.html).
IMPORTANT NOTE: This is brand new and the initial migrations are still subject
to change. Only use this for testing purposes for now.
Example Usage ## Example Usage
-------------
First, create an ini file that contains database connection details. For help First, create an ini file that contains database connection details. For help
with connection string details, see the with connection string details, see the
@ -50,16 +46,47 @@ to upgrade or downgrade to, as well.
$ alembic -c config.ini upgrade 4da0c5f79a9c $ alembic -c config.ini upgrade 4da0c5f79a9c
Offline Mode ## Offline Mode
------------
If you would like to just generate the SQL statements that would have been If you would like to just generate the SQL statements that would have been
executed, you can use alembic's offline mode. executed, you can use alembic's offline mode.
$ alembic -c config.ini upgrade head --sql $ alembic -c config.ini upgrade head --sql
Adding Database Migrations ## Adding Database Migrations
--------------------------
The best way to learn about how to add additional database migrations is to The best way to learn about how to add additional database migrations is to
refer to the [Alembic documentation](http://alembic.readthedocs.org). refer to the [Alembic documentation](http://alembic.readthedocs.org).
### Notes
* For boolean columns, always use the AST_BOOL_VALUES type.
Example:
```
from alembic import op
import sqlalchemy as sa
# This works for MySQL/MariaDB and others as well
from sqlalchemy.dialects.postgresql import ENUM
AST_BOOL_NAME = 'ast_bool_values'
AST_BOOL_VALUES = [ '0', '1',
'off', 'on',
'false', 'true',
'no', 'yes' ]
def upgrade():
# ast_bool_values have already been created, so use postgres enum object type
# to get around "already created" issue - works okay with MySQL/MariaDB and others.
ast_bool_values = ENUM(*AST_BOOL_VALUES, name=AST_BOOL_NAME, create_type=False)
op.add_column('ps_endpoints', sa.Column('suppress_moh_on_sendonly', ast_bool_values))
def downgrade():
if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_suppress_moh_on_sendonly_ast_bool_values', 'ps_endpoints')
op.drop_column('ps_endpoints', 'suppress_moh_on_sendonly')
```
Older scripts used YESNO_VALUES but that is no longer supported.

@ -14,17 +14,17 @@ from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.dialects.postgresql import ENUM
YESNO_NAME = 'yesno_values' AST_BOOL_NAME = 'ast_bool_values'
YESNO_VALUES = ['yes', 'no'] AST_BOOL_VALUES = [ '0', '1',
'off', 'on',
'false', 'true',
'no', 'yes' ]
def upgrade(): def upgrade():
yesno_values = ENUM(*YESNO_VALUES, name=YESNO_NAME, create_type=False) ast_bool_values = ENUM(*AST_BOOL_VALUES, name=AST_BOOL_NAME, create_type=False)
op.add_column('ps_endpoints', sa.Column('suppress_moh_on_sendonly', ast_bool_values))
op.add_column('ps_endpoints', sa.Column('suppress_moh_on_sendonly', yesno_values))
def downgrade(): def downgrade():
if op.get_context().bind.dialect.name == 'mssql': if op.get_context().bind.dialect.name == 'mssql':
op.drop_constraint('ck_ps_endpoints_suppress_moh_on_sendonly_yesno_values', 'ps_endpoints') op.drop_constraint('ck_ps_endpoints_suppress_moh_on_sendonly_ast_bool_values', 'ps_endpoints')
op.drop_column('ps_endpoints', 'suppress_moh_on_sendonly') op.drop_column('ps_endpoints', 'suppress_moh_on_sendonly')

@ -2300,7 +2300,7 @@ int ast_res_pjsip_initialize_configuration(void)
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_aoc", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, send_aoc)); ast_sorcery_object_field_register(sip_sorcery, "endpoint", "send_aoc", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, send_aoc));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "tenantid", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, tenantid)); ast_sorcery_object_field_register(sip_sorcery, "endpoint", "tenantid", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, tenantid));
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "suppress_moh_on_sendonly", ast_sorcery_object_field_register(sip_sorcery, "endpoint", "suppress_moh_on_sendonly",
"no", OPT_YESNO_T, 1, FLDSET(struct ast_sip_endpoint, suppress_moh_on_sendonly)); "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, suppress_moh_on_sendonly));
if (ast_sip_initialize_sorcery_transport()) { if (ast_sip_initialize_sorcery_transport()) {
ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n"); ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");

Loading…
Cancel
Save