class_docstr: This entity may change or be removed in a future release without warning.
  SQLAlchemy compliant backend store for tracking meta data for MLflow entities. MLflow
  supports the database dialects ``mysql``, ``mssql``, ``sqlite``, and ``postgresql``.
  As specified in the
  `SQLAlchemy docs <https://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls>`_ ,
  the database URI is expected in the format
  ``<dialect>+<driver>://<username>:<password>@<host>:<port>/<database>``. If you do not
  specify a driver, SQLAlchemy uses a dialect's default driver.
  
  This store interacts with SQL store using SQLAlchemy abstractions defined for MLflow entities.
  :py:class:`mlflow.store.model_registry.models.RegisteredModel` and
  :py:class:`mlflow.store.model_registry.models.ModelVersion`
docstr: Sorts a set of registered models based on their natural ordering and an overriding set
  of order_bys. Registered models are naturally ordered first by name ascending.
docstr_tok: ["Sorts","a","set","of","registered","models","based","on","their","natural","ordering","and","an","overriding","set","of","order_bys",".","Registered","models","are","naturally","ordered","first","by","name","ascending","."]
code: def _parse_search_registered_models_order_by(cls, order_by_list):
      """Sorts a set of registered models based on their natural ordering and an overriding set
      of order_bys. Registered models are naturally ordered first by name ascending.
      """
      clauses = []
      observed_order_by_clauses = set()
      if order_by_list:
          for order_by_clause in order_by_list:
              (
                  attribute_token,
                  ascending,
              ) = SearchUtils.parse_order_by_for_search_registered_models(
                  order_by_clause
              )
              if attribute_token == SqlRegisteredModel.name.key:
                  field = SqlRegisteredModel.name
              elif (
                  attribute_token
                  in SearchUtils.VALID_TIMESTAMP_ORDER_BY_KEYS
              ):
                  field = SqlRegisteredModel.last_updated_time
              else:
                  raise MlflowException(
                      f"Invalid order by key '{attribute_token}' specified."
                      + "Valid keys are "
                      + f"'{SearchUtils.RECOMMENDED_ORDER_BY_KEYS_REGISTERED_MODELS}'",
                      error_code=INVALID_PARAMETER_VALUE,
                  )
              if field.key in observed_order_by_clauses:
                  raise MlflowException(
                      f"`order_by` contains duplicate fields: {order_by_list}"
                  )
              observed_order_by_clauses.add(field.key)
              if ascending:
                  clauses.append(field.asc())
              else:
                  clauses.append(field.desc())
  
      if SqlRegisteredModel.name.key not in observed_order_by_clauses:
          clauses.append(SqlRegisteredModel.name.asc())
      return clauses
  
imports: import logging
  import urllib
  import sqlalchemy
  from sqlalchemy.future import select
  import mlflow.store.db.utils
  from mlflow.entities.model_registry.model_version_stages import ALL_STAGES, DEFAULT_STAGES_FOR_GET_LATEST_VERSIONS, STAGE_ARCHIVED, STAGE_DELETED_INTERNAL, get_canonical_stage
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE, INVALID_STATE, RESOURCE_ALREADY_EXISTS, RESOURCE_DOES_NOT_EXIST
  from mlflow.store.artifact.utils.models import _parse_model_uri
  from mlflow.store.entities.paged_list import PagedList
  from mlflow.store.model_registry import SEARCH_MODEL_VERSION_MAX_RESULTS_DEFAULT, SEARCH_MODEL_VERSION_MAX_RESULTS_THRESHOLD, SEARCH_REGISTERED_MODEL_MAX_RESULTS_DEFAULT, SEARCH_REGISTERED_MODEL_MAX_RESULTS_THRESHOLD
  from mlflow.store.model_registry.abstract_store import AbstractStore
  from mlflow.store.model_registry.dbmodels.models import SqlModelVersion, SqlModelVersionTag, SqlRegisteredModel, SqlRegisteredModelAlias, SqlRegisteredModelTag
  from mlflow.utils.search_utils import SearchModelUtils, SearchModelVersionUtils, SearchUtils
  from mlflow.utils.time import get_current_time_millis
  from mlflow.utils.uri import extract_db_type_from_uri
  from mlflow.utils.validation import _validate_model_alias_name, _validate_model_name, _validate_model_version, _validate_model_version_tag, _validate_registered_model_tag, _validate_tag_name
label_desc: Use image node_id 16 for calling the SqlAlchemyStore obj's underlying member method code with example usage: obj._parse_search_registered_models_order_by(cls, order_by_list) and returns: clauses