Merge "Fix Alembic upgrades." into 13

This commit is contained in:
zuul
2016-06-22 15:22:44 -05:00
committed by Gerrit Code Review
5 changed files with 35 additions and 3 deletions

View File

@@ -16,10 +16,8 @@ import sqlalchemy as sa
def upgrade():
op.add_column('ps_contacts', sa.Column('reg_server', sa.String(20)))
op.drop_constraint('id', 'ps_contacts', type_='unique')
op.create_unique_constraint('ps_contacts_uq', 'ps_contacts', ['id','reg_server'])
def downgrade():
op.drop_constraint('ps_contacts_uq', 'ps_contacts', type_='unique')
op.drop_column('ps_contacts', 'reg_server')
op.create_unique_constraint(None, 'ps_contacts', 'id')

View File

@@ -445,6 +445,28 @@ enum aco_option_type {
* {endcode}
*/
OPT_UINT_T,
/*! \brief Type for default option handler for bools (ast_true/ast_false)
* \note aco_option_register flags:
* non-zero : process via ast_true
* 0 : process via ast_false
* aco_option_register varargs:
* FLDSET macro with the field of type int. It is important to note that the field
* cannot be a bitfield. If bitfields are required, they must be set via a custom handler.
*
* This is exactly the same as OPT_BOOL_T. The only difference is that when
* translated to a string, OPT_BOOL_T becomes "true" or "false"; OPT_YESNO_T becomes
* "yes" or "no".
*
* Example:
* {code}
* struct test_item {
* int enabled;
* };
* aco_option_register(&cfg_info, "enabled", ACO_EXACT, my_types, "no", OPT_YESNO_T, 1, FLDSET(struct test_item, enabled));
* {endcode}
*/
OPT_YESNO_T,
};
/*! \brief A callback function for handling a particular option

View File

@@ -97,6 +97,7 @@ static char *aco_option_type_string[] = {
"IP Address", /* OPT_SOCKADDR_T, */
"String", /* OPT_STRINGFIELD_T, */
"Unsigned Integer", /* OPT_UINT_T, */
"Boolean", /* OPT_YESNO_T, */
};
void *aco_pending_config(struct aco_info *info)
@@ -139,6 +140,10 @@ static aco_option_handler ast_config_option_default_handler(enum aco_option_type
switch(type) {
case OPT_ACL_T: return acl_handler_fn;
case OPT_BOOL_T: return bool_handler_fn;
/* Reading from config files, BOOL and YESNO are handled exactly the
* same. Their difference is in how they are rendered to users
*/
case OPT_YESNO_T: return bool_handler_fn;
case OPT_BOOLFLAG_T: return boolflag_handler_fn;
case OPT_CHAR_ARRAY_T: return chararray_handler_fn;
case OPT_CODEC_T: return codec_handler_fn;

View File

@@ -290,6 +290,12 @@ static int bool_handler_fn(const void *obj, const intptr_t *args, char **buf)
return !(*buf = ast_strdup(*field ? "true" : "false")) ? -1 : 0;
}
static int yesno_handler_fn(const void *obj, const intptr_t *args, char **buf)
{
unsigned int *field = (unsigned int *)(obj + args[0]);
return !(*buf = ast_strdup(*field ? "yes" : "no")) ? -1 : 0;
}
static int sockaddr_handler_fn(const void *obj, const intptr_t *args, char **buf)
{
struct ast_sockaddr *field = (struct ast_sockaddr *)(obj + args[0]);
@@ -313,6 +319,7 @@ static sorcery_field_handler sorcery_field_default_handler(enum aco_option_type
{
switch(type) {
case OPT_BOOL_T: return bool_handler_fn;
case OPT_YESNO_T: return yesno_handler_fn;
case OPT_CHAR_ARRAY_T: return chararray_handler_fn;
case OPT_CODEC_T: return codec_handler_fn;
case OPT_DOUBLE_T: return double_handler_fn;

View File

@@ -1138,7 +1138,7 @@ int ast_sip_initialize_sorcery_location(void)
ast_sorcery_object_field_register(sorcery, "contact", "qualify_frequency", 0, OPT_UINT_T,
PARSE_IN_RANGE, FLDSET(struct ast_sip_contact, qualify_frequency), 0, 86400);
ast_sorcery_object_field_register(sorcery, "contact", "qualify_timeout", "3.0", OPT_DOUBLE_T, 0, FLDSET(struct ast_sip_contact, qualify_timeout));
ast_sorcery_object_field_register(sorcery, "contact", "authenticate_qualify", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_contact, authenticate_qualify));
ast_sorcery_object_field_register(sorcery, "contact", "authenticate_qualify", "no", OPT_YESNO_T, 1, FLDSET(struct ast_sip_contact, authenticate_qualify));
ast_sorcery_object_field_register(sorcery, "contact", "outbound_proxy", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, outbound_proxy));
ast_sorcery_object_field_register(sorcery, "contact", "user_agent", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, user_agent));
ast_sorcery_object_field_register(sorcery, "contact", "reg_server", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, reg_server));